Delay
используется только если вы хотите, чтобы вся система остановилась.Он также используется в учебных целях в начале карьеры Arduino.В реальном приложении вы будете использовать библиотеку задержек или синхронизацию.Если вы используете задержку в приложении, вы не можете прочитать событие кнопки HIGH
, это означает, что кнопка может быть прочитана только в 501 мсек точно после 500 мс задержки, у вас будет окно 1 мс или меньше, что почтиневозможно для человека времени.В любом случае вам стоит взглянуть на пример " Blink Without Delay " от Arduino.
Также вы должны использовать подтягивающий резистор для кнопок или объявить INPUT_PULLUP
для pinMode
в настройке, чтобы избежать отскока, см. Пример ниже.
Вот как вы решаете код:
// defined constants in Arduino don’t take up any program memory space on the chip.
#define buttonPin 2;
#define ledPin 13;
// bytes are half the size of int's, but restricted to a max value of 255
byte value;
byte oldValue = 0;
byte state = 0;
void setup()
{
pinMode(buttonPin , INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
}
void loop()
{
value = digitalRead(buttonPin );
if(value && !oldValue) // same as if(button == high && oldValue == low)
{
//we have a new button press
if(state == 0) // if the state is off, turn it on
{
digitalWrite(ledPin, HIGH);
state = 1;
}
else // if the state is on, turn it off
{
digitalWrite(ledPin, LOW);
state = 0;
}
oldValue = 1;
}
else if(!value && oldValue) // same as if(button == low && oldValue == high)
{
// the button was released
oldValue = 0;
}
}