Arduino 蓝牙遥控寻迹小车程序:实现前进、后退、转向和停止
#include <SoftwareSerial.h> //引入SoftwareSerial库 SoftwareSerial BT(2, 3); //定义两个引脚,用于蓝牙模块的RX和TX
int left_motor_pwm = 5; //定义左轮电机的PWM引脚 int right_motor_pwm = 6; //定义右轮电机的PWM引脚
int left_motor_dir = 7; //定义左轮电机的方向引脚 int right_motor_dir = 8; //定义右轮电机的方向引脚
int IR_sensor = 9; //定义红外传感器引脚
int left_speed = 0; //定义左轮电机的速度 int right_speed = 0; //定义右轮电机的速度
void setup() { Serial.begin(9600); //串口初始化 BT.begin(38400); //蓝牙初始化
pinMode(left_motor_pwm, OUTPUT); //将左轮电机的PWM引脚设置为输出模式 pinMode(right_motor_pwm, OUTPUT); //将右轮电机的PWM引脚设置为输出模式
pinMode(left_motor_dir, OUTPUT); //将左轮电机的方向引脚设置为输出模式 pinMode(right_motor_dir, OUTPUT); //将右轮电机的方向引脚设置为输出模式
pinMode(IR_sensor, INPUT); //将红外传感器引脚设置为输入模式 }
void loop() { if(BT.available() > 0) //当蓝牙模块有数据时 { char c = BT.read(); //读取蓝牙模块的数据 Serial.println(c); //将数据打印到串口
if(c == 'F') //如果接收到'F',则小车前进
{
left_speed = 255; //将左轮电机的速度设置为最大
right_speed = 255; //将右轮电机的速度设置为最大
Serial.println('Go Forward'); //打印到串口,表示小车前进
}
else if(c == 'B') //如果接收到'B',则小车后退
{
left_speed = -255; //将左轮电机的速度设置为最大,但方向为反向
right_speed = -255; //将右轮电机的速度设置为最大,但方向为反向
Serial.println('Go Back'); //打印到串口,表示小车后退
}
else if(c == 'L') //如果接收到'L',则小车左转
{
left_speed = -255; //将左轮电机的速度设置为最大,但方向为反向
right_speed = 255; //将右轮电机的速度设置为最大
Serial.println('Turn Left'); //打印到串口,表示小车左转
}
else if(c == 'R') //如果接收到'R',则小车右转
{
left_speed = 255; //将左轮电机的速度设置为最大
right_speed = -255; //将右轮电机的速度设置为最大,但方向为反向
Serial.println('Turn Right'); //打印到串口,表示小车右转
}
else if(c == 'S') //如果接收到'S',则小车停止
{
left_speed = 0; //将左轮电机的速度设置为0
right_speed = 0; //将右轮电机的速度设置为0
Serial.println('Stop'); //打印到串口,表示小车停止
}
}
int left_dir = 0; //定义左轮电机的方向变量 int right_dir = 0; //定义右轮电机的方向变量
if(left_speed > 0) left_dir = 1; //如果左轮电机的速度大于0,则左轮电机的方向为正 else if(left_speed < 0) left_dir = 0; //如果左轮电机的速度小于0,则左轮电机的方向为反
if(right_speed > 0) right_dir = 1; //如果右轮电机的速度大于0,则右轮电机的方向为正 else if(right_speed < 0) right_dir = 0; //如果右轮电机的速度小于0,则右轮电机的方向为反
analogWrite(left_motor_pwm, abs(left_speed)); //将左轮电机的PWM引脚设置为左轮电机的速度 digitalWrite(left_motor_dir, left_dir); //将左轮电机的方向引脚设置为左轮电机的方向
analogWrite(right_motor_pwm, abs(right_speed)); //将右轮电机的PWM引脚设置为右轮电机的速度 digitalWrite(right_motor_dir, right_dir); //将右轮电机的方向引脚设置为右轮电机的方向
// ... (寻迹代码)
delay(10); //延时10毫秒 }
原文地址: https://www.cveoy.top/t/topic/lfXH 著作权归作者所有。请勿转载和采集!