Запоминание состояния яркости светодиода
- Войдите на сайт для отправки комментариев
Ср, 22/08/2018 - 17:50
Есть: 2 светодиода и управление их яркостью.
Например: я сделал на светодиоде 1 яркость 50%, на втором 97%. И отключил их, не важно чем, с пульта, кнопкой или же датчик сработал.
Вопрос: Как при обратном включении сделать запоминание этих процентов яркости отдельно каждого светодиода? Чтобы так же 1-ый стал 50%, 2-ой 97%
Только не объясняйте на словах, добавь то, сделай то, хотя это тоже поможет. Лучше небольшой готовый пример с пояснениями.
Буду благодарен!
мало информации
Что управляет яркостью светодиодов? - светодиодный модуль, ардуина, еще что-то?
между включениями диодов управляющий ими девайс остается активным или тоже выключается?
Ардуина. Остается, да. Все обычно. Ардуино, 2 светодиода воткнуты и управление яркостью у меня с пульта по ик порту, но это уже не суть.
Кратко, используйте EEPROM ардуины. При изменении яркости - записывайте значение в EEPROM. А потом при включении считывайте значения оттуда
https://doc.arduino.ua/ru/prog/EEPROM
Никак.
При обратном включении - это слишком поздно. Единственный вариант запоминания - до выключения. После выключения информация утеряна и восстановить ее невозможно.
Все это можно организовать .... через класс. Но жевать ради вас эту тему для вас очень долги и самое главное я не получу никакого смысла. Так что зачем.
Если я правильно понял, выключаются только светодиоды, не сама Ардуино ?
Да, ардуино всегда работает.
Возмем скетч для начала отсюда http://robotclass.ru/tutorials/arduino-ir-remote-control/ , раз ТС свой "зажилил"
#include "IRremote.h" IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; void setup() { irrecv.enableIRIn(); // запускаем прием } void loop() { if ( irrecv.decode( &results )) { // если данные пришли switch ( results.value ) { case 0xFFA857: digitalWrite( 13, HIGH ); break; case 0xFFE01F: digitalWrite( 13, LOW ); break; } irrecv.resume(); // принимаем следующую команду } }.
Немного модернизируем
/**/ class Cl_Led { protected: byte pin; public: Cl_Led(byte p): pin(p) {} void init() { pinMode(pin, OUTPUT); write(LOW); } void write(bool val) { digitalWrite( pin, val ); } }; //--------------------------------- Cl_Led Led(/*пин*/13); #include "IRremote.h" IRrecv irrecv(/*пин ИК*/2); decode_results results; //--------------------------------------------- void setup() { Led.init(); irrecv.enableIRIn(); // запускаем прием } void loop() { if ( irrecv.decode( &results )) { // если данные пришли switch ( results.value ) { case 0xFFA857: Led.write(HIGH); break; case 0xFFE01F: Led.write(LOW); break; } irrecv.resume(); // принимаем следующую команду } } /*Скетч использует 6594 байт (21%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 237 байт (11%) динамической памяти, оставляя 1811 байт для локальных переменных. Максимум: 2048 байт. */Подключим память и готово
/**/ #include <EEPROM.h> class Cl_Led { protected: byte pin; byte add; public: Cl_Led(byte p, byte a): pin(p), add(a) {} void init() { pinMode(pin, OUTPUT); digitalWrite(pin, EEPROM.read(add)); } void write(bool val) { digitalWrite( pin, val ); EEPROM.write(add, val); } }; //--------------------------------- Cl_Led Led(/*пин*/13,/*адр EEPROM*/0); #include "IRremote.h" IRrecv irrecv(/*пин ИК*/2); decode_results results; //--------------------------------------------- void setup() { Led.init(); irrecv.enableIRIn(); // запускаем прием } void loop() { if ( irrecv.decode( &results )) { // если данные пришли switch ( results.value ) { case 0xFFA857: Led.write(HIGH); break; case 0xFFE01F: Led.write(LOW); break; } irrecv.resume(); // принимаем следующую команду } } /*Скетч использует 6680 байт (21%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 238 байт (11%) динамической памяти, оставляя 1810 байт для локальных переменных. Максимум: 2048 байт. *//**/ #include <EEPROM.h> class Cl_aLed { protected: byte pin; byte add; public: Cl_aLed(byte p, byte a): pin(p), add(a) {} void init() { analogWrite(pin, EEPROM.read(add)); } void write(byte val) { analogWrite( pin, val ); EEPROM.write(add, val); } }; //--------------------------------- Cl_aLed Led(/*пин*/3,/*адр EEPROM*/0); #include "IRremote.h" IRrecv irrecv(/*пин ИК*/2); decode_results results; //--------------------------------------------- void setup() { Led.init(); irrecv.enableIRIn(); // запускаем прием } void loop() { if ( irrecv.decode( &results )) { // если данные пришли switch ( results.value ) { case 0xFFA857: Led.write(0xFF); break; case 0xFFE01F: Led.write(0); break; } irrecv.resume(); // принимаем следующую команду } } /*Скетч использует 6828 байт (22%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 238 байт (11%) динамической памяти, оставляя 1810 байт для локальных переменных. Максимум: 2048 байт. */Т.к я еще только учусь, пробежаться глазами по коду, оказалось недостаточным. Обязательно разберусь и надеюсь успешно применю в своем проекте "Умного Освещения дома"
Спасибо за пример. Это и было важно, то как и через что примерно это все реализовать.
Отпишусь еще когда более детально разберу и применю.