Hola, buenas noches.
He creado un programa con mi Arduino Mega 2560 para usarlo como una estación de temperatura y humedad, con controles por sensor ir y también da la hora y la fecha. Al cargar el programa, el programa se ejecuta solo hasta base = HIGH en el setup, y se queda el led integrado del pin 13 parpadeando y no cesa nunca, se queda en bucle. Como podréis ver en el código, he puesto la comunicación serie al principio, para poder determinar donde se queda congelado exactamente el programa, y he observado que se queda en Serial.println(" base ok"); que me lo manda en bucle al puerto serie todo el rato. También he notado que si este mensaje( base ok) lo pongo más largo (ejemplo: la base está bien), me lo manda en bucle también, pero me corta el mensaje y no lo manda entero.
EDIT: tengo este mismo proyecto, pero sin el sensor ir, lo tengo con unos botones, y no me hace esto. He estado leyendo su librería y la tengo actualizada, no sé qué puede ser, y quiero solucionarlo, porque me es más fácil controlarlo a distancia. Gracias por la ayuda.
EDIT 2: Para quien quiera saber qué es lo de base, es un transistor 2222a que tengo puesto para poder apagar por completo la pantalla con el mando. También tengo el mismo proyecto con el ir y tal... pero sin el transistor, y tampoco funcionaba.
#include <IRremote.h>
#include <IRremoteInt.h>
#include <DHT.h>
#include <DHT_U.h>
#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#define RS 10
#define E 8
#define D4 7
#define D5 4
#define D6 3
#define D7 2
#define base 12
#define Sensor 22
#define IR 23
#define POWER 0xFFA25D
#define FUNCION 0xFFE21D
#define VOL+ 0xFF629D
#define VOL- 0xFFA857
#define PAUSE 0xFF02FD
#define BACK 0xFF22DD
#define FORWARD 0xFFC23D
int power = 1;
int temp;
int humedad;
int modo = 1;
int estado;
LiquidCrystal lcd (RS, E, D4, D5, D6, D7);
DHT dht (Sensor, DHT11);
RTC_DS3231 rtc;
void setup() {
Serial.begin(9600);
pinMode(base, OUTPUT);
digitalWrite(base, HIGH);
Serial.println(" base ok");
Wire.begin();
Serial.println("wire begin");
rtc.adjust(DateTime(__DATE__,__TIME__));
dht.begin();
lcd.begin(16, 2);
lcd.setCursor(4, 0);
lcd.print("Iniciando");
lcd.setCursor(5, 1);
lcd.print("sistema");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
IrReceiver.begin(IR, DISABLE_LED_FEEDBACK);
}
void loop(){
DateTime fecha = rtc.now();
humedad = dht.readHumidity();
temp = dht.readTemperature();
estado = digitalRead(base);
if (power = 1){
digitalWrite(base, HIGH);
}
if (power = false){
digitalWrite(base, LOW);
}
if (IrReceiver.decode()) {
switch (IrReceiver.decodedIRData, HEX){
case POWER:
if (estado == HIGH){
power = 0;
}
if (estado == LOW){
power = 1;
}
IrReceiver.resume();
break;
case FUNCION:
if (modo == 1){
modo = 0;
delay(10);
}
if (modo == 0){
modo = 1;
delay(10);
}
}
}
if (modo == 1){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(10, 0);
lcd.print(temp);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humedad:");
lcd.setCursor(10, 1);
lcd.print(humedad);
lcd.print("%");
delay(500);
}
if (modo == 0){
lcd.clear();
lcd.setCursor(4, 0);
lcd.print(fecha.hour(), DEC);
lcd.print(":");
lcd.print(fecha.minute(), DEC);
lcd.print(":");
lcd.print(fecha.second(), DEC);
lcd.setCursor(3, 1);
lcd.print(fecha.day(), DEC);
lcd.print("/");
lcd.print(fecha.month(), DEC);
lcd.print("/");
lcd.print(fecha.year(), DEC);
delay(500);
}
}