Arduino不通过串口返回所需的输出

时间:2017-09-05 18:02:32

标签: struct arduino serial-port arduino-uno

我想通过串口发送一个结构内的元素列表,但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

1 个答案:

答案 0 :(得分:3)

你有几个错误......

  1. 此代码:

    void fn_nd_function(){
      Serial.println('test');
    }
    
  2. 测试是不是单个字符呢?那你为什么用单引号呢?

    但更重要的是,这是导致输出不良的原因:

    menu_add_item("item " + i, fn_nd_function);
    

    "item" + i不是如何将数字连接到字符串"item"的末尾。这是C ++而不是Java或Python。您必须单独构建该字符串。请不要试图使用String类,因为这可能会导致其他问题。

    现在发生的是你正在传递"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);