一、Arduino串口通信

 

串口(COM口):是Arduino与其他设备进行通信的接口。

 

Q:连接电脑USB的线为什么可以上传程序,而电源线无法上传?

A:PC一端的数据线接口是USB接口,连接Arduino这一端的接口类型是RS-232转成的TTL232接口。两者指的是电平标准。标准RS-232最高电压达正负15V,计算机串口是标准的RS-232,许多单片机的串口都是TTL电平,电源电压一般为+5V,因此,为了互连,必须进行电平转换。现在的计算机一般没有下图这种串口,就需要一个USB转串口的转换器。而电源线是DC接口,是一种为转变输入电压后有效输出固定电压的接口。

Android通过串口控制arduino 串口通信arduino_引脚

Q:波特率是什么?

A:我们可以把波特率理解为双方通信的速率,接收和发送的速率要保持一致,只有速率保持一致双方进行通信才不会产生数据的损失。波特率一般会设置为9600或115200.波特率也不是越高越好,这跟处理器的主频有关,主频最好是波特率的整数倍,否则会增加错误率。

 

Q:TX、RX是什么?

A:TX(transport)、RX(receive)是串口通信的引脚。Arduino Uno开发板上,串口位于0(RX)和1(TX)引脚上,经过串口转换芯片(下图黄色位置)连接计算机USB端口与计算机进行通信。使用串口功能的同时不能使用0和1作为输入或输出。

Android通过串口控制arduino 串口通信arduino_引脚_02

串口相关函数

            函数

                                        描述

Serial.read()

每次都会返回一个字节的数据,这个返回值便是当前串口读取到的数据。读到后就删除这个数据。

Serial.begin(speed)

设置波特率

Serial.available()

获取串口接收到的数据个数,即获取串口接收缓冲区的字节数

Serial.print()

从串口输出数据

Serial.println()

从串口输出数据,并输入一个换行符

Serial.write()

以字节的形式输出到串口

Serial.end()

结束串口通信

例子:输入字符控制LED亮灭

void setup() {
  pinMode(8,OUTPUT);  //设置引脚8为输出模式
  Serial.begin(9600); //设置串口波特率9600
}

int val=0;

void loop() {
  val = Serial.read();         //读取计算机发送给控制板的指令复制给val
  if(val=='T'){
    digitalWrite(8,HIGH);      //点亮LED
    Serial.println("LED ON");  //并输出
  }
  if(val=='F'){
    digitalWrite(8,LOW);       //熄灭LED
    Serial.println("LED OFF"); //并输出
  }
}

在 “工具” → “串口监视器” 处输入,会显示输出。

二、按键输入

INPUT模式

将引脚设置为输入模式。但此时不能直接与Arduino开发板的GND,和输入电压引脚相连,否则可能会损坏Arduino。而INPUT_PULLUP即输入上拉模式,这里用到了上拉电阻,上拉电阻是当某输入端口未连接设备或处于高阻抗的情况下,一种用于保证输入信号为预期逻辑电平的电阻元件。等效于在该引脚与VCC之间连接了一个电阻,稳定输入输出电平。

例子:按下按键点亮LED,再按一次熄灭LED

int state;      //定义按键状态
int last;       //按键上一次的状态
int count;      

void setup() {
  pinMode(13,OUTPUT);       //设置为输出模式
  pinMode(11,INPUT_PULLUP); //设置为
  Serial.begin(9600);       //设置波特率
}

void loop() {
  state = digitalRead(11);  //读取引脚11的状态

  if(state != last)
  {
    if(state)
    {
        count++;
    }
  }

  last = state;             //把这次的状态复制给上一次

  if(count%2)
  {
    digitalWrite(13,HIGH);  //点亮
  }
  else
  {
    digitalWrite(13,LOW);   //熄灭
  }
}

电路

Android通过串口控制arduino 串口通信arduino_串口_03