第一篇贴,请求指教。
计划用红外遥控做一个遥控船的动力模组。但是卡在了这里。
//#include <Servo.h>
#include <IRremote.h>
IRrecv IR(2);
decode_results JG;
int Left_motor_go = 8; //左电机前进(IN1)
int Left_motor_back = 9; //左电机后退(IN2)
int Right_motor_go = 10; // 右电机前进(IN3)
int Right_motor_back = 11; // 右电机后退(IN4)
void setup()
{
Serial.begin(9600);
IR.enableIRIn();
//初始化电机驱动IO为输出方式
pinMode(Left_motor_go, OUTPUT); // PIN 8 (PWM)
pinMode(Left_motor_back, OUTPUT); // PIN 9 (PWM)
pinMode(Right_motor_go, OUTPUT); // PIN 10 (PWM)
pinMode(Right_motor_back, OUTPUT); // PIN 11 (PWM)
}
void run() // 前进
{
delay(300);
digitalWrite(Right_motor_go, HIGH); // 右电机前进
digitalWrite(Right_motor_back, LOW);
analogWrite(Right_motor_go, 250); //PWM比例0~255调速,左右轮差异略增减
analogWrite(Right_motor_back, 0);
digitalWrite(Left_motor_go, LOW); // 左电机前进
digitalWrite(Left_motor_back, HIGH);
analogWrite(Left_motor_go, 0); //PWM比例0~255调速,左右轮差异略增减
analogWrite(Left_motor_back, 250);
//执行时间,可以调整
}
void brake() //刹车,停车
{
delay(300);
digitalWrite(Right_motor_go, LOW);
digitalWrite(Right_motor_back, LOW);
digitalWrite(Left_motor_go, LOW);
digitalWrite(Left_motor_back, LOW);
//执行时间,可以调整
}
void left() //左转(左轮不动,右轮前进)
{
delay(300);
digitalWrite(Right_motor_go, HIGH); // 右电机前进
digitalWrite(Right_motor_back, LOW);
analogWrite(Right_motor_go, 200);
analogWrite(Right_motor_back, 0); //PWM比例0~255调速
digitalWrite(Left_motor_go, LOW); //左轮不动
digitalWrite(Left_motor_back, LOW);
analogWrite(Left_motor_go, 0);
analogWrite(Left_motor_back, 0); //PWM比例0~255调速
//执行时间,可以调整
}
void spin_left() //左转(左轮后退,右轮前进)
{
delay(300);
digitalWrite(Right_motor_go, HIGH); // 右电机前进
digitalWrite(Right_motor_back, LOW);
analogWrite(Right_motor_go, 200);
analogWrite(Right_motor_back, 0); //PWM比例0~255调速
digitalWrite(Left_motor_go, HIGH); //左轮后退
digitalWrite(Left_motor_back, LOW);
analogWrite(Left_motor_go, 200);
analogWrite(Left_motor_back, 0); //PWM比例0~255调速
//执行时间,可以调整
}
void right() //右转(右轮不动,左轮前进)
{
delay(300);
digitalWrite(Right_motor_go, LOW); //右电机不动
digitalWrite(Right_motor_back, LOW);
analogWrite(Right_motor_go, 0);
analogWrite(Right_motor_back, 0); //PWM比例0~255调速
digitalWrite(Left_motor_go, LOW); //左电机前进
digitalWrite(Left_motor_back, HIGH);
analogWrite(Left_motor_go, 0);
analogWrite(Left_motor_back, 200); //PWM比例0~255调速
//执行时间,可以调整
}
void spin_right() //右转(右轮后退,左轮前进)
{
delay(300);
digitalWrite(Right_motor_go, LOW); //右电机后退
digitalWrite(Right_motor_back, HIGH);
analogWrite(Right_motor_go, 0);
analogWrite(Right_motor_back, 200); //PWM比例0~255调速
digitalWrite(Left_motor_go, LOW); //左电机前进
digitalWrite(Left_motor_back, HIGH);
analogWrite(Left_motor_go, 0);
analogWrite(Left_motor_back, 200); //PWM比例0~255调速
//执行时间,可以调整
}
void back() //后退
{
delay(300);
digitalWrite(Right_motor_go, LOW); //右轮后退
digitalWrite(Right_motor_back, HIGH);
analogWrite(Right_motor_go, 0);
analogWrite(Right_motor_back, 250); //PWM比例0~255调速
digitalWrite(Left_motor_go, HIGH); //左轮后退
digitalWrite(Left_motor_back, LOW);
analogWrite(Left_motor_go, 250);
analogWrite(Left_motor_back, 0); //PWM比例0~255调速
//执行时间,可以调整
}
void loop()
{
delay(300);
if (IR.decode(&JG)) {
Serial.println(JG.value);
if (JG.value == 16736925 || JG.value == 5316027) {
run();
}
if (JG.value == 16712445 || JG.value == 818642832) {
brake();
}
if (JG.value == 16720605 || JG.value == 1386468383) {
left();
}
if (JG.value == 16761405 || JG.value == 553536955) {
right();
}
if (JG.value == 16754775 || JG.value == 2747854299) {
back();
}
if (JG.value == 16769055 || JG.value == 4034314555) {
spin_left();
}
if (JG.value == 16748655 || JG.value == 3855596927) {
spin_right();
}
IR.resume();
}
}
程序如下:
试过了简单的小程序,小程序(点亮led灯、解码并显示红外信号)没问题。
报错如下:
Arduino:1.8.13 (Windows 10), 开发板:"Arduino Uno"
项目使用了 6562 字节,占用了 (20%) 程序存储空间。最大为 32256 字节。
全局变量使用了633字节,(30%)的动态内存,余留1415字节局部变量。最大为2048字节。
avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0xe6
avrdude: stk500_cmd(): programmer is out of sync
avrdude: loadaddr(): (b) protocol error, expect=0x14, resp=0x00
avrdude: stk500_paged_load(): (a) protocol error, expect=0x14, resp=0x10
avrdude: stk500_cmd(): protocol error
avr_read(): error reading address 0x0000
read operation not supported for memory "flash"
avrdude: failed to read all of flash memory, rc=-2
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0xff
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0xff
在文件 -> 首选项开启
“编译过程中显示详细输出”选项
这份报告会包含更多信息。