Buenas, estoy jugando con una pantalla LCD y un relé. Quiero que una máquina esté X tiempo encendida y X tiempo parada, me muestre en el LCD los ciclos que lleva, el total del tiempo encendida, y el tiempo total que lleva el arduino encendido. De momento simulo el relé con el led en 13 y los tiempos están disminuidos, pero en la versión final será unos 5 minutos ON y unos 10 o 15 OFF.
Donde tengo pegas es en el tiempo ON, pues el tiempo encendido lo soluciono fácil con time(), aquí mi código:
#include <LiquidCrystal.h>
#include <Time.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int ledPin = 13; // Pin del led
int ledState = LOW; // ledState estado del led
long intervalOn = 5000; // Tiempo ON
long intervalOff = 10000; // Tiempo OFF
long previousMillis = intervalOff;
long Ciclos = 0;
long TotalOn = 0;
void setup() {
pinMode(ledPin, OUTPUT);
lcd.begin(16, 2);
lcd.print(" Macerator 3000");
lcd.setCursor(0, 1);
lcd.print("P");
delay (500);
lcd.print("o");
delay (500);
lcd.print("r");
delay (500);
lcd.print(" ");
delay (500);
lcd.print("D");
delay (500);
lcd.print("a");
delay (500);
lcd.print("n");
delay (500);
lcd.print("i");
delay (1000);
lcd.clear();
}
void loop()
{
unsigned long currentMillis = millis();
if (ledState == LOW) {
if(currentMillis - previousMillis > intervalOff) {
previousMillis = currentMillis;
ledState = HIGH;
lcd.clear();
lcd.setCursor(0, 0);
Ciclos = Ciclos +1;
lcd.print("Ciclo:");
lcd.setCursor(9, 0);
lcd.print("Temp:");
lcd.setCursor(6, 0);
lcd.print(Ciclos);
}
} else {
if(currentMillis - previousMillis > intervalOn) {
previousMillis = currentMillis;
ledState = LOW;
lcd.setCursor (6,1);
lcd.print(" ");
}
}
digitalWrite(ledPin, ledState);
if (ledState == HIGH){
lcd.setCursor(0, 1);
lcd.print("Total On:");
lcd.print(TotalOn);
lcd.print("min");
TotalOn = TotalOn + 1;
delay (1000);
} else {
lcd.setCursor(0, 1);
lcd.print("Total:");
lcd.setCursor(7, 1);
lcd.print(hour());
lcd.print(":");
lcd.print(minute());
lcd.print(":");
lcd.print(second());
}
}
Como se puede ver, y a modo de prueba, meto un +1 más un delay de un segundo para que a la variable le vaya sumando segundos. Otra forma que he pensado es poner una variable TimeOnmin = TimeOnmin + (TimeOnmin - minute()) <-- no se si se podría poner así, pero creo que se puede captar el concepto.
Esta solución creo que me serviría para mostrar horas y minutos, pero los segundos es más complicado.
Agradecería algún tipo de ayuda o seguramente alguna forma de hacerlo probablemente más fácil.