Делаю замок на серво. Первая проблема Код (Text): #include <IRremote.h> #include <Servo.h> Servo Door; #define LOCK = 0xFF906F #define OPEN = 0xFFA857 int RECV_PIN = 4; int LOCK_LED = 36; int OPEN_LED = 32; int ir_code = 0; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Door.attach(7); Door.write(90); Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { ir_code = results.value; if (ir_code == 0xFF906F) { Door.write(0); irrecv.resume(); } irrecv.resume(); } } Серво никак не реагирует на пульт. Где я напутал?
Познавательная статья. Но мой пульт выдает HEX значение. Нужно ли мне менять results.value на HEX?Можно ли вообще делать #define?
Я извиняюсь, но пульт вообще выдает нолики и единички, т.е. не горит - горит светодиод и компилятор тоже приведет все к ноликам - единичкам, все остальное от лукавого. Другое дело, как Вам удобно записывать. Записи int val = 0xFF, int val = 255, int val = 0b11111111 абсолютно идентичны, так как представляют одно и тоже число в разных системах счисления. Делать #define можно и нужно. Только не так #define LOCK = 0xFF906F, а так #define LOCK 0xFF906F Можно, потому что компилятор сам везде, где встретит, подменит LOCK на значение 0xFF906F, а нужно, потому что в коде вы сможете вместо малопонятных чисел типа 0xFF906F использовать понятную константу LOCK, чем улучшите читаемость кода и уменьшите вероятность ошибки.
Код (Text): #include <IRremote.h> #include <Servo.h> Servo Door; #define LOCK 0xFF906F #define OPEN 0xFFA857 int RECV_PIN = 4; int LOCK_LED = 36; int OPEN_LED = 32; int ir_code = 0; boolean locked = false; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Door.attach(7); Door.write(90); pinMode(LOCK_LED, OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value); irrecv.resume(); // Receive the next value } if ((results.value == LOCK) && (locked == false)) { Door.write(0); locked = true; digitalWrite(LOCK_LED, HIGH); digitalWrite(OPEN_LED, LOW); irrecv.resume(); } if (irrecv.decode(&results)) { Serial.println(results.value); irrecv.resume(); } if ((results.value == OPEN) && (locked == true)) { Door.write(180); locked = false; digitalWrite(OPEN_LED, HIGH); digitalWrite(LOCK_LED,LOW); irrecv.resume(); } } Подправил код, но теперь работает, если при включении платы тыкать ОТКРЫТЬ и ЗАКРЫТЬ. Если задержаться на секунду, то всё виснет.