Hola a todos y Buenas noches.
Estoy trabajando en un proyecto con arduino para vaciar y llenar un acuario.
Consta de los siguientes componentes:
- Arduino Due
- RTC DS3231
- Placa de 8 rele
- Electrovalvulas
- Sensor de distancia ultrasonico
- Pantalla 20x4 LCD i2c
- Pantalla de 16x2 con keypad (shield de uno)
De momento ando con el inicio pero no me entra en loop, al cargarlo. Me explico, entra en setup y pero no llega a loop que hace llamadas a dos funciones. Os dejo el codigo, para ver si me podeis hechar una mano
Otra historia seria montar un menu el cual se moviera con el keypad. Me han recomendado phimenu pero no he conseguido nada, tambien he visto una libreria de maquina de estado que podria servir para ello.
El codigo solo consta de una presentación en las dos pantalla pero no entra en loop como os he dicho:
Aqui esta:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Ultrasonic.h>
#include <DS3231.h>
#include <LiquidCrystal.h>
#define BUTTON_ADC_PIN A0 // A0 is the button ADC input
#define LCD_BACKLIGHT_PIN 3 // D3 controls LCD backlight
//some example macros with friendly labels for LCD backlight/pin control, tested and can be swapped into the example code as you like
#define LCD_BACKLIGHT_OFF() digitalWrite( LCD_BACKLIGHT_PIN, LOW )
#define LCD_BACKLIGHT_ON() digitalWrite( LCD_BACKLIGHT_PIN, HIGH )
#define LCD_BACKLIGHT(state) { if( state ){digitalWrite( LCD_BACKLIGHT_PIN, HIGH );}else{digitalWrite( LCD_BACKLIGHT_PIN, LOW );} }
/*--------------------------------------------------------------------------------------
Variables
--------------------------------------------------------------------------------------
byte buttonJustPressed = false; //this will be true after a ReadButtons() call if triggered
byte buttonJustReleased = false; //this will be true after a ReadButtons() call if triggered
byte buttonWas = BUTTON_NONE; //used by ReadButtons() for detection of button events
*/
LiquidCrystal_I2C lcdi2c(0x27,20,4);
DS3231 rtc(SDA1, SCL1); //RELOJ
LiquidCrystal lcd( 8, 9, 4, 5, 6, 7 );
//Ultrasonic ultrasonic(9,8); // (Trig PIN,Echo PIN)
Ultrasonic ultrasonic(11,12,3000);
float LAct;
void setup(float LAct) {
//Iniciamos el fondo retroiluminado
lcdi2c.backlight();
//Iniciamos la pantalla
lcdi2c.init();
rtc.begin();
/* put your setup code here, to run once:
pinMode( BUTTON_ADC_PIN, INPUT ); //ensure A0 is an input
digitalWrite( BUTTON_ADC_PIN, LOW ); //ensure pullup is off on A0*/
//lcd backlight control
digitalWrite( LCD_BACKLIGHT_PIN, HIGH ); //backlight control pin D3 is high (on)
pinMode( LCD_BACKLIGHT_PIN, OUTPUT ); //D3 is an output
//set up the LCD number of columns and rows:
lcd.begin( 16, 2 );
lcdi2c.print("Cambio automatico");//Escribimos en la primera linea
}
void loop(float Lact) {
lcdi2c.clear();//Limpiamos la LCD
calnivel(Lact);
presentacion(Lact);
// put your main code here, to run repeatedly:
}
void calnivel(float LAct){
float LMax;
int CmMax;
int CmAct;
LMax=150;
CmMax=48;
CmAct=48-ultrasonic.Ranging(CM);
LAct=(CmAct*LMax)/CmMax;
}
void presentacion(float LAct){
int porcent;
lcdi2c.clear();//Limpiamos la LCD
lcdi2c.print("Cambio automatico de nivel");//Escribimos en la primera linea
lcdi2c.setCursor(0,1);//Saltamos a la segunda linea
lcdi2c.print("Fecha: ");
lcdi2c.print(rtc.getDateStr());
lcdi2c.setCursor(0,2);//Saltamos a la segunda linea
lcdi2c.print("Hora: ");
lcdi2c.print(rtc.getTimeStr());
lcdi2c.setCursor(0,2);//Saltamos a la tercera linea
lcdi2c.print(" Seleccione con boton ");
lcd.setCursor(0,0);
porcent = (LAct*100)/150;
lcd.print("Nivel Actual: ");
lcd.print(porcent);
lcd.print("%");
delay(500);
}