[Arduino] 在串口读取多个字符串,并且转换为数字数组
功能如题目。
在串口收到逗号分割的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;
}
}
[Arduino] 在串口读取多个字符串,并且转换为数字数组的更多相关文章
- Arduino学习笔记A6(补充) - 在串口读取多个字符串,并且转换为数字数组
功能如题目. 在串口收到逗号分割的6串数字比如 100,200,45,4,87,99 然后在6个PWM端口3, 5, 6, 9, 10, 11输出对应PWM值 代码注释很详细了,就不再说明了. ARD ...
- PMS5003ST+Arduino Nano 串口读取数据
先上代码: 库文件是在guihub上的大神写的https://github.com/jbanaszczyk,我拿来小改下用以支持5003ST #include <Arduino.h> #i ...
- string字符串转C风格字符串 进而转换为数字
要求如题 头文件stdlib.h中有一个函数atof() 可以将字符串转化为双精度浮点数(double) double atof(const char *nptr); 此字符串为C风格字符串,因此需要 ...
- Java中怎样判断一个字符串是否是数字?
1:正则表达式 public static void main(String[] args) { String str = "123456456456456456"; boolea ...
- go语言之字符串、指针、数组、切片、结构struct、面向对象
一: 字符串 概述: Go 语言将字符串作为 种原生的基本数据类型,字 符串的初始化可以使用字符串字面量. (1)字符串是常量,可以通过类 数组 索引访问其字节单元,但是不能修改某个字节的值 (2)宇 ...
- Arduino通讯串口
串口是Arduino与其它设备进行通信的接口 所有的Arduino控制板有至少一个串口(又称作为UART或USART).它通过0(RX)和1(TX)数字引脚经过串口转换芯片连接计算机USB端口与计算机 ...
- C#与Arduino通过串口通信来控制LED灯的状态
一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...
- 一篇提及如何通过串口读取并提取GPS信号的论文
一篇提及如何通过串口读取并提取GPS信号的论文 作者:崔杰 梁计春 王国军 目前,在用计算机进行数据传输时,常用的是串行通信方式.在Visual C++的编程中,既可以用Windows API函数进行 ...
- Arduino通过串口监视器收发数据
在串口监视器中发送数据,板子收到数据并打印出来. 不需要额外电路,但是板子必须连接电脑,Arduino IDE的串口监视器也需要被打开. 代码 /* 串口事件 当新的串口数据到来时,我们会将它添加到一 ...
随机推荐
- UVALive 5886 The Grille (模拟)
The Grille 题目链接: http://acm.hust.edu.cn/vjudge/problem/26634 Description http://7xjob4.com1.z0.glb.c ...
- python知识点 07-11
python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 python的 nonlocal关键字用来在函数或其他作用域中使用 ...
- #ifdef __cplusplus
转自:http://www.2cto.com/kf/201302/191822.html #ifdef __cplusplus,一般用于将C++代码以标准C形式输出(即以C的形式被调用),这是因为C+ ...
- commondline 之三 执行jar文件
java [-options] -jar jarfile [args...] 点击查看获取可执行jar文件方法
- eclipse查看 rt.jar 源码
源码位置: %JAVA_HOME%/src.zip step1: step2: step3:
- C#图解教程读书笔记(第15章 委托)
委托是C#的一个很重要的知识点. 1.什么是委托 委托在我认为,就是一系列格式相同的方法列表,可能就是定义的名称不一致,参数.返回值等都是一样的. 2.如何声明委托 delegate void MyF ...
- NS_ENUM & NS_OPTIONS
When everything is an object, nothing is. So, there are a few ways you could parse that, but for the ...
- 标准Dispose实现 (转)
需要明确一下C#程序(或者说.NET)中的资源.简单的说来,C#中的每一个类型都代表一种资源,而资源又分为两类: 托管资源:由CLR管理分配和释放的资源,即由CLR里new出来的对象: 非托管资源 ...
- jquery表单内容过滤
效果: 输入筛选字段后显示效果: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http ...
- cocos2dx 兼容性
报错: Caused by: java.lang.UnsatisfiedLinkError: Couldn't load cocos2dcpp: findLibrary returned null 因 ...