打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Arduino学习笔记A6(补充)
Arduino学习笔记A6(补充) - 在串口读取多个字符串,并且转换为数字数组


功能如题目。
在串口收到逗号分割的6串数字比如
100,200,45,4,87,99
然后在6个PWM端口3, 5, 6, 9, 10, 11输出对应PWM值


代码注释很详细了,就不再说明了。
ARDUINO 代码
  1. //定义一个comdata字符串变量,赋初值为空值
  2. String comdata = "";
  3. //numdata是分拆之后的数字数组
  4. intnumdata[6] ={0},PWMPin[6] ={3, 5,6, 9, 10,11}, mark = 0;
  5. voidsetup()
  6. {
  7. //定义0~6脚是输出
  8.   for(int i = 0; i < 6; i++)pinMode(PWMPin[i],OUTPUT);
  9.   Serial.begin(9600);
  10. }
  11.  
  12. voidloop()
  13. {
  14. //j是分拆之后数字数组的位置记数
  15.   int j = 0;
  16.  
  17.   //不断循环检测串口缓存,一个个读入字符串,
  18.   while (Serial.available() >0)
  19.   {
  20.   //读入之后将字符串,串接到comdata上面。
  21.     comdata += char(Serial.read());
  22.      //延时一会,让串口缓存准备好下一个数字,不延时会导致数据丢失,
  23.     delay(2);
  24.     //标记串口读过数据,如果没有数据的话,直接不执行这个while了。
  25.     mark = 1;
  26.   }
  27.  
  28.   if(mark == 1)  //如果接收到数据则执行comdata分析操作,否则什么都不做。
  29.   {
  30.   //显示刚才输入的字符串(可选语句)
  31.     Serial.println(comdata);
  32.      //显示刚才输入的字符串长度(可选语句)
  33.     Serial.println(comdata.length());
  34.  
  35. //以串口读取字符串长度循环,
  36.     for(int i = 0; i < comdata.length() ;i++)
  37.     {
  38.     //逐个分析comdata[i]字符串的文字,如果碰到文字是分隔符(这里选择逗号分割)则将结果数组位置下移一位
  39.     //即比如11,22,33,55开始的11记到numdata[0];碰到逗号就j等于1了,
  40.     //再转换就转换到numdata[1];再碰到逗号就记到numdata[2];以此类推,直到字符串结束
  41.      if(comdata[i] ==',')
  42.      {
  43.        j++;
  44.      }
  45.      else
  46.      {
  47.         //如果没有逗号的话,就将读到的数字*10加上以前读入的数字,
  48.         //并且(comdata[i] -'0')就是将字符'0'的ASCII码转换成数字0(下面不再叙述此问题,直接视作数字0)。
  49.         //比如输入数字是12345,有5次没有碰到逗号的机会,就会执行5次此语句。
  50.         //因为左边的数字先获取到,并且numdata[0]等于0,
  51.         //所以第一次循环是numdata[0] = 0*10+1 = 1
  52.         //第二次numdata[0]等于1,循环是numdata[0] = 1*10+2 =12
  53.         //第三次是numdata[0]等于12,循环是numdata[0] = 12*10+3 =123
  54.         //第四次是numdata[0]等于123,循环是numdata[0] = 123*10+4 =1234
  55.         //如此类推,字符串将被变成数字0。
  56.        numdata[j]= numdata[j] * 10+ (comdata[i] -'0');
  57.      }
  58.     }
  59.     //comdata的字符串已经全部转换到numdata了,清空comdata以便下一次使用,
  60.     //如果不请空的话,本次结果极有可能干扰下一次。
  61.     comdata = String("");
  62.  
  63.  
  64.     //循环输出numdata的内容,并且写到PWM引脚
  65.     for(int i = 0; i < 6; i++)
  66.     {
  67.      Serial.print("Pin");
  68.      Serial.print(PWMPin[i]);
  69.      Serial.print(" =");
  70.      Serial.println(numdata[i]);
  71.      analogWrite(PWMPin[i],numdata[i]);
  72.      numdata[i] =0;
  73.     }
  74.     //输出之后必须将读到数据的mark置0,不置0下次循环就不能使用了。
  75.     mark = 0;
  76.   }
  77. }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Arduino读取串口数据并进行字符串分割
Arduino与LabVIEW互动应用02
write() – 太极创客
Arduino从入门到创客带师(-1)—Hello World!
如何使用Arduino和HM
Arduino
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服