Проблема с торговым автоматом на ардуино

В настоящее время я работаю над проектом торгового автомата. Торговый автомат работает с помощью 3 кнопок на ЖК-клавиатуре Shield DFRobot, где 1 кнопка назначена на 0,10 цента, а две другие на 0,20 цента и 0,50 цента соответственно. Моя проблема заключается в том, как моя система может отслеживать вставленный баланс/монету, чтобы всякий раз, когда я нажимал button 1 = balance 0,10, позже я нажимал button 2 = balance 0,30 ( потому что в систему добавлено 0,20 цента). Или, если у вас есть идея получше для моего кода, это должно быть здорово. Это мой код до сих пор:

    #include <LiquidCrystal.h>
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    int lcd_key     = 0;
    int adc_key_in  = 0;
    #define btnRIGHT  0
    #define btnUP     1
    #define btnDOWN   2
    #define btnLEFT   3
    #define btnSELECT 4
    #define btnNONE   5
    volatile float balance = 0.00;
    float number1 = 0.10;
    float number2 = 0.20;
    float number3 = 0.50;
    int read_LCD_buttons()
    {
    adc_key_in = analogRead(0);      // считываем значение с датчика
    if (adc_key_in > 1000) return btnNONE; 
    if (adc_key_in < 50)   return btnRIGHT;  
    if (adc_key_in < 195)  return btnUP; 
    if (adc_key_in < 380)  return btnDOWN; 
    if (adc_key_in < 555)  return btnLEFT; 
    if (adc_key_in < 790)  return btnSELECT;   
    return btnNONE;  
    }

    void setup()
    {
    lcd.begin(16, 2);            
    lcd.setCursor(0,0);
    lcd.print("TouchNGo Machine"); 
    }

    void loop()
    {
    lcd.setCursor(0,1);         
    lcd.print("Balance=");      
    lcd.setCursor(10,1);           
    lcd_key = read_LCD_buttons(); 
    balance = 0.00 ;

    switch(lcd_key)
    {
    case(btnLEFT):
    {
    balance = balance + number1  ;
    lcd.print("RM");
    lcd.println(balance);
    break;
    }
    case(btnRIGHT):
    {
    balance = balance + number2 ;

    lcd.print("RM");
    lcd.println(balance);
    break;
    }
    case(btnUP):
    {
    balance = balance + number3  ;
    lcd.print("RM");
    lcd.println(balance);
    break;
    }
    }
    }

Я хотел бы услышать от вас любой комментарий. Спасибо за помощь!

, 👍-1

Обсуждение

Что не так с вашим текущим кодом?, @uint128_t


1 ответ


Лучший ответ:

1

Удалить "баланс = 0,0;" от вас основного цикла. Это всегда очищает ваш баланс.

,