arduino mega2560 串口通讯-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1725|回复: 1

[未解决] arduino mega2560 串口通讯

[复制链接]
发表于 2021-11-4 15:42 | 显示全部楼层 |阅读模式
自己之前用arduino mega2560 写了一段与串口通讯,一问一答的程序,本来好好的,最近不知道为什么重新烧录进去却发现老是出错。通过各种检查,最后发现自己接受的数据多了一组,原来是发送指令时造成的。
请问下大神们,我的发送数组的方式错在哪里,特意加了延时还有不能解决。


  1. unsigned char data1[8] = {0x01,0x03,0x10,0x01,0x00,0x02,0x91,0x0B}; //温控表指令
  2. unsigned char data2[8] = {0x11,0x03,0x00,0x35,0x00,0x01,0x96,0x94}; //数控电源功率指令
  3. String comdata1 = "";
  4. String comdata2 = "";

  5. void setup() {
  6.     Serial.begin(9600);
  7.     Serial2.begin(9600); //设置串口波特率9600   温控表
  8.     Serial3.begin(9600); //设置串口波特率9600   功率表
  9. }

  10. void loop() {
  11. //    wenkongbiao();
  12.     gonglvbiao();
  13. }

  14. void wenkongbiao(){ //温控表功率
  15.     for (int i = 0; i < 8; i++)
  16.   {
  17.     delay(40);
  18.     Serial2.write(data1[i]);//向串口2发送信息
  19.   }
  20.     delay(40);
  21.     while (Serial2.available() > 0)
  22.   {
  23.     comdata1 += char(Serial2.read());  //每次读一个char字符,并相加  字符串
  24.     delay(2);
  25.   }
  26.     delay(20);
  27.     if (comdata1.length() > 0)
  28.   {
  29.     unsigned char data5 = comdata1[3];
  30.     unsigned char data6 = comdata1[4];
  31.     int val7 = (data5 * 256 + data6);     
  32.     delay(20);
  33.     delay(20);
  34.     Serial.print(comdata1);
  35. //    delay(20);
  36. //    Serial.print(gonglv);
  37.   }   
  38. }

  39. void gonglvbiao(){ //数控电源功率
  40.     for (int i = 0; i < 8; i++)
  41.   {
  42.     delay(2);
  43.     Serial3.write(data2[i]);//向串口3发送信息
  44.   }
  45.     delay(40);
  46.     while (Serial3.available() > 0)
  47.   {
  48.     comdata2 += char(Serial3.read());  //每次读一个char字符,并相加  字符串
  49.     delay(2);
  50.   }
  51.     delay(20);
  52.     if (comdata2.length() > 0)
  53.   {
  54.     unsigned char data5 = comdata2[3];
  55.     unsigned char data6 = comdata2[4];
  56.     int val7 = (data5 * 256 + data6);   
  57.     delay(20);
  58. //    delay(20);
  59. //    Serial.print(comdata2);
  60. //    delay(20);
  61. //    Serial.print(gonglv);
  62.   }   
  63. }
复制代码


360截图20211104152642152.jpg
 楼主| 发表于 2021-11-4 16:38 | 显示全部楼层
改了另外一种方式,加了200ms延时以为好了,长时间还是一样 300ms也一样
360截图20211104162550495.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 21:34 , Processed in 0.079475 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表