Мигание светодиодом в зависимости от датчика протечки.

Системы и компоненты "Умный дом"
Rex
Сообщения: 2
Зарегистрирован: 01 дек 2018, 16:15

Мигание светодиодом в зависимости от датчика протечки.

Сообщение Rex » 12 дек 2019, 18:45

Здравствуйте.
Прочитал статьи из рубрики "Умный дом" и решил сделать контроллер по защите от протечек воды, но немного упрощенный, без использования EEPROM и ModBus. И у меня вместо одного датчика протечки шесть. И я решил сделать индикацию сработки датчиков протечки одним светодиодом по количеству вспышек, соответствующее порядковому номеру датчика протечки, через паузу. Если сработали несколько датчиков, то количество вспышек соответствует наибольшему номеру датчика.

Но что-то я никак не могу сообразить как воплотить эту идею. Создал переменную (номер датчика), которая меняется в зависимости от сработавшего датчика. Так же создал регистр, в котором хранятся данные по сработке каждого датчика (протечка и обрыв). Но как это использовать для мигания светодиодом никак не пойму.

Как то писал код для индикации количества человек в комнате, но в программе из главы 6 он не работает.

Код: Выделить всё

void ledCount(byte count) {               //функция светодиодной индикации кол-ва человек
  if (count > 0 && i <= count + 1 && !flag4) {
    if (millis() - previousMillis >= interval) {
      previousMillis = millis();
      if (ledCountState == LOW) {
        ledCountState = HIGH;
        i++;
      } else {
        ledCountState = LOW;
      }
    }
  }
  if (count > 0 && i == count + 1 && !flag4) {
    ledCountState = LOW;
    flag4 = 1;
    i = 0;
  }
  if (millis() - ledDelay >= 1000 && flag4) {
    ledDelay = millis();
    flag4 = 0;
  }
  if(count <= 0){
    ledCountState = LOW;
  }
  digitalWrite(ledCountPin, ledCountState);
}

Помогите пожалуйста разобраться.


alex_rnd61
Сообщения: 9
Зарегистрирован: 19 мар 2018, 15:34

Re: Мигание светодиодом в зависимости от датчика протечки.

Сообщение alex_rnd61 » 17 дек 2019, 02:20

Может мой способ поможет. У меня мигание светодиода реализовано в прерывании Timer2.

Код: Выделить всё

if(regTable[cfg1] & led_red_state){
  if(del_led > 0) {del_led--;}
  else {
    if(state_led) {
      del_led = regTable[time_on_led];
      led_on;
      state_led = 0;
    }
    else {
      led_off;
      del_led = regTable[time_off_led];
      state_led = 1;
    }
  }
  }

Есть две переменные, в которые записывают время включения и выключения светодиода. Это
время, по очереди, записывается в переменную del_led. В разных режимах я записываю в эти ячейки
разные значения и так вижу в каком состоянии находится MK. Первая строка позволяет запретить мигание
светодиода.


Вернуться в «Умный дом»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя