从Arduino串行阅读似乎是非常不稳定的
Reading from Arduino Serial seems to be very unstable
我有以下简单的代码来读取从计算机发送到Arduino Mega板的命令:
void get_command()
{
char received;
int index = 0;
while (Serial.available() > 0) {
if (index < BUFFER_SIZE -1) {
received = Serial.read();
if (received == 'n') {
buffer[index] = ' ';
parse_command(buffer);
} else {
buffer[index++] = received;
}
} else {
Serial.println('666'); // buffer overflow
}
}
}
命令如下:A123 B123 C123 D123n
基本上是由空格分隔的指令序列,每个指令以字母开头,后跟一个数字。命令以"n"结尾。
阅读这个似乎很不稳定。有时我很好地理解了命令,有时我遗漏了第一个字母,有时是两个字母,有时它以数字开头,…
我通过串行监视器发送命令,设置为换行。
在编写此代码之前,我只需使用Serial检查大小。可用,然后等待一秒钟来填充缓冲区,然后将缓冲区复制到char*。这是完美的工作。我现在正在做这个循环,等待一个n,这看起来更优雅,但它非常不稳定。只需在第一个Serial.available()之后添加延迟(100)
这是代码:
void get_command()
{
char received;
if (Serial.available() > 0) {
delay(100); // let the buffer fill up
int index = 0;
while (Serial.available() > 0) {
if (index < BUFFER_SIZE -1) {
received = Serial.read();
if (received != 'n') {
buffer[index] = received;
index++;
} else {
buffer[index] = ' ';
parse_command(buffer);
}
} else {
Serial.println('666'); // buffer overflow
}
}
}
}
相关文章:
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 工会成员的析构函数似乎是自动调用的
- 对GLFW / Vulkan的未定义引用,尽管库似乎是链接的
- C 程序如果功能中的语句不执行.在逻辑上似乎是错误的
- 为什么没有参数的构造函数似乎是此代码的问题
- 立方体的正态似乎是向内指向
- 对于特定情况的整数溢出似乎是由整数溢出引起的错误
- 在Stdout上似乎是僵局
- 这个逻辑似乎是正确的,但它不起作用.有没有错
- 有没有更好的方法可以使此代码线程安全?线程局部静态似乎是一个生硬的工具
- Travis CI似乎是从错误的Stdlib读书
- 我的功能似乎是正确的,但我会收到编译错误
- 这似乎是C Primer第5版中的错误
- 这似乎是 clang++ 编译器中的一个错误
- 似乎是随机程序在完成C++时失败
- 我正在收到错误的“ list :: ShowList”:功能风格的初始化器似乎是我的CPP文件中的函数定义'
- 我在检查字符串时得到"Invalid utf 8 error",但当我使用 std::cout 时似乎是正确的
- 捕获构造函数抛出的异常似乎是不可能的
- 无符号和有符号int(对我来说)之间的比较似乎是必需的(c++)
- 从Arduino串行阅读似乎是非常不稳定的