Запоминание состояния яркости светодиода

StoneTL
Offline
Зарегистрирован: 22.08.2018

Есть:  2 светодиода и управление их яркостью.
Например: я сделал на светодиоде 1 яркость 50%, на втором 97%. И отключил их, не важно чем, с пульта, кнопкой или же датчик сработал.

Вопрос: Как при обратном включении сделать запоминание этих процентов яркости отдельно каждого светодиода? Чтобы так же 1-ый стал 50%, 2-ой 97%

Только не объясняйте на словах, добавь то, сделай то, хотя это тоже поможет. Лучше небольшой готовый пример с пояснениями.

Буду благодарен!

b707
Offline
Зарегистрирован: 26.05.2017

мало информации

Что управляет яркостью светодиодов? - светодиодный модуль, ардуина, еще что-то?

между включениями диодов управляющий ими девайс остается активным или тоже выключается?

StoneTL
Offline
Зарегистрирован: 22.08.2018

Ардуина. Остается, да. Все обычно. Ардуино, 2 светодиода воткнуты и управление яркостью у меня с пульта по ик порту, но это уже не суть.

semaawp
semaawp аватар
Offline
Зарегистрирован: 29.05.2017

Кратко, используйте EEPROM ардуины. При изменении яркости - записывайте значение в EEPROM. А потом при включении считывайте значения оттуда
https://doc.arduino.ua/ru/prog/EEPROM

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

StoneTL пишет:
Есть:  2 светодиода и управление их яркостью. Например: я сделал на светодиоде 1 яркость 50%, на втором 97%. И отключил их, не важно чем, с пульта, кнопкой или же датчик сработал. Вопрос: Как при обратном включении сделать запоминание этих процентов яркости отдельно каждого светодиода? Чтобы так же 1-ый стал 50%, 2-ой 97%

Никак.

При обратном включении - это слишком поздно. Единственный вариант запоминания - до выключения. После выключения информация утеряна и восстановить ее невозможно.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

StoneTL пишет:
Есть:  2 светодиода и управление их яркостью. Например: я сделал на светодиоде 1 яркость 50%, на втором 97%. И отключил их, не важно чем, с пульта, кнопкой или же датчик сработал. Вопрос: Как при обратном включении сделать запоминание этих процентов яркости отдельно каждого светодиода? Чтобы так же 1-ый стал 50%, 2-ой 97% Только не объясняйте на словах, добавь то, сделай то, хотя это тоже поможет. Лучше небольшой готовый пример с пояснениями. Буду благодарен!

Все это можно организовать .... через класс. Но жевать ради вас эту тему для вас очень долги и самое главное я не получу никакого смысла. Так что зачем.

GarryC
Offline
Зарегистрирован: 08.08.2016

Если я правильно понял, выключаются только светодиоды, не сама Ардуино ?

StoneTL
Offline
Зарегистрирован: 22.08.2018

Да, ардуино всегда работает.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Возмем скетч для начала отсюда    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(); // принимаем следующую команду
  }
}

.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Немного модернизируем

/**/
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 байт.
*/

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Подключим память и готово

/**/
#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 байт.
*/

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

/**/
#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 байт.
*/
StoneTL
Offline
Зарегистрирован: 22.08.2018

Т.к я еще только учусь, пробежаться глазами по коду, оказалось недостаточным. Обязательно разберусь и надеюсь успешно применю в своем проекте "Умного Освещения дома"

Спасибо за пример. Это и было важно, то как и через что примерно это все реализовать.

Отпишусь еще когда более детально разберу и применю.