Go Down

Topic: Mi controlador de acuario. (Ayuda). (Read 3 times) previous topic - next topic

martinrv84

Hol. Despues de un tiempo "fuera de combate" por motivos de trabajo continuo con este proyecto pues el LCD de 16x04 se me antojaba algo pequeño y me acabo de pillar un Lcd de 20x04 pero no consigo hacerla funcionar con el codigo de la 16x04 y no se lo que hago mal.
Os adjunto el sketch de la 16x04 que funciona:

Code: [Select]

#include <LiquidCrystal.h>
#include <RelojDS1307.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>

/*Definimos los PINS*/
#define TEMP           7
#define LUZ            8
#define LUZLUNA        4
#define CAL1           5
#define CAL2           6


OneWire oneWire(TEMP);
DallasTemperature sensors(&oneWire);
DeviceAddress ACUARIO, GAMBARIO;
LiquidCrystal lcd(0);
RelojDS1307Class Reloj;

void setup(void)
{
  Serial.begin(9600);
 
  //Reloj.SetDateTime( 30, 01, 13, 17, 25, 00 );

  sensors.begin();
  lcd.begin(16, 2);
  lcd.setBacklight(HIGH);
 
  pinMode(LUZ, OUTPUT);
  pinMode(LUZLUNA, OUTPUT);
  pinMode(CAL1, OUTPUT);
  pinMode(CAL2, OUTPUT);

/*Cmiramos si estan todas las sondas conectadas mediante el serial monitor*/
  Serial.print("Localizando sondas de temperatura: ");
  Serial.print("Encontradas  ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" sondas.");

}





void loop(void)
{
  Serial.print("Recibiendo temperaturas...");
  sensors.requestTemperatures();
  Serial.println("OK");

  printData(ACUARIO);
  printData(GAMBARIO);
 
  float AGUA1 = sensors.getTempC(ACUARIO);
  float AGUA2 = sensors.getTempC(GAMBARIO);



//Configuracion de las temperaturas
  if(AGUA1 < 24)
  {
    digitalWrite (CAL1, HIGH);
  }
 
  if(AGUA1 > 25)
  {
    digitalWrite (CAL1, LOW);
  }
 
  if(AGUA2 < 24)
  {
    digitalWrite (CAL2, HIGH);
  }
 
  if(AGUA2 > 25)
  {
    digitalWrite (CAL2, LOW);
  }
 
 
  //Configuracion del encedido y apagado de las luces
  if(Reloj.IsLater(9, 59) && Reloj.IsPrevious(21, 59))
  {
    digitalWrite(LUZ, HIGH);
    digitalWrite(LUZLUNA, LOW);
  }
   
  else
  {
    digitalWrite(LUZ, LOW);
    digitalWrite(LUZLUNA, HIGH);
  }
 

/*Con esto mostraremos un error en el lcd en el lugar de la temperatura correspondiente*/
  if (!sensors.getAddress(ACUARIO, 0))
{
  Serial.println("INCAPAZ DE ENCONTRAR SONDA ACUARIO");
  lcd.setCursor(2,1);
  lcd.print("ERROR");
}
  if (!sensors.getAddress(GAMBARIO, 1))
  {
  Serial.println("INCAPAZ DE ENCONTRAR SONDA GAMBARIO");
  lcd.setCursor(11,1);
  lcd.print("ERROR");
  }
}



void printData(DeviceAddress deviceAddress)
{
  printTemperature(deviceAddress);
  Serial.println();
}


void printTemperature(DeviceAddress deviceAddress)
{
  float AGUA1 = sensors.getTempC(ACUARIO);
  float AGUA2 = sensors.getTempC(GAMBARIO);
  Serial.print("A: ");
  Serial.print(AGUA1);
  Serial.print("  ");
  Serial.print("G: ");
  Serial.print(AGUA2);
  Serial.print("  ");
  lcd.setCursor(4,0);
  lcd.print(Reloj.Time());
  lcd.setCursor(0,1);
  lcd.setCursor(0,1);
  lcd.print("A:");
  lcd.print(AGUA1);
  lcd.setCursor(7,1);
  lcd.print("  G:");
  lcd.print(AGUA2);


}


El LCD que me he comprado viene a ser uno como este (aunque no es exactamente el mismo vendedor):


http://www.ebay.es/itm/Arduino-Serial-IIC-I2C-TWI-2004-204-Character-LCD-Module-Display-/200764158676?pt=LH_DefaultDomain_0&hash=item2ebe79f2d4

Alguien me puede ayudar para saber en que difiere la prgramacion de la 16x02 de la 20x04?

martinrv84

En poco sunire todo el proyecto una vez finalizado.
Yo con los ds18b20 que vienen encapsulados a prueba de agua, me apaño con el cable que tienen. Para tu caso ya no tengo ni idea.

EA3BIL

Hola,

Respecto al DS18B20, tengo unas preguntillas:


  • ¿A qué distancia máxima se le puede poner desde el Arduino?
  • ¿Sería necesario usar cable con blindaje (apantallamiento interno) para largas distancias  (30mts) ?




Gracias por vuestra ayuda.

Heke

Pon como lo has solucionado y asi ayudas a cualquiera que se vea en la misma situacion y llegue a este post.
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Sergegsx

olvidate de los leds, pon un println dentro de la condición if y mira a ver si entra en la condición
Quote
if(Reloj.IsLater(20, 00) && Reloj.IsPrevious(10, 00))

nunca he usado la funcion isLater, puede que no funcione bien o que estes haciendo algo mal.
* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

Go Up