Go Down

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

martinrv84

Nuevo sketch funcionando pero esta vez para un LCD 2004 I2C. Solo tuve que cambiar la libreria y un par de detalles. Luego hay otros cambios pero para colocar cada cosa en su sitio en el LCD.

Code: [Select]


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

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

LiquidCrystal_I2C lcd(0x27,20,4);
OneWire oneWire(TEMP);
DallasTemperature sensors(&oneWire);
DeviceAddress ACUARIO, GAMBARIO;
RelojDS1307Class Reloj;

void setup()
{
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
 
  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()

{
  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(0,1);
  lcd.print("FALLO S1");

}
  if (!sensors.getAddress(GAMBARIO, 1))
  {
  Serial.println("INCAPAZ DE ENCONTRAR SONDA GAMBARIO");
  lcd.setCursor(10,1);
  lcd.print("FALLO S2");

  }
}



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


void printTemperature(DeviceAddress deviceAddress)
{
  float AGUA1 = sensors.getTempC(ACUARIO);
  float AGUA2 = sensors.getTempC(GAMBARIO);
  Serial.print("ACUARIO: ");
  Serial.print(AGUA1);
  Serial.print("  ");
  Serial.print("GAMBARIO: ");
  Serial.print(AGUA2);
  Serial.print("  ");
  lcd.setCursor(0,0);
  lcd.print(Reloj.DateTime());
  lcd.setCursor(0,2);
  lcd.print("ACUARIO:  ");
  lcd.print(AGUA1);
  lcd.setCursor(0,3);
  lcd.print("GAMBARIO: ");
  lcd.print(AGUA2);
}

jray

Pues mira, nunca he usado un LCD I2C pero en vista de lo práctico que me parece su uso y lo que me gustan los integrados I2C, me guardo tu ejemplo.

martinrv84


Pues mira, nunca he usado un LCD I2C pero en vista de lo práctico que me parece su uso y lo que me gustan los integrados I2C, me guardo tu ejemplo.


Me alegro que te sirva de ayuda.

Go Up