Buenas,
he buscado mucho en estos foros y google en general pero no encuentro nada. Quizá sea una tontería pero no soy capaz de entenderlo.
Tengo un arduino Mega2560. Además tengo dos sketchs por separado que me funcionan bien pero al adaptar uno al otro, uno de los sesores deja de funcionar correctamente y devuelve valores "raros".
El primero proyecto es un sensor de humedad temperatura de Grove y funciona correctamente. El código es simple
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
LiquidCrystal_I2C lcd(0x27,20,4);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
dht.begin();
lcd.init(); //initialize the lcd
lcd.backlight(); //open the backlight
}
void loop() {
lcd.setBacklight(1);
float h = dht.readHumidity();
float t = dht.readTemperature();
while (isnan(h) || isnan(t)) {}
lcd.setCursor ( 0, 0 );
lcd.print("Temperatura: ");
lcd.print(t);
lcd.setCursor ( 0, 1 );
lcd.print("Humedad: ");
lcd.print(h);
lcd.setCursor ( 0, 2 );
}
El segundo proyecto es un receptor de IR con un mando a distancia que compré en china. Éste, por separado, también funciona bien y no tengo problemas. El código es
#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
IRrecv irrecv(11);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
translateIR();
irrecv.resume();
}
delay(100);
}
void translateIR(){
// Un switch que saca el código por el serial
}
Ahora, adapto este código al primero y el sensor de humedad/temperatura devuelve valores totalmente aleatorios mientras que el IR devuelve valores correctos. El código es
#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
IRrecv irrecv(11);
decode_results results;
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
#define DHTPIN 2 // what digital pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
lcd.init(); //initialize the lcd
lcd.backlight(); //open the backlight
dht.begin();
}
void loop() {
int option;
lcd.setCursor ( 0, 0 );
lcd.print("Loop");
float h = dht.readHumidity();
float t = dht.readTemperature();
if (irrecv.decode(&results) && results.value != 'FFFFFFFF') {
option = translateIR();
irrecv.resume(); // Receive the next value
if( option < 999){
lcd.setCursor ( 0, 1 );
lcd.print(" ");
lcd.setCursor ( 0, 1 );
lcd.print("Opcion: ");
lcd.print(option);
}
}
lcd.setCursor ( 0, 2 );
lcd.print("Temperatura: ");
lcd.print(t);
lcd.setCursor ( 0, 3 );
lcd.print("Humedad: ");
lcd.print(h);
}
/*-----( Declare User-written Functions )-----*/
int translateIR() // takes action based on IR code received
{
// Devuelve un valor entero positivo según el botón que pulso.
}
Y llevo ya varios días intentando encontrar alguna pista que al menos me indique por dónde indagar.
Gracias y disculpad las molestias.