Управление нагрузкой при помощи пульта ДУ
- Войдите на сайт для отправки комментариев
Чт, 12/03/2015 - 22:00
Всем пивет! Решил переделать код из видео в более компактный:
#include <IRremote.h>
IRrecv irrecv(11);
decode_results results;
int leds [] {7, 6, 5, 4,};
int keys [] {0x926D22DD, 0x926DA25D, 0x926D629D, 0x926D609F, 0x926DE01F};
void setup()
{
irrecv.enableIRIn();
for (int i = 0; i <= 4; i++) {
pinMode(leds[i], OUTPUT);
}
}
void loop() {
if (irrecv.decode(&results)) {
for (int num = 0; num <= 5; num++) {
if (results.value = keys[num]) {
digitalWrite(leds[num], !digitalRead(leds[num]));
}
}
irrecv.resume(); // Receive the next value
}
delay(250);
}
Но при нажатии на любую кнопку пульта загораются все светодиоды, при повторном нажатии на любую другую кнопку светодиоды гаснут, если задержать кнопку светодиоды начинают моргать.
В Arduino новичек, по этому не судите строго.
Заранее спасибо!
if(results.value = keys[num]) {надоif(results.value == keys[num]) {В таком случаее вообще ничего не работает, из-за этого и поставил = вместо == стало хоть как-то работать
В таком случаее вообще ничего не работает, из-за этого и поставил = вместо == стало хоть как-то работать
= это операция присваивания
== это оператор сравнения
if - управляющий оператор, принимающий решение на основании сравнения.
Вставляйте Serial.println и мониторьте переменную, которая вызывает сомнения. И для отладки задержку стоит побольше сделать.
Задержка в данном скетче никакой функции не несет, можно вообще убрать, пусть себе if (irrecv.decode(&results)) крутится.
Задержка в данном скетче никакой функции не несет, можно вообще убрать, пусть себе if (irrecv.decode(&results)) крутится.
А в сериале не начнет слишком быстро гнать?
Я вижу Serial.println(results.value, HEX) после if (irrecv.decode(&results)) {, и срабатывать он будет только по "свежему" нажатию на пульте.
if(results.value = keys[num]) {надоif(results.value == keys[num]) {Так будет работать правильней если сместо keys[num] прописать код конкретной кнопки, будет реагировать только на нее и зажитать светодиоды
Готовая заготовка ( именно так ) к пультику с ебая:
// Final release 1.0 #include <IRremote.h> #define ver 1.0 #define led_13_pin 13 //debug led // IR connector #define ir_gnd_pin 9 // gnd, power, xxx, output #define ir_power_pin 8 #define ir_receiv_pin 6 //trembo IR codes of ebay remote #define IR_OK 0xFF02FD #define IR_UP 0xFF629D #define IR_DOWN 0xFFA857 #define IR_LEFT 0xFF22DD #define IR_RIGHT 0xFFC23D #define IR_1 0xFF6897 #define IR_2 0xFF9867 #define IR_3 0xFFB04F #define IR_4 0xFF30CF #define IR_5 0xFF18E7 #define IR_6 0xFF7A85 #define IR_7 0xFF10EF #define IR_8 0xFF38C7 #define IR_9 0xFF5AA5 #define IR_0 0xFF4AB5 #define IR_ASTERISK 0xFF42BD #define IR_NUMBER_SIGN 0xFF52AD #define CODE_REPEAT 0xFFFFFFFF #define code_repeat_time 200 #define LED_ON digitalWrite (led_13_pin, HIGH) #define LED_OFF digitalWrite (led_13_pin, LOW) IRrecv irrecv(ir_receiv_pin); decode_results results; unsigned long last_time = millis(); unsigned long lastKey = 0; void setup(){ Serial.begin(115200); Serial.print(F("Version ")); Serial.println(ver); Serial.print(F(__DATE__)); Serial.print(" "); Serial.print(F(__TIME__)); Serial.print(" "); Serial.println(F(__FILE__)); pinMode (ir_receiv_pin, INPUT_PULLUP); // Power from Arduino pins digitalWrite (ir_power_pin, HIGH); digitalWrite (ir_gnd_pin, LOW); pinMode ( ir_power_pin, OUTPUT); pinMode ( ir_gnd_pin, OUTPUT); // debug leds pinMode (led_13_pin, OUTPUT); LED_OFF; irrecv.enableIRIn(); // Start the receiver } void loop() { unsigned long current_time = millis(); if (irrecv.decode(&results)) { // Serial.println(results.value, HEX); switch (results.value) { case CODE_REPEAT: results.value = lastKey; last_time = current_time; Serial.println (F("CODE_REPEAT")); break; case IR_UP : lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_UP")); break; case IR_DOWN: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_DOWN")); break; case IR_LEFT: lastKey = results.value; last_time = current_time; Serial.println(F("IR_LEFT")); break; case IR_RIGHT: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_RIGHT")); break; case IR_OK: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_OK")); break; case IR_1: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_1")); break; case IR_2: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_2")); break; case IR_3: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_3")); break; case IR_4: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_4")); break; case IR_5: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_5")); break; case IR_6: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_6")); break; case IR_7: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_7")); break; case IR_8: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_8")); break; case IR_9: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_9")); break; case IR_0: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_0")); break; case IR_ASTERISK: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_ASTERISK")); break; case IR_NUMBER_SIGN: lastKey = results.value; last_time = current_time; LED_ON; Serial.println(F("IR_NUMBER_SIGN")); break; default: Serial.print ( F("Invalid code ")); Serial.println(results.value, HEX); results.value = lastKey; // Handle invalid value. } lastKey = results.value; irrecv.resume(); // Receive the next value } if ((current_time - last_time) >code_repeat_time){ lastKey = 0; LED_OFF; } }