#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define moedeiro 12
unsigned long millisTarefa1;
unsigned long millisTarefa2;
LiquidCrystal_I2C lcd(0x27, 16, 2);
float credito = 0;
int contador[4] = {4, 4, 4, 4};
int botao_start[4] = {2, 5, 6, 7};
int flag[4] = {0, 0, 0, 0};
int fita_de_leds = 3;
int saida[4] = {4, 8, 9, 10};
const char* nomes_bombas[4] = {"CACHAÇA", "VINHO", "VODKA", "CATUABA"};
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Coloque moeda");
delay(2000);
pinMode(moedeiro, INPUT_PULLUP);
pinMode(fita_de_leds, OUTPUT);
for (int i = 0; i < 4; i++) {
pinMode(botao_start[i], INPUT_PULLUP);
pinMode(saida[i], OUTPUT);
}
Serial.println("Inicializado!");
millisTarefa1 = millis();
millisTarefa2 = millis();
}
void loop() {
tarefa1();
tarefa2();
}
void tarefa1() {
if ((millis() - millisTarefa1) < 200) {
if (credito == 0) {
digitalWrite(fita_de_leds, LOW);
}
} else {
digitalWrite(fita_de_leds, HIGH);
}
if ((millis() - millisTarefa1) > 400) {
millisTarefa1 = millis();
}
}
void tarefa2() {
if ((millis() - millisTarefa2) < 50) {
if (!digitalRead(moedeiro)) {
credito = credito + 0.25;
lcd.clear();
lcd.print("Credito R$: ");
lcd.print(credito);
Serial.print("Moedas = ");
Serial.println(credito);
delay(500);
}
for (int i = 0; i < 4; i++) {
if (digitalRead(botao_start[i]) == LOW && credito > 0.99) {
credito = credito - 1.00;
contador[i] = 4;
flag[i] = 1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(nomes_bombas[i]);
while (flag[i] == 1) {
contagem(i);
}
delay(100);
}
}
lcd.setCursor(0, 0);
lcd.print("Credito R$: ");
lcd.print(credito);
lcd.print(" ");
}
if ((millis() - millisTarefa2) > 100) {
millisTarefa2 = millis();
}
}
void contagem(int bomba) {
digitalWrite(saida[bomba], HIGH);
contador[bomba]--;
lcd.setCursor(0, 1);
lcd.print("servindo: ");
lcd.print("00:");
if (contador[bomba] < 10) {
lcd.print("0");
}
lcd.print(contador[bomba]);
delay(1000);
if (contador[bomba] <= 0) {
flag[bomba] = 0;
contador[bomba] = 0;
digitalWrite(saida[bomba], LOW);
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Credito R$: ");
lcd.print(credito);
}
}
// cODIGO BY LAERCIO E REGIS