while-loop - 如何在循环时在 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);
}
这是串行监视器日志
在 Serial3 消息 5A A5 06 83 21 00 01 00 11
在串行消息中 在此处输入图像描述
谢谢您的帮助 :)
解决方案
您创建的缓冲区只有一个元素。如果您尝试插入多个,则行为未定义。
char buf[] = {0, };
您必须使此缓冲区足够大以容纳最大的消息。
char buf[maximum_data_length] = {0};
推荐阅读
- javascript - 用于返回单个项目的嵌套 for 循环的功能等效项
- wpf - CefSharp ctrl+f5
- kotlin - 如何在 Windows 上编译和运行涉及协程的 Kotlin 代码
- flutter - Java DTO 到 Flutter 对象并返回
- angularjs - 以角度将数组值存储在对象中
- ordinal - CLMM 事后多重比较,包括响应变量的水平
- c# - 我们可以使用 c# 对 openshift pod 进行读/写操作吗?
- laravel - 我怎么能用 laravel eloquent 计算孩子的孩子
- c++ - 并行与顺序天真的快速排序
- sql - 将 ML 的 RGB 值保存在数据库中