使用MG90S模拟舵机自动按下卧室灯开关
需要的库:
IRremote ///红外遥控
Servo //驱动舵机
先上源码
#include <IRremote.h> #include <Servo.h> Servo myservo; // create servo object to control a servo int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { myservo.attach(9); pinMode(LED_BUILTIN, OUTPUT); Serial.begin(9600); // 假如启动过程有问题,提示用户启动失败 Serial.println("Enabling IRin"); irrecv.enableIRIn(); // Start the receiver Serial.println("Enabled IRin"); digitalWrite(LED_BUILTIN, LOW); } void loop() { if(irrecv.decode(&results)) //检查是否收到红外遥控信号 { Serial.println(results.value, HEX); if(results.value == 0xFFA25D) //检查是否收到照明LED指令代码(0xF7C03F) { myservo.write(0); //Spin in one direction delay(1000); myservo.write(45); // Stop delay(6000); Serial.println("Command Received: Turn On LED."); digitalWrite(LED_BUILTIN, HIGH); } if(results.value == 0xFF629D) //检查是否收到熄灭LED指令代码(0xF740BF) { myservo.write(93); // Spin in opposite direction delay(1000); myservo.write(39); // Stop delay(6000); Serial.println("Command Received: Turn Off LED."); digitalWrite(LED_BUILTIN, LOW); } irrecv.resume(); //接收下一个指令 } delay(100); }
这里我参考太极创客团队写的Servo库介绍及例程
定义的宏 RECV_PIN 接红外接收器数据引脚
这是我测量的红外遥控器键值:
FFA25D -> 1 FF629D -> 2 FFE21D -> 3 FF22DD -> 4 FF02FD -> 5 FFC23D -> 6 FFE01D -> 7 FFA857 -> 8 FF906F -> 9 FF9867 -> 0 FF6897 -> * FFB04F -> #
FF18E7 -> 方向上 FF4AB5 -> 方向下 FF10EF -> 方向左 FF5AA5 -> 方向右
FF38C7 -> OK
你可以相应地改变你想要的值
我发现MG90s模拟舵机输入电压要5V,之前试着用ESP8266来驱动,但失败了
点赞再走