Как отключить кнопку, если запас моих товаров уже равен 0
#include <Servo.h>
const int coinpin = 2;
const int buttonPin = 5;
const int buttonPin1 = 6;
int biogesicamount = 1;
// Переменные
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);
pinMode(buttonPin1, INPUT);
servo.write(0);
}
// Основной цикл
void loop() {
Serial.println(credits);
delay(1000);
{ //биогезик 3
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH && credits >= 3) {
credits = credits - 3;
biogesicamount--;
Serial.println(credits);
servo.write(180);
delay(1000);
servo.write(0);
}
if (buttonState == HIGH && credits < 3) {
delay(1000);
Serial.println("NOT ENOUGH CREDITS");
delay(1000);
}
if (biogesicamount <= 0) {
delay(1000);
Serial.print("biogesic dont have stock!!");
delay(1000);
Serial.print("biogesic dont have stock!!");
}
}
}
// Прерывать
void coinInterrupt() {
// Каждый раз, когда монетоприемник посылает импульс, прерываем основной цикл, чтобы добавить 1 цент, и включаем светодиод
credits = credits + 1;
}
@Jimbo Ginez, 👍-1
1 ответ
▲ 1
Вы всегда можете добавить условие
biogesicamount > 0
к операторам if
, которые обрабатывают логику нажатия кнопок:
if (buttonState == HIGH && biogesicamount > 0 && credits >= 3) {
credits = credits - 3;
biogesicamount--;
Serial.println(credits);
servo.write(180);
delay(1000);
servo.write(0);
}
и
if (buttonState == HIGH && biogesicamount > 0 && credits < 3){
delay(1000);
Serial.println("NOT ENOUGH CREDITS");
delay(1000);
}
Небольшой совет:
Вы можете вкладывать операторы if
для большей ясности и сохранения вашего кода СУХИМ (не повторяйтесь)
if (buttonState == HIGH && biogesicamount > 0) {
if(credits >= 3){
credits = credits - 3;
biogesicamount--;
Serial.println(credits);
servo.write(180);
delay(1000);
servo.write(0);
}
else {
delay(1000);
Serial.println("NOT ENOUGH CREDITS");
delay(1000);
}
}
,
@Filip Franik
Смотрите также:
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату