首页 > 解决方案 > 如何在循环时在 Arduino Mega Board 中自动递增?

问题描述

请理解使用翻译的语气很尴尬

我为 Arduino Mega Board 编写了以下代码。

但是, buf_i 的值在第二个 while 循环中没有增加。

char buf[] = {0, };

if (Serial3.available()) {
    int inByte = Serial3.read();
    int nextChar = 0;
    if (inByte == 90) { //find Header 1
        nextChar = Serial3.read();
        if (nextChar == 165) { // find Header 2

            int buf_i = 0;
            int dataLen = Serial3.read(); // get Message Length

            //save data [ char buf[] ]  ---> works well!
            while (buf_i < dataLen) {
                buf[buf_i] = Serial3.read();
                buf_i++;
            }

            buf_i = 0;
            //print data to Serial ---> not work (Does not increase buf_i) 
            while (buf_i < dataLen) {
                Serial.print(" ");
                Serial.println(buf[buf_i]);
                buf_i++;
            }
        }
    }
    Serial.write(inByte);
}

这是串行监视器日志

  1. 在 Serial3 消息 5A A5 06 83 21 00 01 00 11

  2. 在串行消息中 在此处输入图像描述

谢谢您的帮助 :)

标签: while-looparduinoinfinite-loop

解决方案


您创建的缓冲区只有一个元素。如果您尝试插入多个,则行为未定义。

char buf[] = {0, };

您必须使此缓冲区足够大以容纳最大的消息。

char buf[maximum_data_length] = {0};

推荐阅读