// 红外遥控智能小车
//高手是只需要代码就能知道所需的元器件的,~~~~~~~~~~~~~~~~~~
// 不可调节电机速度,调节pwm值会影响红外的信号接收
#include
int RECV_PIN = 11; //红外接收端口
IRrecv irrecv(RECV_PIN);
decode_results results; //结构声明
int Left_motor_back=5; //左电机后退(IN1)
int Left_motor_go=6; //左电机前进(IN2)
int Right_motor_go=9; // 右电机前进(IN3)
int Right_motor_back=10; // 右电机后退(IN4)
void setup() //初始化电机驱动IO为输出方式
{
pinMode(L_motor_go,OUTPUT); // PIN 5 (PWM)
pinMode(L_motor_back,OUTPUT); // PIN 6 (PWM)
pinMode(R_motor_go,OUTPUT);// PIN 9 (PWM)
pinMode(R_motor_back,OUTPUT);// PIN 10 (PWM)
pinMode(13, OUTPUT);//端口模式,输出
Serial.begin(9600); //波特率9600
irrecv.enableIRIn(); // Start the receiver
}
void run() // 前进
{
digitalWrite(R_motor_go,HIGH); // 右电机前进
digitalWrite(R_motor_back,LOW);
digitalWrite(L_motor_go,HIGH); // 左电机前进
digitalWrite(L_motor_back,LOW);
}
void brake() //刹车,停车
{
digitalWrite(R_motor_go,LOW);
digitalWrite(R_motor_back,LOW);
digitalWrite(L_motor_go,LOW);
digitalWrite(L_motor_back,LOW);
}
void left() //左转(左轮不动,右轮前进)
{
digitalWrite(R_motor_go,HIGH); // 右电机前进
digitalWrite(R_motor_back,LOW);
digitalWrite(L_motor_go,LOW); //左轮不动
digitalWrite(L_motor_back,LOW);
}
void spin_left() //左转(左轮后退,右轮前进)
{
digitalWrite(R_motor_go,HIGH); // 右电机前进
digitalWrite(R_motor_back,LOW);
digitalWrite(L_motor_go,LOW); //左轮后退
digitalWrite(L_motor_back,HIGH);
}
void right() //右转(右轮不动,左轮前进)
{
digitalWrite(R_motor_go,LOW); //右电机不动
digitalWrite(R_motor_back,LOW);
digitalWrite(L_motor_go,HIGH);//左电机前进
digitalWrite(L_motor_back,LOW);
}
void spin_right() //右转(右轮后退,左轮前进)
{
digitalWrite(R_motor_go,LOW); //右电机后退
digitalWrite(R_motor_back,HIGH);
digitalWrite(L_motor_go,HIGH);//左电机前进
digitalWrite(L_motor_back,LOW);
}
void back() //后退
{
digitalWrite(R_motor_go,LOW); //右轮后退
digitalWrite(R_motor_back,HIGH);
digitalWrite(L_motor_go,LOW); //左轮后退
digitalWrite(L_motor_back,HIGH);
}
//读取各个按键需要用到这段代码
/*
void read_key()
{
if(irrecv.decode(&results)){ //如果接收到信息
Serial.print("code:");
Serial.println(results.value,HEX); //results.value为16进制,unsigned long
Serial.print("bits:");
Serial.println(results.bits); //输出元位数
irrecv.resume();
}
}
void loop()
{
// read_key();
if(irrecv.decode(&results)){ //如果接收到信息
switch(results.value){
case 0xFD8877: //前,对应2
run();
break;
case 0xFD9867: //后,对应8
back();
break;
case 0xFD28D7: //左,对应4
left();
break;
case 0xFD6897: //右,对应6
right();
break;
case 0xFDA857: //停止,对应5
brake();
break;
default:
break;
}
irrecv.resume();
}
}