我正在为一个小型arduino项目编写一个16x2 LCD的菜单。 我差不多完成了,但我不明白最后一个小问题。
以下(简化)代码会产生问题:
int var1=0;
int var2=0;
typedef struct {
unsigned int item_value;
char item_name[17];
} Select_Item;
typedef struct {
char item_name[17];
int* variable;
Select_Item* list;
} Menu_Item;
Select_Item sel_one = { 0, "Selection 1" };
Select_Item sel_two = { 1, "Selection 2" };
Select_Item* sel_list[2] = { &sel_one, &sel_two };
Menu_Item menu_item1 = { "Item 1", &var1, NULL };
Menu_Item menu_item2 = { "Item 2", &var2, &sel_list };
Menu_Item* menu_list[2] = { &menu_item1, &menu_item2 };
最终会出现以下错误:
sketch_feb08a.ino:24:53: error: cannot convert 'Select_Item* (*)[2]' to 'Select_Item*' in initialization
在代码中我正在访问变量中的值并将其显示在显示中,一旦编辑完毕,我就可以将其写回变量。只要我只有数字来显示/编辑,那就不是问题了。 现在为了便于使用,我想添加一些选项菜单,用户可以从选项中进行选择。应显示item_name而不是原始值,但当然应在场景后面使用item_value。 这就是我引入Select_Item结构的原因。
我不明白错误信息。这有什么不对?
答案 0 :(得分:0)
我认为您尝试做的事情是这样的:
int var1=0;
int var2=0;
typedef struct {
unsigned int item_value;
char item_name[17];
} Select_Item;
typedef struct {
char item_name[17];
int* variable;
Select_Item* list;
} Menu_Item;
Select_Item sel_one = { 0, "Selection 1" };
Select_Item sel_two = { 1, "Selection 2" };
Select_Item sel_three = {2, "Selection 3" };
Select_Item sel_four = {3, "Selection 4" };
Select_Item* sel_list_1[] = { &sel_one, &sel_two };
Select_Item* sel_list_2[] = { &sel_three, &sel_four };
Menu_Item menu_item1 = { "Item 1", &var1, sel_list_1[0] }; // Note the syntax here
Menu_Item menu_item2 = { "Item 2", &var2, sel_list_2[0] }; // Note the syntax here
Menu_Item* menu_list[2] = { &menu_item1, &menu_item2 };
// Added for testing
int main()
{
printf("Menu item '%s'\n", menu_list[0]->item_name);
printf(" %d - %s\n", menu_list[0]->list[0].item_value, menu_list[0]->list[0].item_name);
printf(" %d - %s\n", menu_list[0]->list[1].item_value, menu_list[0]->list[1].item_name);
printf("Menu item '%s'\n", menu_list[1]->item_name);
printf(" %d - %s\n", menu_list[1]->list[0].item_value, menu_list[1]->list[0].item_name);
printf(" %d - %s\n", menu_list[1]->list[1].item_value, menu_list[1]->list[1].item_name);
return 0;
}
请注意menu_item1
和menu_item2
初始化的语法。
我添加了main(),所以我可以使用普通的C编译器进行测试(因为我没有带有LCD的Arduino)。我的测试结果如下:
Menu Item 'Item 1'
0 - Selection 1
1 - Selection 2
Menu Item 'Item 2'
3 - Selection 3
4 - Selection 4
我认为这是您尝试使用数据结构实现的目标。您只需要根据您的Arduino代码进行调整,并使用这些数据结构来管理LCD上的菜单选项。