Arduino学习笔记A6(补充) - 在串口读取多个字符串,并且转换为数字数组
功能如题目。 在串口收到逗号分割的6串数字比如 100,200,45,4,87,99 然后在6个PWM端口3, 5, 6, 9, 10, 11输出对应PWM值
代码注释很详细了,就不再说明了。
- //定义一个comdata字符串变量,赋初值为空值
- String comdata = "";
- //numdata是分拆之后的数字数组
- int numdata[6] = {0}, PWMPin[6] = {3, 5, 6, 9, 10, 11}, mark = 0;
- void setup()
- {
- //定义0~6脚是输出
- for(int i = 0; i < 6; i++) pinMode(PWMPin[i], OUTPUT);
- Serial.begin(9600);
- }
- void loop()
- {
- //j是分拆之后数字数组的位置记数
- int j = 0;
- //不断循环检测串口缓存,一个个读入字符串,
- while (Serial.available() > 0)
- {
- //读入之后将字符串,串接到comdata上面。
- comdata += char(Serial.read());
- //延时一会,让串口缓存准备好下一个数字,不延时会导致数据丢失,
- delay(2);
- //标记串口读过数据,如果没有数据的话,直接不执行这个while了。
- mark = 1;
- }
- if(mark == 1) //如果接收到数据则执行comdata分析操作,否则什么都不做。
- {
- //显示刚才输入的字符串(可选语句)
- Serial.println(comdata);
- //显示刚才输入的字符串长度(可选语句)
- Serial.println(comdata.length());
- /*******************下面是重点*******************/
- //以串口读取字符串长度循环,
- for(int i = 0; i < comdata.length() ; i++)
- {
- //逐个分析comdata[i]字符串的文字,如果碰到文字是分隔符(这里选择逗号分割)则将结果数组位置下移一位
- //即比如11,22,33,55开始的11记到numdata[0];碰到逗号就j等于1了,
- //再转换就转换到numdata[1];再碰到逗号就记到numdata[2];以此类推,直到字符串结束
- if(comdata[i] == ',')
- {
- j++;
- }
- else
- {
- //如果没有逗号的话,就将读到的数字*10加上以前读入的数字,
- //并且(comdata[i] - '0')就是将字符'0'的ASCII码转换成数字0(下面不再叙述此问题,直接视作数字0)。
- //比如输入数字是12345,有5次没有碰到逗号的机会,就会执行5次此语句。
- //因为左边的数字先获取到,并且numdata[0]等于0,
- //所以第一次循环是numdata[0] = 0*10+1 = 1
- //第二次numdata[0]等于1,循环是numdata[0] = 1*10+2 = 12
- //第三次是numdata[0]等于12,循环是numdata[0] = 12*10+3 = 123
- //第四次是numdata[0]等于123,循环是numdata[0] = 123*10+4 = 1234
- //如此类推,字符串将被变成数字0。
- numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
- }
- }
- //comdata的字符串已经全部转换到numdata了,清空comdata以便下一次使用,
- //如果不请空的话,本次结果极有可能干扰下一次。
- comdata = String("");
- //循环输出numdata的内容,并且写到PWM引脚
- for(int i = 0; i < 6; i++)
- {
- Serial.print("Pin ");
- Serial.print(PWMPin[i]);
- Serial.print(" = ");
- Serial.println(numdata[i]);
- analogWrite(PWMPin[i], numdata[i]);
- numdata[i] = 0;
- }
- //输出之后必须将读到数据的mark置0,不置0下次循环就不能使用了。
- mark = 0;
- }
- }
- //定义一个comdata字符串变量,赋初值为空值
- String comdata = "";
- //numdata是分拆之后的数字数组
- int numdata[6] = {0}, PWMPin[6] = {3, 5, 6, 9, 10, 11}, mark = 0;
- void setup()
- {
- //定义0~6脚是输出
- for(int i = 0; i < 6; i++) pinMode(PWMPin[i], OUTPUT);
- Serial.begin(9600);
- }
- void loop()
- {
- //j是分拆之后数字数组的位置记数
- int j = 0;
- //不断循环检测串口缓存,一个个读入字符串,
- while (Serial.available() > 0)
- {
- //读入之后将字符串,串接到comdata上面。
- comdata += char(Serial.read());
- //延时一会,让串口缓存准备好下一个数字,不延时会导致数据丢失,
- delay(2);
- //标记串口读过数据,如果没有数据的话,直接不执行这个while了。
- mark = 1;
- }
- if(mark == 1) //如果接收到数据则执行comdata分析操作,否则什么都不做。
- {
- //显示刚才输入的字符串(可选语句)
- Serial.println(comdata);
- //显示刚才输入的字符串长度(可选语句)
- Serial.println(comdata.length());
- /*******************下面是重点*******************/
- //以串口读取字符串长度循环,
- for(int i = 0; i < comdata.length() ; i++)
- {
- //逐个分析comdata[i]字符串的文字,如果碰到文字是分隔符(这里选择逗号分割)则将结果数组位置下移一位
- //即比如11,22,33,55开始的11记到numdata[0];碰到逗号就j等于1了,
- //再转换就转换到numdata[1];再碰到逗号就记到numdata[2];以此类推,直到字符串结束
- if(comdata[i] == ',')
- {
- j++;
- }
- else
- {
- //如果没有逗号的话,就将读到的数字*10加上以前读入的数字,
- //并且(comdata[i] - '0')就是将字符'0'的ASCII码转换成数字0(下面不再叙述此问题,直接视作数字0)。
- //比如输入数字是12345,有5次没有碰到逗号的机会,就会执行5次此语句。
- //因为左边的数字先获取到,并且numdata[0]等于0,
- //所以第一次循环是numdata[0] = 0*10+1 = 1
- //第二次numdata[0]等于1,循环是numdata[0] = 1*10+2 = 12
- //第三次是numdata[0]等于12,循环是numdata[0] = 12*10+3 = 123
- //第四次是numdata[0]等于123,循环是numdata[0] = 123*10+4 = 1234
- //如此类推,字符串将被变成数字0。
- numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
- }
- }
- //comdata的字符串已经全部转换到numdata了,清空comdata以便下一次使用,
- //如果不请空的话,本次结果极有可能干扰下一次。
- comdata = String("");
- //循环输出numdata的内容,并且写到PWM引脚
- for(int i = 0; i < 6; i++)
- {
- Serial.print("Pin ");
- Serial.print(PWMPin[i]);
- Serial.print(" = ");
- Serial.println(numdata[i]);
- analogWrite(PWMPin[i], numdata[i]);
- numdata[i] = 0;
- }
- //输出之后必须将读到数据的mark置0,不置0下次循环就不能使用了。
- mark = 0;
- }
- }
Arduino学习笔记A6(补充) - 在串口读取多个字符串,并且转换为数字数组的更多相关文章
- 【Arduino学习笔记08】使用串口监视器显示数据
代码及相关说明: 1 // 示例:读取模拟输入并显示在串口监视器中 2 3 const int ANALOG_IN = 0; 4 int val = 0; 5 6 void setup(){ 7 Se ...
- STM32学习笔记(四)——串口控制LED(中断方式)
目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...
- Arduino学习笔记① 初识Arduino
1.前言 近段时间,博主陆续更新了ESP8266学习笔记,主要开发平台是Arduino.但是,对于很多无基础的初学者来说,甚至不了解Arduino是什么.因此,博主决定加入一个Arduino学 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- STM32学习笔记(二)——串口控制LED
开发板芯片:STM32F407ZGT6 PA9-USART1_TX,PA10-USART1_RX; PF9-LED0,PF10-LED1; 一.串口1配置过程(不使用串口中断): 1.使能时钟,包括G ...
- Sass学习笔记(补充)
阅读目录 1. Sass和SCSS的区别 2. @while循环 3. @at-root 4. @content 5. 凸显注释 6. CSS输出样式 7. 重置浏览器样式 8. Sass调试和@de ...
- EF学习笔记(七):读取关联数据
总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本篇参考原文链接:Reading Related Data 本章主要讲述加载显示关联数据: 数据加载分为以下三种 Lazy l ...
- Python学习笔记之从文件中读取数据
10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python 知识,其中每一行都以“In Python you can”打头.将这个文件命名为learnin ...
- [Arduino] 在串口读取多个字符串,并且转换为数字数组
功能如题目.在串口收到逗号分割的6串数字比如100,200,45,4,87,99然后在6个PWM端口3, 5, 6, 9, 10, 11输出对应PWM值代码注释很详细了,就不再说明了. //定义一个c ...
随机推荐
- 【集成学习】安装lightgbm
1.下载whl lightgbm的whl下载地址 2.输入命令 pip install lightgbm-2.0.3-py2.py3-one-win_am64.whl 3.验证是否成功 import ...
- 安装伪分布式hbase 0.99.0
查看是否启动成功,输入jps,看到有HMaster和HQuorumPeer,浏览器输入http://localhost:16030/master-status,能打开说明成功 hbase(main): ...
- JVM原理二----JAVA虚拟机体系结构
组成: 指令集,寄存器,栈,无用单元收集(GC),方法区域.JAVA核心 1,指令集:这个不太清楚 2,寄存器:和处理器中的寄存器类似 pc:Java程序计数器. optop:指向*作数栈顶端的指针. ...
- silverlight——获取控件相对位置
事出有因:页面中存在滚动条,然后点击页面按钮时会进行正确性检查,如果出错在控件的位置会出现提示信息,但由于滚动条的出现,有可能在非可视区域内的控件出了问题,但目前是看不见的,因此,考虑获得出问题控件的 ...
- 很让人受教的提高php代码质量的方法
1.不要使用相对路径 常常会看到: require_once('../../lib/some_class.php'); 该方法有很多缺点: 它首先查找指定的php包含路径, 然后查找当前目录. 因此会 ...
- 线性回归 Linear regression(3) 线性回归的概率解释
这篇博客从一种方式推导了Linear regression 线性回归的概率解释,内容来自Standford公开课machine learning中Andrew老师的讲解. 线性回归的概率解释 在Lin ...
- python发送邮件的实例代码(支持html、图片、附件)
转自http://www.jb51.net/article/34498.htm 第一段代码 #!/usr/bin/python# -*- coding: utf-8 -*- import emaili ...
- Linux驱动开发基础知识
常用命令 lsmod: list module,将模块列表显示),功能是打印出当前内核中已经安装的模块列表 insmod: install module,安装模块,功能是向当前内核中去安装一个模块,用 ...
- mongooseim xmpp 服务器docker 安装试用
备注: 预备环境docker xmpp client 1. 启动mongooseim docker run -d -t -h mongooseim-1 --name mongooseim- ...
- 【转】刚发现一个linux在线文档库。很好很强大。
原文网址:http://blog.csdn.net/longxibendi/article/details/6048231 1.网址: http://www.mjmwired.net 2.比如查看这个 ...