diff --git a/software/platformio.ini b/software/platformio.ini index 2476a51..0f9ef77 100644 --- a/software/platformio.ini +++ b/software/platformio.ini @@ -16,7 +16,7 @@ board_f_cpu = 160000000L board_f_flash = 80000000L framework = arduino ;build_flags = -DASYNC_TCP_SSL_ENABLED=1 -build_flags = -fexceptions +build_flags = -fexceptions -DLOG_LOCAL_LEVEL=ESP_LOG_DEBUG lib_deps = https://github.com/me-no-dev/ESPAsyncWebServer.git https://github.com/me-no-dev/AsyncTCP.git diff --git a/software/src/coin.cpp b/software/src/coin.cpp index 07a5162..6751e91 100644 --- a/software/src/coin.cpp +++ b/software/src/coin.cpp @@ -39,10 +39,15 @@ void Coin::setup(void) { } int Coin::getMoney() { - if (millis() - lastUpdate <= 200) delay(200); // make sure to wait for the last pulse + while (millis() - lastUpdate <= 150) delay(150); // make sure to wait for the last pulse return pulseCounter*5; } +int Coin::isMoneyInserted() { + if (millis() - lastUpdate <= 1000) return pulseCounter*5; + else return 0; +} + void Coin::setZero() { pulseCounter=0; } diff --git a/software/src/coin.h b/software/src/coin.h index d866482..9f88057 100644 --- a/software/src/coin.h +++ b/software/src/coin.h @@ -6,6 +6,7 @@ class Coin { Coin(void); void setup(void); int getMoney(void); + int isMoneyInserted(void); void setZero(void); void subtractMoney(int); private: diff --git a/software/src/hardware.h b/software/src/hardware.h index 332c936..a1068b6 100644 --- a/software/src/hardware.h +++ b/software/src/hardware.h @@ -21,7 +21,7 @@ static constexpr bool PROGMEM MQTT_SECURE = true; static const char* PROGMEM mqtt_username = "vending"; static const char* PROGMEM mqtt_password = "password"; -static constexpr uint8_t PROGMEM COIN_PULSE_PIN = 15; +static constexpr uint8_t PROGMEM COIN_PULSE_PIN = 36; #endif /* _HARDWARE_H */ @@ -29,7 +29,7 @@ static constexpr uint8_t PROGMEM COIN_PULSE_PIN = 15; * __________ * 3v3 | | GND -- GND * RST | | 23 -- Servo0 - * 36 | | 22 -- Servo1 + * PULSE-- 36 | | 22 -- Servo1 * 39 | | 01 (UART_TX) * 34 | | 03 (UART_RX) * 35 | | 21 -- Servo2 diff --git a/software/src/led.cpp b/software/src/led.cpp index 2c8bc7e..7f51b0c 100644 --- a/software/src/led.cpp +++ b/software/src/led.cpp @@ -4,6 +4,9 @@ #include "led.h" #include "hardware.h" +#include "coin.h" + +extern Coin coin; using namespace std; @@ -49,6 +52,26 @@ void Led::loop_denied(void) { void Led::loop_steady(void) { fill_solid(leds, NUM_LEDS, color); + if (int moneyinserted = coin.isMoneyInserted()) { + fill_solid(leds, 8, CRGB::Black); + if (moneyinserted >= 5) { + leds[0] = CRGB::Yellow; + } if (moneyinserted >= 10) { + leds[1] = CRGB::Yellow; + } if (moneyinserted >= 20) { + leds[2] = CRGB::Yellow; + } if (moneyinserted >= 50) { + leds[3] = CRGB::Yellow; + } if (moneyinserted >= 75) { + leds[4] = CRGB::Yellow; + } if (moneyinserted >= 100) { + leds[5] = CRGB::Yellow; + } if (moneyinserted >= 150) { + leds[6] = CRGB::Yellow; + } if (moneyinserted >= 200) { + leds[7] = CRGB::Yellow; + } + } } void Led::changeAnimation(uint8_t num, uint16_t duration) { @@ -67,7 +90,11 @@ void Led::changeColor(uint8_t r, uint8_t g, uint8_t b) { change = true; } void Led::changeBrightness(uint8_t brightness) { - FastLED.setBrightness(brightness); + if (brightness > 254) { // don't set first byte to 255 on tm1829 + FastLED.setBrightness(254); + } else { + FastLED.setBrightness(brightness); + } change = true; } diff --git a/software/src/shelf.cpp b/software/src/shelf.cpp index 135a118..9dac4e2 100644 --- a/software/src/shelf.cpp +++ b/software/src/shelf.cpp @@ -29,10 +29,11 @@ void Shelf::reload(void) { void Shelf::dispenseTask(void* parameters) { Serial.println("dispensing"); - if (coin.getMoney() > 50) { + if (coin.getMoney() >= 50) { item.at(num)->quantity--; led.changeAnimation(1, 0); pusher.push(num); + coin.subtractMoney(50); vTaskDelay(500 / portTICK_PERIOD_MS); led.changeAnimation(2, 0); vTaskDelay(7000 / portTICK_PERIOD_MS);