#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define moedeiroPin 12
#define botao_start1Pin 2
#define botao_start2Pin 13
#define fita_de_leds1Pin 3
#define fita_de_leds2Pin A4
#define saida1Pin 5
#define saida2Pin 4
LiquidCrystal_I2C lcd(0x27, 16, 2); // Endereço, número de colunas, número de linhas
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.begin(16, 2);
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);
Serial.println("Inicializado!");
}
void loop() {
tarefa1();
tarefa2();
tarefa3();
}
void tarefa1() {
if ((millis() - millisTarefa1) < 600) {
if (contador_pulsos < 8) {
digitalWrite(fita_de_leds1Pin, LOW);
}
} else {
digitalWrite(fita_de_leds1Pin, HIGH);
}
if ((millis() - millisTarefa1) > 1000) {
millisTarefa1 = millis();
}
}
void tarefa2() {
if ((millis() - millisTarefa2) < 600) {
if (contador_pulsos < 6) {
digitalWrite(fita_de_leds2Pin, LOW);
}
} else {
digitalWrite(fita_de_leds2Pin, HIGH);
}
if ((millis() - millisTarefa2) > 1000) {
millisTarefa2 = millis();
}
}
void tarefa3() {
if ((millis() - millisTarefa3) < 50) {
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.setCursor(0, 0);
lcd.print("VALOR: R$ ");
lcd.print(valor_moeda_atual, 2); // Exibe o valor atual no LCD com 2 casas decimais
}
// Se apertar botão start 1, diminui um pulso e inicia contagem na saída 1
if (digitalRead(botao_start1Pin) == LOW && contador_pulsos >= 8) { // Preço da saída 1
contador_pulsos -= 8; // Reduz os pulsos do valor
contador = 15; // Reinicia o contador
contagem(saida1Pin); // Inicia a contagem na saída 1
}
// Se apertar botão start 2, diminui um pulso e inicia contagem na saída 2
if (digitalRead(botao_start2Pin) == LOW && contador_pulsos >= 6) { // Preço da saída 2
contador_pulsos -= 6; // Reduz os pulsos do valor
contador = 15; // Reinicia o contador
contagem(saida2Pin); // Inicia a contagem na saída 2
}
lcd.setCursor(0, 1);
lcd.print("CREDITO: ");
lcd.print(contador_pulsos);
lcd.print(" ");
}
if ((millis() - millisTarefa3) > 100) {
millisTarefa3 = millis();
}
}
void contagem(int saida) {
digitalWrite(saida, 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) {
contador = 0;
digitalWrite(saida, LOW);
lcd.clear();
lcd.print("COLOQUE MOEDAS");
delay(1000);
}
}