|
红外遥控的Arduino小车
名称: | 图片: | 数量: | 单价: | 总价: | | | 减速电机+轮子 | | 2 | 8.5 | 17 | | | 主芯片 | | 1 | 70 | 70 | | | 直流电机驱动模块 | | 1 | 30 | 30 | | | 锂电池 | | 1 | 25 | 25 | | | 红外遥控 | | 1 | 3 | 3 | | | 红外遥控传感器 | | 1 | 1 | 1 | | | 万向轮 | | 1 | 4 | 4 | | | 内六角螺丝 | | 1 | | | | | 杜邦线 | | 1 | | | | | 跳线 | | 1 | | | | |
特此证明:
以下是程序:
用的是arduino-0022的编译软件,但还有点问题,就等一直按着哪个按钮是,小车是没有放映的。
我的结构是这样的
请高手给指教指教
////重复码的部分没处理好,我按着不放,它就动一下就不动了
#include <IRremote.h>
#include <IRremoteInt.h>
#define mechine_a1 4//左电机引脚
#define mechine_a2 5
#define mechine_EA 9
#define mechine_b1 2//右电机引脚
#define mechine_b2 3
#define mechine_EB 10
//红外遥控逻辑代码 自己通过串口监视器可以找出
#define ADVAN 0xFF18E7 //我的遥控器2键
#define LEF 0xFF10EF //我的遥控器4键
#define RIG 0xFF5AA5 //我的遥控器8键
#define RET 0xFF4AB5 //我的遥控器6键
#define STO 0xFF38C7 //我的遥控器5键
int RECV_PIN = 11; //红外接收信号引脚
IRrecv irrecv(RECV_PIN);//初始化
decode_results results;//定义结构体类型
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // 开始接收
}
void loop() {
if (irrecv.decode(&results))
{
Serial.println(results.value, HEX);
switch(results.value)
{
case ADVAN://2键前进
advance(100);
break;
case LEF://4键左转
left_handed(100);
break;
case RET://8键后退
retreat(100);
break;
case RIG://6键右转
right_handed(100);
break;
case STO://5键前进
stop_m();
break;
default:
delay(100);
}
irrecv.resume(); // Receive the next value
}
stop_m();//松开按钮停止
}
void foreward_mechine_a()//左电机正转
{
analogWrite(mechine_EA,255);
digitalWrite(mechine_a1,HIGH);
digitalWrite(mechine_a2,LOW);
}
void inversion_mechine_a()//左电机反转
{
analogWrite(mechine_EA,255);
digitalWrite(mechine_a1,LOW);
digitalWrite(mechine_a2,HIGH);
}
void stop_a(void)//左电机停止
{
digitalWrite(mechine_a1,LOW);
digitalWrite(mechine_a2,LOW);
}
void stop_b(void)//右电机停止
{
digitalWrite(mechine_b1,LOW);
digitalWrite(mechine_b2,LOW);
}
void foreward_mechine_b()//右电机正转
{
analogWrite(mechine_EB,255);
digitalWrite(mechine_b1,HIGH);
digitalWrite(mechine_b2,LOW);
}
void inversion_mechine_b()//右电机反转
{
analogWrite(mechine_EB,255);
digitalWrite(mechine_b1,LOW);
digitalWrite(mechine_b2,HIGH);
}
void advance(int time)//小车前进
{
foreward_mechine_a();
inversion_mechine_b();
delay(time);
}
void retreat(int time)//小车后退
{
inversion_mechine_a();
foreward_mechine_b();
delay(time);
}
void left_handed(int time)//小车左转
{
inversion_mechine_a();
inversion_mechine_b();
delay(time);
}
void right_handed(int time)//小车右转
{
inversion_mechine_b();
inversion_mechine_a();
delay(time);
}
void stop_m(void)//小车停止
{
stop_a();
stop_b();
}
下载包: |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|