Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LiquidCrystal_I2C.h>
- LiquidCrystal_I2C lcd(0x27,20,4);
- //constantes
- const int monedaspin = 2; //pin de interrupciones
- const int sensorbotellapin = 7;
- const int sensorcaudalpin = 8;
- const int pulsadorpin = 9;
- const int dispensadorpin = 13;
- const float costoXml1 = 0.20;
- const float costoXml2 = 0.10;
- const float costoMinTipo1 = 0.20;
- const float costoMinTipo2 = 0.50;
- //variables
- volatile float montoMonedas = 0.00;
- volatile int escenario = 0;
- volatile int monedaInsertada = 0;
- volatile int pulsadorPresionado = 0;
- volatile int sensorBotellaActivado = 0;
- void setup() {
- // put your setup code here, to run once:
- pinMode(sensorbotellapin, INPUT);
- pinMode(sensorcaudalpin, INPUT);
- pinMode(pulsadorpin, INPUT);
- pinMode(dispensadorpin, OUTPUT);
- attachInterrupt(digitalPinToInterrupt(monedaspin), monedaInterrupcion, RISING);
- lcd.begin();
- lcd.backlight();
- escenario = 0;
- }
- void monedaInterrupcion() {
- montoMonedas += 0.1;
- monedaInsertada = 1;
- }
- void imprimirBienvenida(){
- lcd.setCursor(0, 0);
- lcd.print("Hola, Ecofiller!");
- lcd.setCursor(0, 1);
- lcd.print("Coloca tu botella");
- lcd.setCursor(0, 2);
- lcd.print("e inserta tus");
- lcd.setCursor(0, 3);
- lcd.print("monedas");
- }
- void imprimirMontoYCostoTipo(float costoXml){
- lcd.setCursor(0,0);
- lcd.print("Monto:");
- lcd.setCursor(0,2);
- lcd.print("S/");
- lcd.print(montoMonedas);
- }
- void imprimirMontoRestante(){
- lcd.setCursor(0,0);
- lcd.print("Monto Restante:");
- lcd.setCursor(0,2);
- lcd.print("S/");
- lcd.print(montoMonedas);
- }
- void imprimirMontoMinNecesario(){
- lcd.setCursor(0,0);
- lcd.print("Monto Restante:");
- lcd.setCursor(0,2);
- lcd.print("S/");
- lcd.print(montoMonedas);
- }
- void imprimirInsertarBotella(){
- lcd.setCursor(0,0);
- lcd.print("Necesario insertar botella");
- lcd.setCursor(0,2);
- lcd.print("para dispensar agua");
- lcd.print(costoMinTipo1);
- }
- void imprimirDespedida(){
- lcd.setCursor(0,0);
- lcd.print("¡Muchas gracias!");
- lcd.setCursor(0,2);
- lcd.print("Hemos ahorrado 1 botella");
- lcd.print(costoMinTipo1);
- }
- void encenderDispensarAgua(){
- digitalWrite(dispensadorpin,HIGH);
- }
- void apagarDispensarAgua(){
- digitalWrite(dispensadorpin,LOW);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- if(escenario == 0){
- imprimirBienvenida();
- if(montoMonedas > 0.0){
- escenario = 1;
- }
- }
- else if (escenario == 1){
- if(monedaInsertada == 1){
- lcd.clear();
- monedaInsertada = 0;
- }
- if(montoMonedas > costoMinTipo2){
- imprimirMontoYCostoTipo(costoXml2);
- }
- else{
- imprimirMontoYCostoTipo(costoXml1);
- }
- pulsadorPresionado = digitalRead(pulsadorpin);
- if(pulsadorPresionado == HIGH){
- if(montoMonedas >= 0.2){
- escenario = 2;
- }
- else{
- imprimirMontoMinNecesario();
- //imprimir por 1 segundo
- }
- }
- }
- else if(escenario == 2){
- sensorBotellaActivado = digitalRead(sensorbotellapin);
- if(sensorBotellaActivado == HIGH){
- imprimirMontoRestante();
- pulsadorPresionado = digitalRead(pulsadorpin);
- if(pulsadorPresionado == HIGH){
- encenderDispensarAgua();
- lcd.clear();
- }
- else{
- apagarDispensarAgua();
- }
- }
- else{
- imprimirInsertarBotella();
- }
- if(montoMonedas <= 0.0){
- escenario = 3;
- }
- }
- else if(escenario == 3){
- imprimirDespedida();
- //imprimir por 1 segundo
- escenario = 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement