Saludos cordiales a la comunidad, tengo un problema de novato y solicito ayuda, gracias.
He buscado por la web y no he encontrado solución.
Utilizo Arduino uno, pero no el controlador entero, solo el AtMega328p_pu en una board el cual para re-programar desmonto, programo y monto (lo se, es mi primer proyecto). Esto es así porque ya esta instalado en el acuario con su caja de conexiones y demás.
Mi proyecto trata de controlar de un acuario, su iluminación a modo de amanecer, atardecer y anochecer, el paro marcha del filtro y del aireador (burbujitas), todo por control horario (recuerda).
De momento comentar que el código funciona bien (tengo problemas de armónicos pero eso es otro cantar), hace su función bien de momento.
El kit de la cuestión:
Como aun voy re-programando para ajustar valores de luces y tiempos me pasa que, al quitar el micro-controlador a mitad de programa, cuando lo pongo no recuerda donde estaba y se espera a la siguiente instrucción o sea a la próxima hora programada para ejecutar la instrucción pertinente.
Pregunta:
Se que es un LOOP y que es un bucle pero, esto se puede remediar de alguna manera?
Puedo poner y que recuerde lo que ha hecho y continúe?
Bueno os dejo el código para que veáis el tema:
#include <Wire.h> //Del IDE.
#include <RTClib.h> //Del IDE.
#include <LiquidCrystal_I2C.h> //De: https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/
#include <Adafruit_NeoPixel.h> //Del IDE.
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd (0x26, 2, 1, 0, 4, 5, 6, 7);
Adafruit_NeoPixel tira = Adafruit_NeoPixel(8, 2, NEO_GRB + NEO_KHZ800);
String daysOfTheWeek[7] = {"Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"};
int rele1 = 3; //FILTRO.
int rele2 = 4; //BURBUJAS.
void setup() {
lcd.setBacklightPin(3, POSITIVE);
lcd.setBacklight(HIGH);
lcd.begin(16, 2);
tira.begin();
tira.show();
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
if (! rtc.begin()) {
lcd.println("Modulo RTC no encontrado !");
while (1);
}
}
void loop() {
char buffer[20];
tira.show();
DateTime fecha = rtc.now();
lcd.setCursor(0,0);
lcd.print(daysOfTheWeek[fecha.dayOfTheWeek()]);
lcd.setCursor(5, 0);
sprintf (buffer, "%02d/%02d/%4d", fecha.day(), fecha.month(), fecha.year());
lcd.print(buffer);
lcd.setCursor(5,1);
sprintf(buffer, "%02d:%02d:%02d", fecha.hour(), fecha.minute(), fecha.second());
lcd.print(buffer);
//Burbujas ON 7:50h
if (fecha.hour() == 7 && fecha.minute() == 50){
digitalWrite(rele2, HIGH);
}
//Filtro ON 7:55h
if (fecha.hour() == 7 && fecha.minute() == 55){
digitalWrite(rele1, HIGH);
}
//Filtro off 17:44h
if (fecha.hour() == 17 && fecha.minute() == 44){
digitalWrite(rele1, LOW);
}
//Burbujas off 23:30h
if (fecha.hour() == 23 && fecha.minute() == 30){
digitalWrite(rele2, LOW);
}
//Amanece 8:00h
if (fecha.hour() == 8 && fecha.minute() == 0){
for (int i = 0; i < 2; i++) {
tira.setBrightness(25);
tira.setPixelColor(i, 255, 150, 0);
tira.show();
}
}
//Amanece 8:30h
if (fecha.hour() == 8 && fecha.minute() == 30){
for (int i = 0; i < 4; i++) {
tira.setBrightness(50);
tira.setPixelColor(i, 255, 150, 0);
tira.show();
}
}
//Amanece 9:00h
if (fecha.hour() == 9 && fecha.minute() == 0){
for (int i = 0; i < 6; i++) {
tira.setBrightness(75);
tira.setPixelColor(i, 255, 150, 0);
tira.show();
}
}
//Amanece 9:30h
if (fecha.hour() == 9 && fecha.minute() == 30){
for (int i = 0; i < 8; i++) {
tira.setBrightness(100);
tira.setPixelColor(i, 255, 150, 0);
tira.show();
}
}
//Medio día 10:00h
if (fecha.hour() == 10 && fecha.minute() == 0){
for (int i = 0; i < 2; i++) {
tira.setBrightness(125);
tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Medio día 10:30h
if (fecha.hour() == 10 && fecha.minute() == 30){
for (int i = 0; i < 4; i++) {
tira.setBrightness(150);
tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Medio día 11:00h
if (fecha.hour() == 11 && fecha.minute() == 0){
for (int i = 0; i < 6; i++) {
tira.setBrightness(175);
tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Medio día 11:30h
if (fecha.hour() == 11 && fecha.minute() == 30){
for (int i = 0; i < 8; i++) {
tira.setBrightness(200);
tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Medio día 12:00h
if (fecha.hour() == 12 && fecha.minute() == 0){
for (int i = 0; i < 8; i++) {
tira.setBrightness(255);
tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Atardecer 17:45h
if (fecha.hour() == 17 && fecha.minute() == 45){
tira.setBrightness(255);
tira.setPixelColor(0, 255, 255, 255);
tira.show();
}
if (fecha.hour() == 18 && fecha.minute() == 0){
tira.setBrightness(255);
tira.setPixelColor(1, 0, 0, 255);
tira.show();
}
if (fecha.hour() == 18 && fecha.minute() == 15){
tira.setBrightness(255);
tira.setPixelColor(2, 0, 0, 255);
tira.show();
}
if (fecha.hour() == 18 && fecha.minute() == 30){
tira.setBrightness(255);
tira.setPixelColor(3, 0, 0, 255);
tira.show();
}
if (fecha.hour() == 18 && fecha.minute() == 45){
tira.setBrightness(255);
tira.setPixelColor(4, 0, 0, 255);
tira.show();
}
if (fecha.hour() == 19 && fecha.minute() == 0){
tira.setBrightness(255);
tira.setPixelColor(5, 0, 0, 255);
tira.show();
}
if (fecha.hour() == 19 && fecha.minute() == 15){
tira.setBrightness(255);
tira.setPixelColor(6, 0, 0, 255);
tira.show();
}
if (fecha.hour() == 19 && fecha.minute() == 30){
tira.setBrightness(255);
tira.setPixelColor(7, 255, 255, 255);
tira.show();
}
//Apagado 22:00h
if (fecha.hour() == 22 && fecha.minute() == 0){
for (int i = 0; i < 2; i++) {
tira.setBrightness(128);
tira.setPixelColor(i, 0, 0, 0);
tira.show();
}
}
//Apagado 22:30h
if (fecha.hour() == 22 && fecha.minute() == 30){
for (int i = 0; i < 4; i++) {
tira.setBrightness(85);
tira.setPixelColor(i, 0, 0, 0);
tira.show();
}
}
//Apagado 23:00h
if (fecha.hour() == 23 && fecha.minute() == 0){
for (int i = 0; i < 6; i++) {
tira.setBrightness(42);
tira.setPixelColor(i, 0, 0, 0);
tira.show();
}
}
//Apagado 23:30h
if (fecha.hour() == 23 && fecha.minute() == 30){
tira.clear();
}
}
Gracias de nuevo y saludos.