Не работает программа.

pashog08
Offline
Зарегистрирован: 28.02.2013

Доброе время суток. Совсем недавно подарили дуньку и я увлекся. Решил попробовать написать программу, которая зажигает светодиод на столько секунд, сколько в сумме раз нажаты две кнопки. Прогу написал, в схеме уверен, не работает. После нажатия кнопки, обозначаещей =, светодиод горит вечно. В чем дело?

int buttonFirst = 4;
int buttonSecond = 7;
int led = 13;
int buttonFirstNumber = 0;
int buttonSecondNumber = 0;
int equalButton = 8;
int equal = 0;
void setup()
{
  pinMode(led, OUTPUT);
  pinMode(buttonFirst, INPUT);
  pinMode(buttonSecond, INPUT);
  pinMode(equalButton, INPUT);
}

void loop()
{
  if(digitalRead(buttonFirst)==HIGH)
  {
    buttonFirstNumber += 1;
  }
  else
  {
  }
 
  
  if(digitalRead(buttonSecond)==HIGH)
  {
    buttonSecondNumber += 1;
  }
  else
  {
  }
  
  
  if(digitalRead(equalButton)==HIGH)
  {
    equal = (buttonFirstNumber + buttonSecondNumber) * 1000;
    digitalWrite(led, HIGH);
    delay(equal);
  }
}

 

mixail844
Offline
Зарегистрирован: 30.04.2012

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

секунд,счетчики могут спокойно насчитать десятки а то и сотни едениц,потом еще умножаете на 1000,вот вам и горение.так же у вас в программе нет проверки отжата ли кнопка equalButton,точней 

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

хотя,в таком исполнении,пока функция delay(); не завершиться,никакой проверки и обработки кнопок небудет

pashog08
Offline
Зарегистрирован: 28.02.2013

mixail844 пишет:

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

секунд,счетчики могут спокойно насчитать десятки а то и сотни едениц,потом еще умножаете на 1000,вот вам и горение.так же у вас в программе нет проверки отжата ли кнопка equalButton,точней 

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

хотя,в таком исполнении,пока функция delay(); не завершиться,никакой проверки и обработки кнопок небудет

Простите глупый вопрос, а как тогда мне сделать? 

mixail844
Offline
Зарегистрирован: 30.04.2012

я,сейчас,сижу с,сотового,обьяснить на пальцах трудновато.во первых на форуме есть тема про кнопки в помощь новичкам,во вторых ищите на youtube .уроки по ардуино от джереми блюма,есть перевод на русский от Амперки

pashog08
Offline
Зарегистрирован: 28.02.2013

Ладно, есть идейка, щас проверю

 

pashog08
Offline
Зарегистрирован: 28.02.2013

Все, заработало.

Исправленная версия:

int buttonFirst = 4;
int buttonSecond = 7;
int led = 13;
int buttonFirstNumber = 0;
int buttonSecondNumber = 0;
int equalButton = 8;
int equal = 0;
void setup()
{
  pinMode(led, OUTPUT);
  pinMode(buttonFirst, INPUT);
  pinMode(buttonSecond, INPUT);
  pinMode(equalButton, INPUT);
}

void loop()
{
  if(digitalRead(buttonFirst)==HIGH)
  {
    buttonFirstNumber += 1;
    delay(500);
  }
  else
  {
  }


  if(digitalRead(buttonSecond)==HIGH)
  {
    buttonSecondNumber += 1;
    delay(500);
  }
  else
  {
  }


  if(digitalRead(equalButton)==HIGH)
  {
    
   equal = (buttonFirstNumber + buttonSecondNumber) * 1000;
    digitalWrite(led, HIGH);
    delay(equal);
    digitalWrite(led,LOW);
  }
}

Ой, тут понял, что надо потом обнулять