大家好,又见面了,我是你们的朋友全栈君。
Arduino与其他元器件常用串口通信,本文章在主要通过实践方式介绍Serial.println()的同时,牵扯到一些常用的串口操作函数,一下会带领想入门Arduino的同学层层深入,如有错误还请不吝赐教。
Serial.available() > 0 Serial.available() 的意思是:返回串口缓冲区中当前剩余的字符个数。一般用这个函数来判断串口的缓冲区有无数据,当Serial.available()>0时,说明串口接收到了数据,可以读取;
while (Serial.available()>0){
}
if (Serial.available() > 0) {
}
通常人们会使用这样的结构使你的串口监视器不会在你明明没有输入的时候被意义不明的字符串替代。 Serial.read()指从串口的缓冲区取出并读取一个Byte的数据,比如有设备通过串口向Arduino发送数据了,我们就可以用Serial.read()来读取发送的数据。
我们从官网拿到了例程,连接我们的Arduino与电脑,烧录例程,打开串口监视器。
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}
根据程序,Arduino将从串口的缓冲区取出并读取一个Byte的数据赋给incomingByte并从串行端口输出incomingByte,跟随一个换行符(ASCII 10, 或 ‘n’)。这个函数所取得的值与 Serial.print()一样,这也不难解释为什么我们向Arduino发送一个A,最后收到了收到了两组数字。
用于存储字符值的数据类型。字符文字用单引号括起来,例如:‘A’(对于多个字符-字符串-使用双引号:“ ABC”)。 字符存储为数字。您可以在ASCII图表中看到特定的编码。这意味着可以对使用字符的ASCII值的字符进行算术运算(例如,‘A’ +1的值为66,因为大写字母A的ASCII值为65)。
ASCII控制字符
十进制 | 名称/意义/图形 |
---|---|
65 | A |
10 | 换行键 |
Serial.println(b, DEC) 以十进制形式输出b的ASCII编码值,并同时跟随一个回车和换行符,在测试程序中DEC加与不加效果是完全一样的。
官网对Serial.read()的返回值做出如下介绍:The first byte of incoming serial data available (or -1 if no data is available). Data type: int.,翻译后为:输入的串行数据的第一个字节可用(如果没有可用数据,则为-1)。资料类型:int,在实际读取数值时,会取从第一个不为0的数值和之后的内容。
烧录新的程序并打开串口监视器,发送一个A
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte,BIN);
Serial.println(incomingByte,HEX);
Serial.println(incomingByte,DEC);
}
}
Serial.println(b, HEX) 以十六进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。 Serial.println(b, BIN)以二进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。 本文中b被替换成了incomingByte。
十六进制 | 二进制 | 名称/意义/图形 |
---|---|---|
41 | 0100 0001 | A |
0A | 0000 1010 | 换行键 |
此程序中Arduino只会读到你向他发送的第一个字节,你可以向它发送65试一下,我们只能收到‘6’的结果,而没有‘5’的结果,如图。
Arduino编程之Serial.println()和Serial.print() Arduino 的输出基本就用两个函数 print 和 println,区别在于后者比前者多了回车换行 Serial.println(data) 从串行端口输出数据,跟随一个回车(ASCII 13, 或 ‘r’)和一个换行符(ASCII 10, 或 ‘n’)。这个函数所取得的值与 Serial.print()一样。 Serial.println(b) 以十进制形式输出b的ASCII编码值,并同时跟随一个回车和换行符。 Serial.println(b, DEC) 以十进制形式输出b的ASCII编码值,并同时跟随一个回车和换行符。 Serial.println(b, HEX) 以十六进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。 Serial.println(b, OCT)以八进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。 Serial.println(b, BIN)以二进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。 Serial.println(str)如果 str是一个字符串或数组,输出整个 str的 ASCII编码字符串。 Serial.println()仅输出一个回车和换行符。 参数 b:需要输出的字节。 str:需要输出的字符串。 没有返回值
sensor=analogRead(A0);
Serial.print(sensor, DEC);
或者
Serial.print(analogRead(A0));//DEC并不重要
我们常用到这样的结构方便我们看到传感器向Arduino递送的模拟值具体大小,从而帮助我们修改程序中根据这个模拟值进行数值判断的部分。 如修改一下程序中的517:
//A0已被设置成输入
if(analogRead(A0)<517)
{
执行……;
}
下一篇文章会实践连续输出多个字符——字符串,整理Arduino中常见的字符串相关使用方法,常见的例如我们会在二维码模块中使用到这些功能。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/186874.html原文链接:https://javaforall.cn