1、串口工作原理
》》在Arduino与其他器件通信的过程中,数据传输实际上都是以数字信号(即电平高低变化)的形式进行的,串口通信也是如此。当使用Serial. print()函数输出数据时,Arduino的发送端会输出一连串的数字信号,称这些数字信号为数据帧。
》》例如,当使用Serial. print(‘A’)语句发送数据时,实际发送的数据帧格式如图5一5所示。
2、HardwareSerail类库成员常用函数
Serial.begin();//初始化串口,该函数可以配置串口的各项参数
/* 语法:Serial.begin(speed,config)
speed:波特率;config:数据位,校验位,停止位配置*/
Serial.end();//结束串口,释放该串口所在的数字引脚,作为普通引脚使用
Serial.read();//从缓冲区中读取数据,使用该数据后,会将该数据从接收缓冲区中移除,每次会读取一个字符
2.1 案例:串口控制RGB LED灯
1、实验材料:RGB LED灯,Arduino uno灯,usb方口线
2、实验代码:
#include <SoftwareSerial.h>
// 定义灯的引脚
int redPin = 11;
int GreenPin = 12;
int BluePin = 13;
int i;
String inString = "";
char LED = ' ';
boolean stringComplete = false;
// 定义LED灯的颜色
void led_1(){
analogWrite(redPin,184);
analogWrite(GreenPin,186);
analogWrite(BluePin,95);
}
void led_2(){
analogWrite(redPin,232);
analogWrite(GreenPin,31);
analogWrite(BluePin,2);
}
void led_3(){
analogWrite(redPin,255);
analogWrite(GreenPin,255);
analogWrite(BluePin,255);
}
void led_4(){
analogWrite(redPin,242);
analogWrite(GreenPin,228);
analogWrite(BluePin,245);
}
void led_close(){
analogWrite(redPin,0);
analogWrite(GreenPin,0);
analogWrite(BluePin,0);
}
void setup(){
Serial.begin(9600);
}
void loop(){
if(stringComplete){
if(LED == 'A'){
led_1();
delay(1000);
}
else if(LED == 'B'){
led_4();
delay(1000);
}
else if(LED == 'C'){
led_close();
}
stringComplete = false;
inString = "";
LED = ' ';
}
}
void serialEvent(){
while(Serial.available()){
char inChar = Serial.read(); // Serial.read,从缓冲区中读取数据,使用该数据后,会将该数据从接收缓冲区中移除,每次会读取一个字符
if(isDigit(inChar)){
inString += inChar;
}
else if(inChar == '\n'){
stringComplete = true; //读到'\n'代表结束
i = inString.toInt();
}
else
LED = inChar;
}
}