Как распечатать недостаточно кредитов, если кредитов недостаточно
Проблема моего кода в том, что последовательный монитор печатает недостаточно кредитов, даже если я не нажал кнопку. В результате, когда я нажимаю кнопку, должно быть напечатано недостаточно кредитов.
#include <Servo.h>
const int coinpin = 2;
const int buttonPin = 7;
// Переменные
volatile int credits = 0;
int buttonState = 0;
const int servoPin = 8;
Servo servo;
// Настраивать
void setup() {
servo.attach (servoPin);
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(coinpin), coinInterrupt, RISING);
pinMode(buttonPin, INPUT);
servo.write(0);
}
// Основной цикл
void loop() {
Serial.println(credits);
delay(2000);
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH && credits == 5) {
Serial.println(credits);
servo.write(180);
delay(1000);
servo.write(0);
}
if(credits !=5) {
Serial.println("NOT ENOUGH CREDITS");
delay(2000);
}
}
// Прерывать
void coinInterrupt(){
// Каждый раз, когда монетоприемник посылает импульс, прерываем основной цикл, чтобы добавить 1 цент, и включаем светодиод
credits = credits + 1;
}
@Jimbo Ginez, 👍-1
Обсуждение2 ответа
Второй оператор if является автономным и не находится внутри кнопки проверки нажатия кнопки, поэтому оператор всегда будет печатать «недостаточно кредита», если кредит не равен точно 5. Возможно, вы также захотите отключить кнопку, поскольку при одном нажатии может возникнуть несколько триггеров.
Посмотрите на отмеченные мною строки кода:
В каждом цикле вы проверяете, чтобы количество кредитов было равно 5, а если оно не равно 5, вы пишете «НЕ ДОСТАТОЧНО КРЕДИТОВ». Возможно, вы захотите изменить структуру «if», чтобы проверять наличие кредитов только при нажатии кнопки.< /п>
Сразу вижу две ошибки:
- Что происходит, когда количество кредитов равно 6? Этого достаточно или нет?
- Что происходит, когда пользователь нажимает кнопку в течение двух или более циклов?
Нажатие физической кнопки воспринимается аппаратным обеспечением как несколько последовательных нажатий, поскольку кнопка «подпрыгивает» под вашим пальцем. Решение этой проблемы называется «устранением дребезга», и есть несколько способов сделать это. Подробнее об этом.
Спасибо за ответ, я уже исправил проблему, с которой сейчас столкнулся: как отключить кнопку, если запас продуктов равен нулю., @Jimbo Ginez
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
я понимаю, что вы хотите напечатать сообщение, если кнопка нажата, и другое сообщение, если кнопка не нажата ...... неясно, можете ли вы обнаружить нажатие кнопки ..... вы протестировали кнопку с помощью простого кода, который зажигает светодиод при нажатии кнопки?, @jsotola