短短几十行代码,就做成了一个遥控小车,确实挺神奇,也有感触-----不重复造轮子的感觉挺好。
1 void setup() { 2 pinMode(DIR1_RIGHT, OUTPUT); 3 pinMode(DIR2_RIGHT, OUTPUT); 4 pinMode(DIR1_LEFT, OUTPUT); 5 pinMode(DIR2_LEFT, OUTPUT); 6 7 pinMode(PWM_LEFT, OUTPUT); 8 pinMode(PWM_RIGHT, OUTPUT); 9 10 myservo.attach(ServoPin); // 舵机控制信号引脚 11 myservo.write(90); 12 13 irrecv.enableIRIn(); // IR开始接收 14 Serial.begin(9600); //用于调试使用,可以去掉 15 } 16 17 void loop() 18 { 19 int iStep = 10; 20 if (irrecv.decode(&results)) //红外遥控接收 21 { 22 irrecv.resume(); // 接收下一个数值 23 switch(results.value) 24 { 25 case 0xFF02FD: //前 26 iLeftSpeed += iStep; 27 iRightSpeed += iStep; 28 break; 29 case 0xFF9867: //后 30 iLeftSpeed -= iStep; 31 iRightSpeed -= iStep; 32 break; 33 case 0xFFE01F: //左 34 iLeftSpeed -= iStep; 35 iRightSpeed += iStep; 36 break; 37 case 0xFF906F: //右 38 iLeftSpeed += iStep; 39 iRightSpeed -= iStep; 40 } 41 } 42 motorsCtrl( RegularSpeed(iLeftSpeed), RegularSpeed(iRightSpeed) ); 43 delay(100); 44 } 45 46 int RegularSpeed(int iSpeed) 47 { 48 if(iSpeed>255) iSpeed = 255; 49 if(iSpeed<-255) iSpeed = -255; 50 return iSpeed; 51 } 52 53 void motorsCtrl(int speedLeft,int speedRight) 54 { 55 if(speedRight>0){ 56 digitalWrite(DIR1_RIGHT, 1); 57 digitalWrite(DIR2_RIGHT, 0); 58 }else{ 59 digitalWrite(DIR1_RIGHT, 0); 60 digitalWrite(DIR2_RIGHT, 1); 61 } 62 analogWrite(PWM_RIGHT, abs(speedRight)); 63 64 if(speedLeft > 0){ 65 digitalWrite(DIR1_LEFT,1); 66 digitalWrite(DIR2_LEFT,0); 67 }else{ 68 digitalWrite(DIR1_LEFT,0); 69 digitalWrite(DIR2_LEFT,1); 70 } 71 analogWrite(PWM_LEFT, abs(speedLeft)); 72 }