改了一下用遥控器控制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(); // 继续等待接收下一组信号
- }
- }
-
复制代码
|