改了一下用遥控器控制SERVO的代码。 按开关键正转到179或反转到0。或者按向上按钮(不放)可以一点一点向前转,按向下按钮(不放)可以一点一点向后转。 
 
- #include <IRremote.h>          //调用IRremote.h库
 - #include <Servo.h>
 - 
 - // INFRARED
 - int RECV_PIN = 11;             //定义RECV_PIN变量为11
 - IRrecv irrecv(RECV_PIN);       //设置RECV_PIN(也就是11引脚)为红外接收端
 - decode_results results;        //定义results变量为红外结果存放位置
 - long effectivePressed = 0;       //储存按下一个按钮时,有效的键位值(除去0XFFFFFFFF之后,最新的那个值)
 - 
 - // LED
 - int ledPin = 10;
 - boolean ledState = LOW;
 - 
 - // SERVO
 - Servo myservo;
 - int pos = 0; // 储存servo位置
 - 
 - void setup(){
 -      Serial.begin(9600);          //串口波特率设为9600
 -      irrecv.enableIRIn();         //启动红外解码
 -      pinMode(ledPin, OUTPUT);
 -      myservo.attach(9);
 -      myservo.write(pos);
 - }
 -  
 - void loop() {
 -      //是否接收到解码数据,把接收到的数据存储在变量results中
 -      if (irrecv.decode(&results)) {  
 -             //接收到的数据以16进制的方式在串口输出
 -             Serial.println(results.value, HEX);
 - 
 -             if (results.value == 0xFD00FF) {
 -               ledState = !ledState;
 -               digitalWrite(ledPin, ledState);
 -               if (ledState) {//按亮IR电源键,正转到180位置
 -                 for (pos = myservo.read(); pos<180; pos+=1){
 -                   myservo.write(pos);
 -                   delay(15);
 -                 }
 -               } else {//按灭IR电源键,反转到0位置
 -                 for (pos = myservo.read(); pos >= 1; pos-=1){
 -                   myservo.write(pos);
 -                   delay(15);
 -                 }
 -               } 
 -             }
 - 
 -             if (results.value == 0xFD50AF || (results.value == 0xFFFFFFFF && effectivePressed == 0xFD50AF)) { // 按下上行按钮,servo正转
 -               myservo.write(constrain(myservo.read() + 1, 0, 179));
 -               delay(15);
 -             }
 -             if (results.value == 0xFD10EF || (results.value == 0xFFFFFFFF && effectivePressed == 0xFD10EF)) { // 按下下行按钮,servo反转
 -               myservo.write(constrain(myservo.read() - 1, 0, 179));
 -               delay(15);
 -             }
 -             
 -             Serial.println(effectivePressed, HEX);
 -             if (results.value != 0xFFFFFFFF) effectivePressed = results.value;
 -             
 -             irrecv.resume();  // 继续等待接收下一组信号
 -       }
 - }
 - 
 
  复制代码
  |