JonahAbel JonahAbel
关注数: 4 粉丝数: 52 发帖数: 277 关注贴吧数: 36
求助!! 关于JY-61模块的程序使用 发现JY61例程里面如果加一个程序执行了几次的小计算就会导致串口的数据无法正常的输出,感觉是随机输出的,求大神指点,是因为缓存区的原因吗,以下是代码和结果 volatile int jishu = 0;//jishu unsigned char Re_buf[11],counter=0; unsigned char sign=0; float a[3],w[3],angle[3],T; void setup() { // initialize serial: Serial.begin(9600); Serial2.begin(115200); } void loop() { //if(flagZD == 1) checkSerial2(); Distance_angle(); } void Distance_angle(){ jishu++; Serial.print(jishu);Serial.print(" "); if(sign) { sign=0; if(Re_buf[0]==0x55) //检查帧头 { switch(Re_buf [1]) { case 0x51: a[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*16; a[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*16; a[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*16; T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25; break; case 0x52: w[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*2000; w[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*2000; w[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*2000; T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25; break; case 0x53: angle[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*180; angle[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*180; angle[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*180; T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25; /* Serial.print("a:"); Serial.print(a[0]);Serial.print(" "); Serial.print(a[1]);Serial.print(" "); Serial.print(a[2]);Serial.print(" "); Serial.print("w:"); Serial.print(w[0]);Serial.print(" "); Serial.print(w[1]);Serial.print(" "); Serial.print(w[2]);Serial.print(" "); Serial.print("angle:"); Serial.print(angle[0]);Serial.print(" "); Serial.print(angle[1]);Serial.print(" ");*/ Serial.println(angle[2]); //Serial.print(" "); delay(1000); // Serial.print("T:"); // Serial.println(T); break; } } } //flagZD=1; while ( Serial2.available()) { //char inChar = (char)Serial.read(); Serial.print(inChar); //Output Original Data, use this code Re_buf[counter]=(unsigned char) Serial2.read(); //Serial.print("/"); Serial.print(counter);Serial.print(" "); Serial.print(Re_buf[counter]);Serial.print(" "); if(counter==0&&Re_buf[0]!=0x55) return; //第0号数据不是帧头 counter++; if(counter==11) //接收到11个数据 { counter=0; //重新赋值,准备下一帧数据的接收 sign=1; } } }
1 下一页