通过串口控制舵机不能实现

2016-08-111.6万
AI 快速预览详细 收起
本文讨论了通过串口控制舵机时遇到的问题,具体表现为输入一个三位数后,后续的一位或两位数会自动补零。文章详细分析了报错现象的原因,并提供了具体的解决方法。通过清空缓冲区,可以避免数据残留导致的自动补零问题。此外,文章还提供了详细的代码示例,帮助读者更好地理解和解决问题。
想通过串口控制舵机,把串口中的字符串存到数组中,然后通过strtol把字符串转换成10进制,但我在串口依次输入5个数,分别是1,10,200,1,10,但结果却是

通过串口控制舵机不能实现图1


为什么输入一个三位数后,后面如果在串口中输入一位或两位数,它就会自动补零呢,我的程序如下,

[mw_shl_code=applescript,true]#include <Servo.h>
char buffer[4];
int value=0;
Servo myservo;
void setup() {
  Serial.begin(9600);
  Serial.flush();
  myservo.attach(5);//定义伺服马达输出第5脚位
  myservo.write(90);
}
void loop() {

  if(Serial.available()>0){
    delay(200);
    int index=0;
   int num=Serial.available();
   if(num>4){
    num=4;
   }
   while(num--){
    buffer[index++]=Serial.read();
   }
   Serial.println(buffer);

  /*
   value=strtol(buffer,NULL,10);
    value=constrain(value,0,179);
    myservo.write(value);
    delay(15);
   Serial.println(value);
   */
  }
}
[/mw_shl_code]

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(3)
小蚱蜢
小蚱蜢
你没有对BUF数组清零
凌风清羽
凌风清羽
看不懂
dsweiliang
dsweiliang
帮顶
- 没有更多了 -