Arduino 没有 return 通过串行端口获得所需的输出
Arduino does not return the desired output via serial port
我想通过串口发送一个结构内部的元素列表,但是Arduino输出异常
有点帮助?这个异常输出是什么原因?
const int menu_max_item = 20;
int menu_num_item = 0;
typedef struct item_menu{
String text;
void (*func)(void);
} t_item_menu;
t_item_menu arr_menu[menu_max_item];
void menu_add_item(String txt, void (*f)(void)){
arr_menu[menu_num_item].text = txt;
arr_menu[menu_num_item].func = f;
menu_num_item++;
}
void fn_nd_function(){
Serial.println('test');
}
void print_menu_lcd(){
for(int x = 0; x < 4 && x < menu_num_item; x++){
lcd.setCursor(0,x);
lcd.print(arr_menu[x].text);
}
}
void setup(){
Serial.begin(9600);
for(int i = 0; i < 2; i++) menu_add_item("item " + i, fn_nd_function);
}
void loop() {
print_menu_lcd();
delay(1000);
}
实际输出
item
tem
em
期望的输出
item 1
item 2
item 3
你有几个错误...
此代码:
void fn_nd_function(){
Serial.println('test');
}
test 不是单个字符吗?那么为什么要用单引号引起来呢?
但更重要的是,这是您输出错误的原因:
menu_add_item("item " + i, fn_nd_function);
"item" + i
不是将数字连接到字符串 "item"
末尾的方式。这是 C++,不是 Java 或 Python。您必须单独构建该字符串。请不要试图使用 String
class,因为这可能会导致其他问题。
现在发生的事情是你正在传递 "item"
这是一个指向存储在内存中某处的字符数组的指针,其中包含字符 'i'
、't'
、'e'
和 'm'
。当您向该指针添加 1 时,您最终得到一个指向 't'
的指针,当您添加 2 时,您最终得到一个指向 'e'
的指针。因此,当您从这些指针打印时,您只会得到该指针指向的部分。
你需要在它前面有一行来首先构建字符串。大致如下:
char str[7] = "item "; // Note the two spaces to leave room for the digit
str[5] = i + '0'; // Add '0' to convert single digit to ascii
menu_add_item(str, fn_nd_function);
我想通过串口发送一个结构内部的元素列表,但是Arduino输出异常
有点帮助?这个异常输出是什么原因?
const int menu_max_item = 20;
int menu_num_item = 0;
typedef struct item_menu{
String text;
void (*func)(void);
} t_item_menu;
t_item_menu arr_menu[menu_max_item];
void menu_add_item(String txt, void (*f)(void)){
arr_menu[menu_num_item].text = txt;
arr_menu[menu_num_item].func = f;
menu_num_item++;
}
void fn_nd_function(){
Serial.println('test');
}
void print_menu_lcd(){
for(int x = 0; x < 4 && x < menu_num_item; x++){
lcd.setCursor(0,x);
lcd.print(arr_menu[x].text);
}
}
void setup(){
Serial.begin(9600);
for(int i = 0; i < 2; i++) menu_add_item("item " + i, fn_nd_function);
}
void loop() {
print_menu_lcd();
delay(1000);
}
实际输出
item
tem
em
期望的输出
item 1
item 2
item 3
你有几个错误...
此代码:
void fn_nd_function(){ Serial.println('test'); }
test 不是单个字符吗?那么为什么要用单引号引起来呢?
但更重要的是,这是您输出错误的原因:
menu_add_item("item " + i, fn_nd_function);
"item" + i
不是将数字连接到字符串 "item"
末尾的方式。这是 C++,不是 Java 或 Python。您必须单独构建该字符串。请不要试图使用 String
class,因为这可能会导致其他问题。
现在发生的事情是你正在传递 "item"
这是一个指向存储在内存中某处的字符数组的指针,其中包含字符 'i'
、't'
、'e'
和 'm'
。当您向该指针添加 1 时,您最终得到一个指向 't'
的指针,当您添加 2 时,您最终得到一个指向 'e'
的指针。因此,当您从这些指针打印时,您只会得到该指针指向的部分。
你需要在它前面有一行来首先构建字符串。大致如下:
char str[7] = "item "; // Note the two spaces to leave room for the digit
str[5] = i + '0'; // Add '0' to convert single digit to ascii
menu_add_item(str, fn_nd_function);