|
|
问题是现在电机只有在输入信号为占空比100% (255)时才会转动,其他数值都不转。而如果把setup()中的 irrecv.enableIRIn(); 注释掉,电机就可以按各种速度运转。求教问题出在那了呢?
#include <IRremote.h>
int IN1=7;
int IN2=6;
int IN3=5;
int IN4=4;
int EN1=10;//使能端口1
int EN2=3;//使能端口2
int RECV_PIN = 11;
int LED = 9;
int motorSpeed=255;
int tempSpeed=0;
IRrecv irrecv(RECV_PIN);
decode_results results; //解码结果
void setup()
{
int i;
for (i=4;i<=7;i++) //为Ardunio 电机驱动板
pinMode(i,OUTPUT); //设置数字端口4,5,6,7为输出模式
pinMode(LED,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop()
{
if (irrecv.decode(&results))
{
//解码成功,收到一组红外线信号
irdisplay(results.value);
irrecv.resume();
}
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
analogWrite(EN2, 150);
analogWrite(LED, motorSpeed);
}
void irdisplay(unsigned long value) // 按下按键后,显示本遥控对应的按键
{
switch(value){ //判定按下的是哪个按键,串口显示按钮名称
case 0xFFA25D:
Serial.println("POWER");
{
tempSpeed=motorSpeed;
motorSpeed=0;
}
break;
case 0xFF629D:
Serial.println("Mode");
break;
case 0xFFE21D:
Serial.println("MUTE");
{
motorSpeed=tempSpeed;
}
break;
//其他按键
case 0xFF22DD:
Serial.println("PLAY/PAUSE");
break;
case 0xFF02FD:
{
changeSpeed(20);
Serial.println("+");
Serial.println(motorSpeed);
}
break;
case 0XFFC23D:
Serial.println("NEXT");
break;
case 0xFFE01F:
Serial.println("EQ");
break;
case 0xFFA857:
{
Serial.println("eeee");
}
break;
case 0xFF906F:
{
Serial.println("rrrr");
}
break;
case 0xFF6897:
Serial.println("0");
break;
case 0xFF9867:
{
changeSpeed(-20);
Serial.println("-");
Serial.println(motorSpeed);
}
break;
case 0xFFB04F:
Serial.println("U/SD");
break;
case 0xFF30CF:
Serial.println("1");
break;
case 0xFF18E7:
Serial.println("2");
break;
case 0xFF7A85:
Serial.println("3");
break;
case 0xFF10EF:
Serial.println("4");
break;
case 0xFF38C7:
Serial.println("5");
break;
case 0xFF5AA5:
Serial.println("6");
break;
case 0xFF42BD:
Serial.println("7");
break;
case 0xFF4AB5:
Serial.println("8");
break;
case 0xFF52AD:
Serial.println("9");
break;
}
}
void changeSpeed(int add){
motorSpeed+=add;
if(motorSpeed>=255) motorSpeed=255;
if(motorSpeed<=0) motorSpeed=0;
}
|
|