#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define moedeiroPin 2
#define botao_start1Pin 11
#define botao_start2Pin 10
#define fita_de_leds1Pin 9
#define fita_de_leds2Pin 8
#define saida1Pin 5
#define saida2Pin 4
LiquidCrystal_I2C lcd(0x27, 16, 2);
int flag1;
int flag2;
int contador_pulsos = 0;
int contador = 15;
int valor_pulso = 25; // Representação em centavos
float valor_moeda_atual = 0.0; // Valor da última moeda inserida
unsigned long millisTarefa1;
unsigned long millisTarefa2;
unsigned long millisTarefa3;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Coloque moedas");
pinMode(botao_start1Pin, INPUT_PULLUP);
pinMode(botao_start2Pin, INPUT_PULLUP);
pinMode(moedeiroPin, INPUT_PULLUP);
pinMode(fita_de_leds1Pin, OUTPUT);
pinMode(fita_de_leds2Pin, OUTPUT);
pinMode(saida1Pin, OUTPUT);
pinMode(saida2Pin, OUTPUT);
//digitalWrite(saida1Pin, HIGH);
//digitalWrite(saida2Pin, HIGH);
Serial.println("Inicializado!");
}
void loop() {
tarefa1();
tarefa2();
tarefa3();
}
void tarefa1() {
if ((millis() - millisTarefa1) > 1000) {
if (contador_pulsos < 8) {
digitalWrite(fita_de_leds1Pin, LOW);
} else {
digitalWrite(fita_de_leds1Pin, HIGH);
}
millisTarefa1 = millis();
}
}
void tarefa2() {
if ((millis() - millisTarefa2) > 1000) {
if (contador_pulsos < 6) {
digitalWrite(fita_de_leds2Pin, LOW);
} else {
digitalWrite(fita_de_leds2Pin, HIGH);
}
millisTarefa2 = millis();
}
}
void tarefa3() {
if ((millis() - millisTarefa3) > 50) {
millisTarefa3 = millis();
if (!digitalRead(moedeiroPin)) {
contador_pulsos++; // Incrementa o contador de pulsos
valor_moeda_atual = contador_pulsos * valor_pulso / 100.0; // Calcula o valor atual com base no número de pulsos e no valor de cada pulso
lcd.clear();
lcd.print("VALOR: R$ ");
lcd.print(valor_moeda_atual, 2); // Exibe o valor atual no LCD com 2 casas decimais
Serial.print ("Moedas = ");
Serial.println (valor_moeda_atual);
delay(200);
}
if (digitalRead(botao_start1Pin) == LOW && contador_pulsos >= 8) { // Preço da saída 1
contador_pulsos -= 8; // Reduz os pulsos do valor
contador = 3;
flag1 = 1;
while(flag1==1){
contagem1(saida1Pin);
}
}
if (digitalRead(botao_start2Pin) == LOW && contador_pulsos >= 6) { // Preço da saída 2
contador_pulsos -= 8; // Reduz os pulsos do valor
contador = 3;
flag2 = 1;
while(flag2==1){
contagem2(saida2Pin);
}
}
lcd.setCursor(0, 1);
lcd.print("CREDITO: ");
lcd.print(contador_pulsos);
lcd.print(" ");
}
}
void contagem1(int saida) {
digitalWrite(saida1Pin, HIGH);
contador--;
lcd.setCursor(0, 1);
lcd.print("SERVIR: ");
lcd.print("00:");
if (contador < 3) {
lcd.print("0");
}
lcd.print(contador);
delay(1000);
if (contador <= 0) {
flag1 = 0;
contador = 0;
digitalWrite(saida1Pin, LOW);
lcd.clear();
lcd.print("COLOQUE MOEDAS");
delay(1000);
}
}
void contagem2(int saida) {
digitalWrite(saida2Pin, HIGH);
contador--;
lcd.setCursor(0, 1);
lcd.print("SERVIR: ");
lcd.print("00:");
if (contador < 10) {
lcd.print("0");
}
lcd.print(contador);
delay(1000);
if (contador <= 0) {
flag2 = 0;
contador = 0;
digitalWrite(saida2Pin, LOW);
lcd.clear();
lcd.print("COLOQUE MOEDAS");
delay(1000);
}
}