串口通信
由于要借助串口实现蓝牙通信功能,所以我们在此要先了解下Arduino的串口通信。
Arduino UNO开发板上的串口为0->RX,1->TX,在开发板内部也已经配置好了串口的功能,我们只需调用函数借口即可。
开启串行通信接口并设置通信波特率
Serial.begin(speed);
- 1
关闭串口通信
Serial.end();
- 1
判断串口缓冲器是否有数据写入
Serial.available();
- 1
读取串口数据
Serial.read();
- 1
返回下一字节(字符)输入数据,但不删除它
Serial.peek();
- 1
清空串口缓存
Serial.flush();
- 1
写入字符串数据到串口
Serial.print();
- 1
写入字符串数据+换行到串口
Serial.println();
- 1
写入二进制数据到串口
Serial.write();
- 1
read时触发的事件函数
Serial.SerialEvent();
- 1
读取固定长度的二进制流
Serial.readBytes(buffer,length);
- 1
打印接到数据十进制表示的ascii码
Serial.println(incomingByte, DEC);
蓝牙连接:
TX:接Arduino UNO开发板”RX”引脚
RX:接Arduino UNO开发板”TX”引脚
GND:接Arduino UNO开发板”GND”引脚
VCC:接Arduino UNO开发板”5V”或”3.3V”引脚
代码描述:
#define STOP 0
#define FORWARD 1
#define BACKWARD 2
#define TURNLEFT 3
#define TURNRIGHT 4
int leftMotor1 = 4;
int leftMotor2 = 5;
int rightMotor1 = 6;
int rightMotor2 = 7;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(leftMotor1, OUTPUT);
pinMode(leftMotor2, OUTPUT);
pinMode(rightMotor1, OUTPUT);
pinMode(rightMotor2, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
//usart read
if(Serial.available()>0)
{
char cmd = Serial.read();//读取蓝牙模块发送到串口的数据
Serial.print(cmd);
motorRun(cmd);
}
}
void motorRun(int cmd)
{
switch(cmd){
case FORWARD:
Serial.println("FORWARD"); //输出状态
analogWrite(leftMotor1, 200);
analogWrite(leftMotor2, 0);
analogWrite(rightMotor1, 200);
analogWrite(rightMotor2,0);
break;
case BACKWARD:
Serial.println("BACKWARD"); //输出状态
analogWrite(leftMotor1, 0);
analogWrite(leftMotor2, 200);
analogWrite(rightMotor1, 0);
analogWrite(rightMotor2, 200);
break;
case TURNLEFT:
Serial.println("TURN LEFT"); //输出状态
analogWrite(leftMotor1, 0);
analogWrite(leftMotor2, 150);
analogWrite(rightMotor1, 200);
analogWrite(rightMotor2, 0);
break;
case TURNRIGHT:
Serial.println("TURN RIGHT"); //输出状态
analogWrite(leftMotor1, 200);
analogWrite(leftMotor2, 0);
analogWrite(rightMotor1, 0);
analogWrite(rightMotor2, 150);
break;
default:
Serial.println("STOP"); //输出状态
analogWrite(leftMotor1, 0);
analogWrite(leftMotor2, 0);
analogWrite(rightMotor1, 0);
analogWrite(rightMotor2, 0);
}
}