ARDUINO Nano. СДЕЛАНО. Поворотники для машинки, вкл/выкл по кнопкам.

wtsd

✩✩✩✩✩✩✩
21 Мар 2021
3
0
Требуется исполнитель : не имеет значения география, важна репутация.
Надо изготовить : добавить/исправить то, до чего сам не могу додуматься.
Планируемый бюджет : озвучивайте
Сроки : как обычно - "вчера"
Оплата : на карту
Для связи : форум/личка

ТЗ:

При подаче питания на Nano ничего не горит.

LeftButton
Нажимаем первый раз на кнопку - мигает диффузный светодиод (LeftLED) .
Нажимаем второй раз - гаснет.
Зажимаем и держим (или предложенный вариант) - мигают все поворотники ("аварийка").

RightButton
Нажимаем первый раз на кнопку - мигает диффузный светодиод (RightLED).
Нажимаем второй раз - гаснет.

Нюанс: мигают левые поворотники, при нажатии на правую кнопку левые выключаются, правые включаются.
Никакие поворотники не влияют на режим работы PoliceLED.

PoliceButton
Нажимаем первый раз на кнопку - перемигиваются по очереди пара диффузных светодиодов (PoliceLED) .
Нажимаем второй раз - гаснет.

Пожалуйста комментируйте код, что бы знал с чем играться для изменения продолжительности пауз и свечения.

Код не мой, сам лишь поправил имена и комментарии.
C++:
// Константы это данные которые не изменяются в ходе программы.
// Используются здесь для установки номера пина - вывода Ардуино:
const int ButtonLeft = 2;              // Кнопка 1 Левый поворотник
const int ButtonRight = 5;             // Кнопка 2 Правый поворотник
const int ButtonPolice = 4;            // Кнопка 3 Проблесковый
const int LeftLED =  3;                // Левый LED
const int RightLED = 10;               // Правый LED
const int PoliceLED = 11;              // Проблесковый LED

// Переменные которые будут меняться в ходе программы
// Отвечают за текущее состояние кнопки
// Однобайтовый типы данных
boolean buttonSt1 = 0;                // Состояние Кнопки 1
boolean buttonSt2 = 0;                // Состояние Кнопки 2
boolean buttonSt3 = 0;                // Состояние Кнопки 3

unsigned long last_time1 = 0;         // Переменная для хранения времени
unsigned long last_time2 = 0;         // Переменная для хранения времени
unsigned long last_time3 = 0;         // Переменная для хранения времени
int Pausa = 300;                      // Защита от дребезга

void setup() {
// инициализируем светодиоды в качестве вывода:
  pinMode(LeftLED, OUTPUT);            // Светодиод работает в режиме Выхода
  pinMode(RightLED, OUTPUT);           // Светодиод работает в режиме Выхода
  pinMode(PoliceLED, OUTPUT);          // Светодиод работает в режиме Выхода

// инициализируем кнопку в качестве ввода с подключением внутреннего подтягивающего резистора
  pinMode(ButtonLeft, INPUT_PULLUP);     // Кнопка работает в режиме Входа
  pinMode(ButtonRight, INPUT_PULLUP);    // Кнопка работает в режиме Входа
  pinMode(PoliceLED, INPUT_PULLUP);      // Кнопка работает в режиме Входа
}

void loop() {
// считывание текущее состояние кнопки
  buttonSt1 = digitalRead(ButtonLeft);     // Состояние кнопки 1
  buttonSt2 = digitalRead(ButtonRight);    // Состояние кнопки 2
  buttonSt3 = digitalRead(ButtonPolice);   // Состояние кнопки 3

// Проверяем, нажата ли кнопка. Если да, то состояние кнопки будет НИЗКОЕ
// При нажатии кнопки она подключается к земле.
  if (buttonSt1 == LOW){
     if(millis() - last_time1 > Pausa) {                      // начинаем считать время нажатия                                             
          digitalWrite(LeftLED, !digitalRead(LeftLED));       // Включаем левый, если был включен, то выключаем
          last_time1 = millis();                              // Сохраняем новое время
     } 
  }
  if (buttonSt2 == LOW){
     if(millis() - last_time2 > Pausa){                       // начинаем считать время нажатия                                             
          digitalWrite(RightLED, !digitalRead(RightLED));     // Включаем правый, если был включен, то выключаем
          last_time2 = millis();                              // Сохраняем новое время
     }
  }
  if (buttonSt3 == LOW){
     if(millis() - last_time3 > Pausa) {                      // начинаем считать время нажатия                                                   
          digitalWrite(PoliceLED, !digitalRead(PoliceLED));   // Включаем проблесковый, если был включен, то выключаем
          last_time3 = millis();                              // Сохраняем новое время
     }
  }
}
 
Изменено:

Bruzzer

★★★✩✩✩✩
23 Май 2020
475
137
@wtsd,
Сейчас у вас пока нажата кнопка, соответствующая лампочка моргает, отпустили - моргать перестает.
А что надо сделать?
 

wtsd

✩✩✩✩✩✩✩
21 Мар 2021
3
0
@Bruzzer,
Повопротники: первое нажатие - мигает, второе гаснет.
С проблеском так же, с дополнением, что два светодиода перемигиваются после первого нажатия.
Договорились с человеком в личке, пока не тратьте время.
Благодарю за время.