Arduino驱动小车

短短几十行代码,就做成了一个遥控小车,确实挺神奇,也有感触-----不重复造轮子的感觉挺好。

 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 }

猜你喜欢

转载自www.cnblogs.com/McuPlayer/p/12672025.html