Arduino code weird return with Serial.read()
我的 Arduino 代码中的 Serial.read() 命令出现问题。我将它连接到两个连接到 LED 的 74HC595 移位寄存器。
我检查是否有串行数据,然后读取两个字节。然后将这些字节传递给将它们都移出的方法。当我使用 Serial.print 检查字节以将它们打印到串行监视器时,例如
1 2 3 4 | 49 255 50 255 |
为什么我得到两个 255 我已经阅读了 arduino.cc 上的文档,它说它只读取一个字节。有什么想法吗?
最终目标是读取串行线上的两个字节并将它们移出到移位寄存器的IE是十进制5的字节值
1 2 3 4 | if (Serial.available() > 0) { byte low = Serial.read(); byte high = Serial.read(); //... |
这是您的代码中的一个错误。很可能会跳闸,串口没那么快。 Serial.available() 仅返回 1 的几率如此之高。您可以读取低字节,但如果没有要读取的数据,则 Serial.read() 将返回 -1。这使得高等于0xff。简单的解决方法是:
1 | if (Serial.available() >= 2) |
我在读取程序时遇到了同样的问题...
我有幸让代码循环直到填满...
在接收新的串行数据之前,我刷新串行以获取最新的字节
1 | While(Serial.read() != -1); //clears data in the PC Serial Port |
这就是所有放在一起的样子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | int i = 0; byte bytes[3]; interval = 150; //allows for this amount of time to read from serial long previousMillis = 0; void loop() { unsigned long currentMillis = millis(); if(currentMillis - previousMillis < interval && i < 2) { if(Serial.available() > 0) { bytes[i] = Serial.read(); i++; } } if(currentMillis - previousMillis > 1000) { //waits 1 second to get new serial data previousMillis = currentMillis; //resets the timer i = 0; While(Serial.read() != -1); //clears data in the PC Serial Port } |