Hola a todos, no se como captar vuestra atencion para que os animeis a responder jeje, espero que os interese el tema de por si.
hace unos meses estuve pensando en hacer un controladsor de clima con un arduino nano para controlar todas las constantes vitales de mi cultivo ecologico. Me pase un tiempo tomando datos y leyendo otros posts de alguien que automatizo su invernadero con arduino.
Bien el programa que he diseñado en principio deberia funcionar, y funciona. El problema es cuando llamo a una funcion que es la que se encarga de leer todos los valores de los sensores y los guarde en variables, este no lle nada y no lo guarda. Plantee la idea de que TODOS los sensores estaban dañados o que no hice bien las conexiones entre la placa y los sensores, y los probe uno a uno.
En fin espero que les echeis un vistazo y que intenteis averiguar que puede ser.
PD: Tambien he pensado en que las variables no pueden guardarse porque no estan declaradas en la funcion en si, pero no crea que sea eso porque no me da error de compilacion.
Muchas gracias.
PD2: Aqui dejo un fragmento del codigo el cual me causa los problemas. El que necesite el codigo entero que me mande un MP ya que ocupa unas 400 lineas y tampoco es plan de ensuciar el post xD
#define DEBUG 1
//Version del Programica
#define v 0.2
//Definimos los pines de entrada digital
#define agua_pin 2
#define start_input 3
//Definimos los pines de entradas analogicas
#define temp_pin A0
#define LDR_pin A1
#define hum_pin A2 //Numero del pin analogico que usaremos para leer la humedad del suelo
#define pulsador A3
//Pines A4 y A5 SDA SCL RESERVADOS PARA LA PANTALLA LCD
//Pines 10, 11, 12, 13 reservados para el modulo ETHERNET
//Definimos los pines de las salidas
#define bomba 4 // Numero de pin para a salida de la bomba de agua
#define vent 5 //Pin para los ventiladores disipadores de calor
//Definimos los LED's
#define LED_bomba 6 //Led para indicar de que la bomba esta funcionando
#define LED_luz 7 //led verifica la iluminacion
#define LED_hum 8
//Incluimos las librerias del DHT
#include "DHT.h"
//Iniciamos las variables del dht
#define DHTPIN 9
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
//Definimos laslibrerias
#include <SPI.h>
#include <Wire.h>
//Librerias para el LCD
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
//Libreria del bargraph
#include <LcdBarGraphX.h>
//Librerias para conexion a ethernet
#include <Ethernet.h>
//Declaración de la direcciones MAC e IP. También del puerto 80
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(192,168,10,177); //IP
EthernetServer servidor(80);
String readString=String(30);
//Variables globales
int temp;
int LDR = LDR_pin;
byte riego;
int hum_suelo;
//Declaramos los valores iniciales para el primer ciclo.
byte H = 67;
byte T = 22;
//Declaramos las variables para el LCD
byte dir = 0x27; // Ese 0x significa que es hexadecimal, no decimal
LiquidCrystal_I2C lcd( dir, 2, 1, 0, 4, 5, 6, 7);
//Declaramos la instancia para el bar graph
LcdBarGraphX lbg(&lcd, 0, 1); // -- creating bargraph instance, format is (&lcd, lcdNumCols, start X, start Y). So (&lcd, 16, 0, 1) would set the bargraph length to 16 columns and start the bargraph at column 0 on row 1.
void setup()
{
//Iniciamos con las direcciones de red asignadas
Ethernet.begin(mac, ip);
servidor.begin();
Serial.begin(9600);
//Declaramos variables
int temp_luz;
dht.begin();
//Declaramos entradas
pinMode(temp, INPUT);
pinMode(LDR, INPUT);
pinMode(temp_luz, INPUT);
pinMode(hum_suelo,INPUT);
pinMode(agua_pin, INPUT);
pinMode(start_input, INPUT);
pinMode(pulsador, INPUT);
//Declaramos las salidas
pinMode(vent, OUTPUT);
pinMode(bomba, OUTPUT);
pinMode(LED_bomba, OUTPUT);
pinMode(LED_luz, OUTPUT);
lcd.begin (16,2); // Inicializar el display con 16 caraceres 2 lineas
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);
start();
}
void loop()
{
#if DEBUG
debug();
#endif
ethernet();
pantalla();
automatizacion();
if(pulsador == HIGH){ //Si el pulsador X esta pulsado que acceda al menu del selector, siempre y cuando no este realizando ninguna tarea
selector();
}
}
//Subprograma de automatizacion del invernadero
void automatizacion()
{
int hum_suelo = analogRead(hum_pin);
int temp = dht.readTemperature();
int temp_luz = analogRead(temp_pin);
int LDR = analogRead(LDR_pin); //definimos el pin analogico del ldr que vamos a utilizar para medir la intensidad de luz
int h = dht.readHumidity();// Lee la humedad
int nivel_agua = digitalRead(agua_pin);
}
void pantalla() {
lcd.clear();
lcd.print("H:");
lcd.print(dht.readHumidity());
lcd.setCursor(8,0);
lcd.print("T:");
lcd.print(temp);
lcd.setCursor(0,1);
lcd.print("LDR:");
lcd.print(LDR);
lcd.setCursor(9,1);
lcd.print("HS:");
lcd.print(hum_suelo);
}