总结一下 在学习arduino srial函数时 的几个知识点:
/*** 汇总一下Serial.print输出的一些情况,后面部分要和Serial.read配合使用;* 1. print 输出字符 和int数的结果,* 2. print 输出字符串和一连串的数字* 3. read 读取一个字符 再输出* 4. read 读取一个数字 再输出* 5.如何读取多个数字再输出* 6.如何读取多个字符再输出*/char charDanzifu = 'a';int intXiaozhengshu1 = 9;int intXiaozhengshu2 = 19;int intDazhengshu1= 0X1111;int intDazhengshu2 = 0X22221;char intChar1 = 16;char intChar2 = 98;char charShuzu1[]="Hello world!";char charShuzu2[]="98 97 99 100";void setup()
{Serial.begin(9600);Serial.println(charDanzifu); // charDanzifu 就是一个字符,print 以ASCII码形式输出,IDE的串口监视器显示的时候,转化为ASCII码对应的字符显示Serial.println(intXiaozhengshu1); // 数字也是按照字符的形式输出,输出的是 9 字符 对应的ASCII码,显示的时候 显示的是ASCII码对应的字符Serial.println(intXiaozhengshu2); // 19 是 分为 字符1 和 字符 9 ,分别传输和显示的Serial.println(intDazhengshu1,HEX); // 整数形式就是正常输出,后面如果不带HEX , 就默认按照十进制输出, Serial.println(intDazhengshu2,HEX); // 这里要注意,0X22221 超过了16位,Arduino UNO 最大存储16位,超过16位,就发生了截断,可以输出结果看到少了一个2Serial.println(intChar1); // 如果用数字 16 表示char格式,程序里会默认16 是某个字符的ASCII码, //输出的时候 输出的是这个数字,显示的是这个码 对应的字符, 16 对应的字符 是乱码Serial.println(intChar2); // 98 对应的字符是 b, 所以最终输出的就是 b Serial.println(charShuzu1); // 正常输出字符串Serial.println(charShuzu2); // 数字字符串也是按照 单个 数字字符 依次输出的}/** * *下面在loop中测试 read 和 print 对应的输出1.直接用read 不经过变量输出呢2.定义的变量是char 类型,在 read 字符和数字的情况下,分别输出的是什么3. 定义的变量是int 类型,在 read 字符和数字的情况下,分别输出的是什么4. 怎样读取一个长整数,然后正确的输出出来(都按十进制)5. 怎样读取一个长字符串,然后正确的输出出来*/void loop() // 针对每一类,单独一个模块进行,要注意delay。
{// read and printint intReadp = 0; char charReadp;while(!Serial.available()){}while(Serial.available()){// read每次只读一个字节,且从缓存去除;这里验证一下 直接输出read到的结果,不经过变量,输入6aSerial.println("第一步:");Serial.println(Serial.read());delay(10); }while(!Serial.available()){}while(Serial.available()){// read每次只读一个字节,且从缓存去除;这里验证一下 int 类型变量 在int 和char 类型分别读取输出的结果,输入6aintReadp = Serial.read();Serial.println("第二步:");Serial.print(" The intReadp is : ");Serial.println(intReadp);delay(10); }while(!Serial.available()){}while(Serial.available()){// 这里验证一下 char 类型变量 在int 和char 类型分别读取输出的结果,输入6acharReadp = Serial.read();Serial.println("第三步:");Serial.print(" The charReadp is : ");Serial.println(charReadp);delay(10); }/*如何来读取一长串数呢,比如输入1234 ,读取这个数,再输出1234* 需要用一个字符数组来分别接收各个数字字符 ,注意,要想得到和原输入字符一样的字符,需要用char 格式来存储 read到的数据*/String chuanString ="";char inChar;while(!Serial.available()){}while(Serial.available()){// 输入1234inChar = Serial.read(); chuanString += inChar;delay(10); }Serial.println("第四步:");Serial.print(" The chuanString is : ");Serial.println(chuanString);int intChuanshu = chuanString.toInt(); //前面的chuanString 是字符串格式,我们要想将得到的数字,当整数使用,需要转化下,用toInt,转化之后,就成了整数了Serial.println("第四步 之二 :");Serial.print(" The intChuanshu is : ");Serial.println(intChuanshu);intChuanshu = intChuanshu+7;Serial.println("第四步 之三 :");Serial.print(" The intChuanshu 加 is : ");Serial.println(intChuanshu);String chuanString2 ="";char inChar2;while(!Serial.available()){}while(Serial.available()){// 输入abcdefginChar2 = Serial.read(); chuanString2 += inChar2;delay(10); }Serial.println("第五步:");Serial.print(" The chuanString2 is : ");Serial.println(chuanString2);delay(2000);}
分别输入: 6a 6a 6a 1234 absdf 之后 (串口显示框 右下 选 没有结束符)
运行结果如下: