Как отключить кнопку, если запас моих товаров уже равен 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;

}

, 👍-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);
    }
}
,