自学Arduino UNO串口(制造光控灯)

一、Arduino串口介绍

串口用于不同设备间互相传输数据。比如,可以在电脑上实时输入指令,Arduino 板做出相应的反应,Arduino 板正在执行的工作也能实时反应在电脑上。

二、Arduino串口分类

Arduino采用USART通信模式,可以有硬串口软串口两种实现方式。

通常将Arduino UNO上自带的串口0(RX)、1(TX)称为硬件串口,可与外围串口设备通信。

而使用SoftwareSerial类库模拟成的串口,称为软件模拟串口(简称软串口)。如果要连接更多的串口设备,可以使用软串口。

三、Arduino串口的使用

1、初始化串口

void setup(){            //开机就执行一次的部分
  //pinMode(led,OUTPUT);
  Serial.begin(9600);   //初始化串口,一般设置通信波特率为9600波特,表示每秒发送9600bit的数据
}

2、串口的输出(输出到电脑屏幕上)

void loop(){
  Serial.println("Hello Word");//Arduino板传输"Hello Word"给电脑
  delay(1000);
  }

Serial.println() : 串口输出数据并换行,print多了nl代表换行

Serial.print() :不换行

自学Arduino UNO串口(制造光控灯)_第1张图片自学Arduino UNO串口(制造光控灯)_第2张图片

3、串口输入

void loop(){
  //Serial.println("Hello Word");//Arduino板传输"Hello Word"给电脑
  delay(1000);
  if(Serial.available()>0)     //获取串口缓冲区中的数据,判断是否有数据
  {
    char ch=Serial.read();     //从电脑端输入数据,存入Arduino板
    Serial.println(ch);    //输出所存入Arduino板的数据
  }

在监视器中可输入数据:

自学Arduino UNO串口(制造光控灯)_第3张图片

自学Arduino UNO串口(制造光控灯)_第4张图片

 Serial.available() :判断串口缓冲区的状态,返回从串口缓冲区读取的字节数。有字节才会执行

若没有这个判断:

void loop(){
  //Serial.println("Hello Word");//Arduino板传输"Hello Word"给电脑
  delay(1000);
  char ch=Serial.read();     //从电脑端输入数据,存入Arduino板
  Serial.println(ch);    //输出所存入Arduino板的数据
  }

 结果:一开始就输出‘?’   输入了几个数据,将数据输出完后又输出‘?’

自学Arduino UNO串口(制造光控灯)_第5张图片

 Serial.read() :读取串口数据,一次读一个字符,读完后删除已读数据。所以才会一次输出一个字符

Serial.readString() : 从串口缓存区读取全部数据到一个字符串型变量。注意定义数据类型String字符串

if(Serial.available()>0)     //获取串口缓冲区中的数据,判断是否有数据
  {
    String ch=Serial.readString();     //从电脑端输入数据,存入Arduino板
    Serial.println(ch);    //输出所存入Arduino板的数据
  }

一次性输出多个字符自学Arduino UNO串口(制造光控灯)_第6张图片

 四、利用串口设计光控灯。

1、思路:

因为光敏电阻的特性,阻值随光度的变化而变化,电压也自然跟着变化。Arduino板可以通过串口将电压的变化输出给电脑,电脑分析电压的大小,通过串口输入数据给Arduino板控制led灯的开关。

2、代码:

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。

3、连接线路

理论图:

 自学Arduino UNO串口(制造光控灯)_第7张图片

实际图:

 自学Arduino UNO串口(制造光控灯)_第8张图片

4、上传代码

打开串口监视窗,开始实验。

自学Arduino UNO串口(制造光控灯)_第9张图片自学Arduino UNO串口(制造光控灯)_第10张图片

 自学Arduino UNO串口(制造光控灯)_第11张图片自学Arduino UNO串口(制造光控灯)_第12张图片

 

 

 大功告成!!!

 改进:

在串口监视窗输入'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

 自学Arduino UNO串口(制造光控灯)_第13张图片

 

 有了串口连接Arduino板和电脑,我们可以让板传输自己的数据给电脑,让我们了解它所正在执行的工作。我们也可以通过串口监视窗输入数据给Arduino板,让它马上就能执行我们所编写的程序。

 

你可能感兴趣的:(单片机,stm32,物联网)