arduino 蓝牙小车

串口通信

  由于要借助串口实现蓝牙通信功能,所以我们在此要先了解下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);
  }
}

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值