#include <Wire.h>
//#include <Adafruit_LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4);
// Configura el LCD con la dirección I2C
//Adafruit_LiquidCrystal lcd(0);
//LiquidCrystal lcd(0);
//LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
const int buttonPin = 2; // el número del pin del botón
const int coinButtonPin = 4; // el número del pin del botón de monedas
const int ledPin = 13; // el número del pin del LED
const int ledPin2 = 12; // el número del pin del LED
int coinValue = 0; // valor inicial de las monedas
void setup() {
// inicializa el pin del LED como salida:
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
// inicializa los pines de los botones como entrada con pullup interno:
pinMode(buttonPin, INPUT_PULLUP);
pinMode(coinButtonPin, INPUT_PULLUP);
// Inicializa el LCD con el número de columnas y filas
lcd.init();
lcd.backlight();
lcd.begin(20, 4);
// Developed
lcd.clear();
lcd.setCursor((20 - strlen("AUTOLAVADO")) / 2, 0);
lcd.print("AUTOLAVADO");
lcd.setCursor((20 - strlen("BENDER")) / 2, 2);
lcd.print("BENDER");
lcd.setCursor((20 - strlen("2024")) / 2, 3);
lcd.print("2024");
delay(1000);
// Developed
lcd.clear();
// Muestra "AUTOLAVADO" y "BIENVENIDO" en el LCD
lcd.setCursor((20 - strlen("AUTOLAVADO")) / 2, 0);
lcd.print("AUTOLAVADO");
lcd.setCursor((20 - strlen("*PANVIEJO*")) / 2, 1);
lcd.print("*PANVIEJO*");
lcd.setCursor((20 - strlen("============")) / 2, 2);
lcd.print("============");
lcd.setCursor((20 - strlen("BIENVENIDO")) / 2, 3);
lcd.print("BIENVENIDO");
// Espera 10 segundos
delay(10000);
// Limpia el LCD
lcd.clear();
// Muestra "xxx" y "yyy" en el LCD
lcd.setCursor((20 - strlen("AUTOLAVADO")) / 2, 0);
lcd.print("AUTOLAVADO");
lcd.setCursor((20 - strlen("INGRESE CREDITOS")) / 2, 1);
lcd.print("INGRESE CREDITOS");
lcd.setCursor((20 - strlen("2000 AGUA/JABON")) / 2, 2);
lcd.print("2000 AGUA/JABON");
lcd.setCursor((20 - strlen("3000 SOLO AGUA")) / 2, 3);
lcd.print("3000 SOLO AGUA");
}
void loop() {
// lee el estado del botón:
int buttonState = digitalRead(buttonPin);
int coinButtonState = digitalRead(coinButtonPin);
// verifica si el botón está presionado y el valor de las monedas es igual o mayor a 2000.
// si es así, el buttonState es LOW y coinValue es mayor o igual a 2000:
if (buttonState == LOW && coinValue == 3000) {
// enciende el LED:
digitalWrite(ledPin2, HIGH); //ledPin = 13;
// Muestra "Lavando" en el LCD
lcd.clear();
lcd.setCursor((20 - strlen("AUTOLAVADO")) / 2, 0);
lcd.print("AUTOLAVADO");
lcd.setCursor((20 - strlen("--------------------")) / 2, 1);
lcd.print("--------------------");
lcd.setCursor((20 - strlen("LAVADO")) / 2, 2);
lcd.print("LAVADO");
// Inicia un contador de 30 segundos
for (int i = 30; i > 0; i--) {
int minutes = i / 60;
int seconds = i % 60;
// Formatea el tiempo en el formato MM:SS
char timeString[6];
sprintf(timeString, "%02d:%02d", minutes, seconds);
lcd.setCursor((20 - strlen(timeString)) / 2, 3);
lcd.print(timeString);
delay(1000); // espera 1 segundo
//lcd.clear();
}
// apaga el LED:
digitalWrite(ledPin2, LOW);
coinValue = 0;
lcd.clear();
// Muestra "xxx" y "yyy" en el LCD
lcd.setCursor((20 - strlen("AUTOLAVADO")) / 2, 0);
lcd.print("AUTOLAVADO");
lcd.setCursor((20 - strlen("INGRESE CREDITOS")) / 2, 1);
lcd.print("INGRESE CREDITOS");
lcd.setCursor((20 - strlen("2000 AGUA/JABON")) / 2, 2);
lcd.print("2000 AGUA/JABON");
lcd.setCursor((20 - strlen("3000 SOLO AGUA")) / 2, 3);
lcd.print("3000 SOLO AGUA");
}
if (buttonState == LOW && coinValue == 2000) {
// enciende el LED:
digitalWrite(ledPin, HIGH); //ledPin = 13;
// Muestra "Lavando" en el LCD
lcd.clear();
lcd.setCursor((20 - strlen("AUTOLAVADO")) / 2, 0);
lcd.print("AUTOLAVADO");
lcd.setCursor((20 - strlen("--------------------")) / 2, 1);
lcd.print("--------------------");
lcd.setCursor((20 - strlen("SHAMPOO")) / 2, 2);
lcd.print("SHAMPOO");
// Inicia un contador de 30 segundos
for (int i = 30; i > 0; i--) {
int minutes = i / 60;
int seconds = i % 60;
// Formatea el tiempo en el formato MM:SS
char timeString[6];
sprintf(timeString, "%02d:%02d", minutes, seconds);
lcd.setCursor((20 - strlen(timeString)) / 2, 3);
lcd.print(timeString);
delay(1000); // espera 1 segundo
//lcd.clear();
}
// apaga el LED:
digitalWrite(ledPin, LOW);
coinValue = 0;
lcd.clear();
// Muestra "xxx" y "yyy" en el LCD
lcd.setCursor((20 - strlen("AUTOLAVADO")) / 2, 0);
lcd.print("AUTOLAVADO");
lcd.setCursor((20 - strlen("INGRESE CREDITOS")) / 2, 1);
lcd.print("INGRESE CREDITOS");
lcd.setCursor((20 - strlen("2000 AGUA/JABON")) / 2, 2);
lcd.print("2000 AGUA/JABON");
lcd.setCursor((20 - strlen("3000 SOLO AGUA")) / 2, 3);
lcd.print("3000 SOLO AGUA");
}
// verifica si el botón de monedas está presionado.
// si es así, el coinButtonState es LOW:
if (coinButtonState == LOW) {
// suma 1000 al valor de las monedas
coinValue += 1000;
// Limpia el LCD
lcd.clear();
// Muestra "Ingresa Moneda" y el valor de las monedas en el LCD
lcd.setCursor((20 - strlen("AUTOLAVADO")) / 2, 0);
lcd.print("AUTOLAVADO");
lcd.setCursor((20 - strlen("--------------------")) / 2, 1);
lcd.print("--------------------");
lcd.setCursor((20 - strlen("INGRESA MONEDA")) / 2, 2);
lcd.print("INGRESA MONEDA");
lcd.setCursor((20 - strlen(String(coinValue).c_str())) / 2, 3);
lcd.print(coinValue);
// si el valor de las monedas es igual o mayor a 2000
if (coinValue == 2000) {
// Limpia el LCD
lcd.clear();
// Muestra "Valor alcanzado" en el LCD
lcd.setCursor((20 - strlen("AUTOLAVADO")) / 2, 0);
lcd.print("AUTOLAVADO");
lcd.setCursor((20 - strlen("--------------------")) / 2, 1);
lcd.print("--------------------");
lcd.setCursor((20 - strlen("SHAMPOO")) / 2, 2);
lcd.print("SHAMPOO");
lcd.setCursor((20 - strlen("Presione Boton")) / 2, 3);
lcd.print("Presione Boton");
}
// si el valor de las monedas es igual o mayor a 3000
if (coinValue == 3000) {
// Limpia el LCD
lcd.clear();
// Muestra "Valor alcanzado" en el LCD
lcd.setCursor((20 - strlen("AUTOLAVADO")) / 2, 0);
lcd.print("AUTOLAVADO");
lcd.setCursor((20 - strlen("--------------------")) / 2, 1);
lcd.print("--------------------");
lcd.setCursor((20 - strlen("LAVADO")) / 2, 2);
lcd.print("LAVADO");
lcd.setCursor((20 - strlen("Presione Boton")) / 2, 3);
lcd.print("Presione Boton");
}
delay(1000); // espera 1 segundo para evitar lecturas múltiples del mismo pulso
}
}