Прошу помощи в доработке скетча управления нагрузками с ПДУ.
- Войдите на сайт для отправки комментариев
Чт, 06/03/2014 - 17:06
Попробывал в работе скетч Программируемый выключатель света с дистанционным управлением.
#include <IRremote.h> #include <avr/delay.h> #include <EEPROM.h> #define button 7 #define speaker 11 #define lamp 6 IRrecv irrecv(2); //вход для ик приемника decode_results results; unsigned long ir_command; uint8_t swt, count, state = 0; //статус лампочки void setup() { pinMode(speaker, OUTPUT);//громкоговоритель pinMode(button, INPUT);//вход для кнопки digitalWrite(button,HIGH);//включить подтяжку pinMode(lamp, OUTPUT);//лампочка irrecv.enableIRIn(); // включить приемник } void loop() { swt=digitalRead(button); count=0; while(swt==0) { if(count>30) { beep(100,400); for(unsigned long i=0; i<2000000; i++) { if (irrecv.decode(&results)) { SaveEEPROM(results.value); irrecv.resume(); break; } } beep(30,900); break; } count++; swt=digitalRead(button); _delay_ms(100); } ir_command=LoadEEPROM(); if (irrecv.decode(&results)) { if(ir_command==results.value) { state=~state; digitalWrite(lamp, state); beep(10,300); _delay_ms(700); } irrecv.resume(); } else if(count>1) { state=~state; digitalWrite(lamp, state); beep(10,500); _delay_ms(100); } } void SaveEEPROM(unsigned long ir_code) { EEPROM.write(0, ir_code & 0xFF); EEPROM.write(1, (ir_code & 0xFF00) >> 8); EEPROM.write(2, (ir_code & 0xFF0000) >> 16); EEPROM.write(3, (ir_code & 0xFF000000) >> 24); } unsigned long LoadEEPROM() { byte val = EEPROM.read(3); unsigned long ir_code=val; val = EEPROM.read(2); ir_code= (ir_code << 8) | val; val = EEPROM.read(1); ir_code= (ir_code << 8) | val; val = EEPROM.read(0); ir_code= (ir_code << 8) | val; return ir_code; } void beep(byte dur, word frq) { dur=(1000/frq)*dur; for(byte i=0; i<dur; i++) { digitalWrite(speaker, HIGH); _delay_us(frq); digitalWrite(speaker, LOW); _delay_us(frq); } }
Подскажите новичку как его изменить чтобы можно было управлять двумя и более лампочками. Чтобы управлять двумя лампочками,начало если я правильно понимаю должно быть такое:
#include <IRremote.h> #include <avr/delay.h> #include <EEPROM.h> #define button_A 8 #define button_B 9 #define speaker 11 #define lamp_A 6 #define lamp_B 7 IRrecv irrecv(2); //вход для ик приемника decode_results results; unsigned long ir_command; uint8_t swt, count, state = 0; //статус лампочки void setup() { pinMode(speaker, OUTPUT);//громкоговоритель pinMode(button_A, INPUT);//вход для кнопки A pinMode(button_B, INPUT);//вход для кнопки B pinMode(lamp_A, OUTPUT);//лампочка A pinMode(lamp_B, OUTPUT);//лампочка B digitalWrite(button_A,HIGH);//включить подтяжку digitalWrite(button_B,HIGH); irrecv.enableIRIn(); // включить приемник irrecv.blink13(true); // включить мигание светодиода при приеме } Какие операторы и типы данных добавлять или менять дальше в коде не могу сообразить
После не продолжительных "танцев с бубном"и чтением лит-ры получился ниже приведенный скетч. протестировал , на железе , работает. Думаю что можно как кто оптимизировать код, да и ошибки наверняка присутствуют. В дальнейшем работа устройства покажет, собираюсь расширить до 4 каналов управления.