串口用于不同设备间互相传输数据。比如,可以在电脑上实时输入指令,Arduino 板做出相应的反应,Arduino 板正在执行的工作也能实时反应在电脑上。
Arduino采用USART通信模式,可以有硬串口,软串口两种实现方式。
通常将Arduino UNO上自带的串口0(RX)、1(TX)称为硬件串口,可与外围串口设备通信。
而使用SoftwareSerial类库模拟成的串口,称为软件模拟串口(简称软串口)。如果要连接更多的串口设备,可以使用软串口。
void setup(){ //开机就执行一次的部分
//pinMode(led,OUTPUT);
Serial.begin(9600); //初始化串口,一般设置通信波特率为9600波特,表示每秒发送9600bit的数据
}
void loop(){
Serial.println("Hello Word");//Arduino板传输"Hello Word"给电脑
delay(1000);
}
Serial.println() : 串口输出数据并换行,print多了nl代表换行
Serial.print() :不换行
void loop(){
//Serial.println("Hello Word");//Arduino板传输"Hello Word"给电脑
delay(1000);
if(Serial.available()>0) //获取串口缓冲区中的数据,判断是否有数据
{
char ch=Serial.read(); //从电脑端输入数据,存入Arduino板
Serial.println(ch); //输出所存入Arduino板的数据
}
在监视器中可输入数据:
Serial.available() :判断串口缓冲区的状态,返回从串口缓冲区读取的字节数。有字节才会执行
若没有这个判断:
void loop(){
//Serial.println("Hello Word");//Arduino板传输"Hello Word"给电脑
delay(1000);
char ch=Serial.read(); //从电脑端输入数据,存入Arduino板
Serial.println(ch); //输出所存入Arduino板的数据
}
结果:一开始就输出‘?’ 输入了几个数据,将数据输出完后又输出‘?’
Serial.read() :读取串口数据,一次读一个字符,读完后删除已读数据。所以才会一次输出一个字符
if(Serial.available()>0) //获取串口缓冲区中的数据,判断是否有数据
{
String ch=Serial.readString(); //从电脑端输入数据,存入Arduino板
Serial.println(ch); //输出所存入Arduino板的数据
}
因为光敏电阻的特性,阻值随光度的变化而变化,电压也自然跟着变化。Arduino板可以通过串口将电压的变化输出给电脑,电脑分析电压的大小,通过串口输入数据给Arduino板控制led灯的开关。
int a = 0;
void setup(){ //开机就执行一次的部分
pinMode(12,OUTPUT);
Serial.begin(9600); //Serial-串口的函数。初始化串口,一般设置通信波特率为9600波特,表示每秒发送9600bit的数据
}
void loop(){
a = analogRead(A0);//Arduino板读取引脚A0处的电压值,并把值赋给a。
Serial.println(a); //在串口监视器中输出a的值
delay(100);
if(a>600) //如果电压映射的值小于600就把12号引脚设为高平电压
{
digitalWrite(12,LOW);
Serial.println("关灯"); //将12号引脚位置的状态输出给串口监视窗
}else{
digitalWrite(12,HIGH);
Serial.println("开灯");
}
delay(1);
}
analogRead():用于从Arduino的模拟输入引脚读取数值。可以将0-5伏特的电压输入信号映射到数值0-1023。例:analogRead(A0),先获取A0处的电压,若位5V则映射到数值为1023,返回数值1023。
理论图:
实际图:
打开串口监视窗,开始实验。
在串口监视窗输入'a',Arduino板也能立马做出反应,并反馈它的状态:
代码:
while(Serial.available() > 0){
char ch=Serial.read(); //从电脑端输入数据,存入Arduino板
if(ch=='a'){
digitalWrite(12,HIGH);
Serial.println(ch);
Serial.println("开灯");
delay(2000);
}else if(ch=='b'){
digitalWrite(12,LOW);
Serial.println(ch);
Serial.println("关灯");
}
}
串口监视窗:a