В базовой переменной и установке кнопок в программном обеспечении Arduino идея заключается в том, что если вы нажмете кнопку, вы получите одну из переменных. Теоретически, удержание кнопки не должно приводить к увеличению переменной более чем на единицу до отпускания и повторного нажатия кнопки. Однако я не мог этого сделать. Как это должно быть сделано?
Я попытался использовать else с задержкой (потому что добавление единицы к коду переменной было внутри инструкции «if»), поэтому она не задерживалась, если кнопка и не отпущена, и не считала несколько входов кнопки, но это привело к большему увеличению когда была нажата кнопка, а не только одно увеличение.
const int buttonPin = 8;
int number = 0;
int numbertwo = 0;
int buttonState = 0;
void setup()
{
pinMode(buttonPin, INPUT);
}
void loop()
{
buttonState = digitalRead(buttonPin);
if (buttonState == LOW){
numbertwo = ++number;
delay(100);
}
(Можно использовать любой метод для определения переменной, как на ЖК-дисплее)
Как упомянуто выше, я ожидал, что переменная будет увеличиваться только на единицу при нажатии кнопки и не будет продолжать увеличиваться до тех пор, пока кнопка не будет отпущена и повторно нажата, но в действительности переменная продолжала увеличиваться в значении при удержании кнопки.
Всего 1 ответ
Я предполагаю, что вы хотите, чтобы переменная "число" увеличивалась на 1 за нажатие. Я думаю, что вы ищете что-то вроде этого:
const int buttonPin = 8;
int number = 0;
int buttonState = 0;
void setup() {
pinMode(buttonPin, INPUT);
}
void loop()
{
buttonState = digitalRead(buttonPin);
if (buttonState == LOW){
++number;
// This loop is to make sure not to count up until button is released
do {
buttonState = digitalRead(buttonPin);
} while (buttonState == LOW);
}
}
Если вам не нравится реализация на основе цикла, вот реализация на основе состояния для вас:
const int buttonPin = 8;
int number = 0;
int buttonState = 0;
int prevState = -1;
void setup() {
pinMode(buttonPin, INPUT);
prevState = -1;
}
void loop()
{
buttonState = digitalRead(buttonPin);
if (buttonState == LOW && prevState != buttonState){
++number;
prevState = buttonState;
}
}