#1 2017-10-21 14:58:49

Suro
Учасник
Зареєстрований: 2017-07-05
Повідомлень: 8

Трудная задача. Светодиод и кнопки)

Есть у меня две кнопки и нужно после обнуления таймера выключить светодиод.

0 0 - отжаты: светодиод выключен, 10 сек таймер обнулен

1 0 - кнопка1 нажата: включить светодиод и запустить 10 сек таймер.

    Если 1 0 состояние менее 10сек - светодиод горит и таймер запущен.
    Если 1 0 состояние более 10сек - светодиод отключается и таймер обнуляется.

    Если 1 0 состояние стало 1 1 до 10сек - светодиод оставается вкл и таймер обнуляется (горит столько сколько обе нажаты).
    Если 1 0 состояние стало 1 1 после 10сек - светодиод включается а таймер оставается обнуленным.

1 1 - кнопка1 и кнопка2 нажаты: светодиод горит и таймер обнулен.

    Если 1 1 состояние стало 1 0 - таймер включается и после 10сек светодиод выключается.
    Если 1 1 состояние стало 0 1 - светодиод отключается и таймер обнуляется.

0 1 - светодиод выключен, 10 сек таймер обнулен.

   Если 0 1 состояние стало 0 0 - светодиод выключен, 10 сек таймер обнулен(тоест ничего не делать).
   Если 0 1 состояние стало 1 1 - светодиод включается а таймер оставается обнуленным.

Неактивний

#2 2017-10-21 21:44:33

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: Трудная задача. Светодиод и кнопки)

Ну и что ? В чем трудности ?

Неактивний

#3 2017-10-21 22:29:29

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Трудная задача. Светодиод и кнопки)

http://forum.arduino.ua/viewtopic.php?id=1279

Неактивний

#4 2017-10-25 14:10:14

Suro
Учасник
Зареєстрований: 2017-07-05
Повідомлень: 8

Re: Трудная задача. Светодиод и кнопки)

вот уже получилось. очень спосибо renoshnik и Вячеслав Азаров.


int BUTTON1_PIN = 9;
int BUTTON2_PIN = 10;
int LED_PIN = 11;
unsigned long timer;


bool button1; //переменный состояний кнопок и леда
bool button2;
bool led;
  bool button1_on; //флаг нажатия кнопки 1
void setup(){
  pinMode(BUTTON1_PIN, INPUT);
  pinMode(BUTTON2_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
}

void loop() {


button1 = digitalRead(BUTTON1_PIN); //считываются состояния кнопок и лампочки
button2 = digitalRead(BUTTON2_PIN);
led = digitalRead(LED_PIN);
   if(button1 && !button1_on) {  //если кнопка1 нажата, но флаг что она была нажата не стоит
     button1_on = 1; //ставим флаг что кнопка нажата
     delay(20);  //ждем 20мс чтоб дребезг ушел
     button1 = digitalRead(BUTTON1_PIN); //проверяем нажата ли кнопка все еще
     if(button1){  //если таки нажата
     timer = millis(); //засекаем текущее время, т.к. в изначальном условии есть флаг -
                           //оно засечется только в момент нажатия на кнопку
     if(!led){digitalWrite(LED_PIN,HIGH);} //если лампочка не горит, то зажигаем ее
     }}
   if(!button1 && button1_on) {button1_on=0;
digitalWrite(LED_PIN,LOW);} // если кнопка отжата - снимаем флаг нажатия кнопки
//и отключаем лампочку



   if(button2 && led){  //а тут тупо каждый цикл пока зажата кнопка 2 при горящем леде
     timer = millis();  //будет обновляться время в таймере
     }

   if(button2 && button1 && !led){  //если кнупку2 нажали при удерживаемой 1 и потухшем леде
     delay(20); //типа дребезг
     button2 = digitalRead(BUTTON1_PIN); //проверяем кнопку2
     if(button2){ //если нажата
     digitalWrite(LED_PIN,HIGH);
     timer = millis();    //подрубаем светодиод и засекаем время
   }}

   if(led && millis()-timer>10000){ // если лампочка горит и время не обновлялось более 10с
      digitalWrite(LED_PIN,LOW); //выключаем лампочку
      }

}

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму