aqui tengo este codigo, no creo que este bien mas que los ejemplos que he medio adaptao.... pero bueno...
os cuento como va:
pretendo controlar un acuario de 20 litros (dulce, esto es un ensayo para el marino) donde voy a monitorizar hora, temperatura del agua, temperatura de la pantalla, dimeo luz de luna (dos led guarros de 5mm con resistencias directos a una patilla pwm del arduino) y dimeo luz de dia (se supone que primero arranco la fuente y luego con un tip141 hago el dimeo...).
La pantalla es una 20x4 lcd con mochila i2c, un reloj rtc ds1307, dos sondas ds18b20, una placa de dos reles y un boton... el tip y los leds de luna aun no los he puesto ya que esta todo en una breadboard para dejarlo todo probado...
y ahora viene cuando la matan... ¿que narices hago y como para que se dispare el dimeo cuando yo quiero/necesito?
de igual forma si veis cosas que haya obviado o que no necesite.... osea... esto como si fuera vuestro!
un saludo y gracias de antemano!
os cuento como va:
pretendo controlar un acuario de 20 litros (dulce, esto es un ensayo para el marino) donde voy a monitorizar hora, temperatura del agua, temperatura de la pantalla, dimeo luz de luna (dos led guarros de 5mm con resistencias directos a una patilla pwm del arduino) y dimeo luz de dia (se supone que primero arranco la fuente y luego con un tip141 hago el dimeo...).
La pantalla es una 20x4 lcd con mochila i2c, un reloj rtc ds1307, dos sondas ds18b20, una placa de dos reles y un boton... el tip y los leds de luna aun no los he puesto ya que esta todo en una breadboard para dejarlo todo probado...
y ahora viene cuando la matan... ¿que narices hago y como para que se dispare el dimeo cuando yo quiero/necesito?
de igual forma si veis cosas que haya obviado o que no necesite.... osea... esto como si fuera vuestro!
Código:
#include <EEPROM.h>//incluyo un byte en la eeprom por seguridad, si se va la luz el arduino sabe que luz esta encendida.
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>
#define ONE_WIRE_BUS 12 //sondas al pin 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x3f,20,4);
boolean rele1status;//estado del rele que activa la fuente de los leds
byte tempsonda = 12;
float temp;
byte dim1 = 0;
byte dim2 = 0;
byte rele1 = 8;//pin rele fuente leds
byte rele2 = 9;//segundo rele (aun sin funcion)
byte boton = 7;
byte luzLcd = 11;
byte estadoBoton = 0;
byte dimeoPantalla = 6;
byte dimeoLuna = 5;
byte hora = 0;
byte minutos = 0;
byte segundos = 0;
int direccion = 1;
byte controlLuz = 0;
void setup() {
lcd.begin(20,4);
lcd.backlight();
Serial.begin(9600);
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
digitalWrite(rele1, HIGH);
digitalWrite(rele2, HIGH);
pinMode(tempsonda, INPUT);
rele1status = false;
pinMode(luzLcd, OUTPUT);
pinMode(boton, INPUT);
pinMode(dimeoPantalla, OUTPUT);
pinMode(dimeoLuna, OUTPUT);
}
void loop() {
tmElements_t tm;//contenedor de la hora
RTC.read(tm);//leemos la hora
estadoBoton = digitalRead(boton);//leemos el estado del boton
hora = (tm.Hour);
minutos = (tm.Minute);
segundos = (tm.Second);
if (estadoBoton == HIGH){//para no tener la pantalla siempre encendida vamos a hacer que cietros procesos y la luz de la pantalla solo se muestren cuando presionamos un boton.
lcd.init();//limpiamos la pantalla
for (int i=0; i<=255; i++)// encendemos la luz del lcd mediante pwm.
{
analogWrite(luzLcd,i);
delay(10);
}
lcd.print("Jacinto's Sluts Club");
delay(2000);
lcd.init();
for (int a=0; a<=15; a++)//tiempo que va a estar la pantalla encendida y mostrando info.
{
peluco();//mostramos la hora
luz();//indicamos si esta la luz de dia o la de luna
temperatura1();//mostramos la temperatura del agua
temperatura2();//mostramos la temperatura de la pantalla
}
for (int i=255; i>=0; i--) //apagamos la luz del lcd
{
analogWrite(luzLcd,i);
delay(10);
}
lcd.init();//limpiamos la pantalla
}else {
if ((hora, DEC) == 0){
if( (minutos, DEC) == 53){
EEPROM.write(direccion,1);
dimeoAmanecer();
}
}
if ((hora, DEC) == 0 && (minutos, DEC) == 55){
EEPROM.write(direccion,2);
dimeoAnochecer();
}
if((hora, DEC) == 0 && (minutos, DEC) == 57){
EEPROM.write(direccion,3);
dimeoLunaInicio();
}
if((hora, DEC) == 0 && (minutos, DEC) == 59){
EEPROM.write(direccion,4);
dimeoLunaFin();
}
}
switch (EEPROM.read(direccion)){
case '1':
digitalWrite(dimeoPantalla, HIGH);
break;
case '2':
digitalWrite(dimeoPantalla, LOW);
digitalWrite(dimeoLuna, LOW);
break;
case '3':
digitalWrite(dimeoLuna, HIGH);
break;
case '4':
digitalWrite(dimeoPantalla, LOW);
digitalWrite(dimeoLuna, LOW);
break;
}
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
lcd.write('0');
}
lcd.print(number);
}
void temperatura1()
{
sensors.requestTemperatures();
delay(50);
temp = sensors.getTempCByIndex(0);
lcd.setCursor(0,2);
lcd.print("T.Agua:");
lcd.print(temp);
}
void temperatura2()
{
sensors.requestTemperatures();
delay(50);
temp = sensors.getTempCByIndex(1);
lcd.setCursor(0,3);
lcd.print("T. Pantalla:");
lcd.print(temp);
}
void peluco(){
tmElements_t tm;
if (RTC.read(tm)) {
lcd.setCursor(0,0);
print2digits(tm.Hour);
lcd.write(':');
print2digits(tm.Minute);
lcd.write(':');
print2digits(tm.Second);
lcd.write(' ');
lcd.print(tm.Day);
lcd.write('/');
lcd.print(tm.Month);
lcd.write('/');
lcd.print(tmYearToCalendar(tm.Year));
} else {
if (RTC.chipPresent()) {
lcd.setCursor(0,1);
lcd.println("Kawendioleeeeeeeee!!!");
lcd.println("pon el pijo este en hora copon! que se le ha jodio la pila!");
} else {
lcd.println("Acho, esto no furrula....");
}
}
}
void luz(){
if (rele1status == true){
lcd.setCursor(0,1);
lcd.print("Luz diurna activa");
}else{
lcd.setCursor(0,1);
lcd.print("Luz noche activa");
}
}
void dimeoAmanecer(){//encendemos la luz dia
digitalWrite(rele1, LOW);//activamos el rele que enciende la fuente de los led de dia (en mi caso llevandolo a un valor bajo)
rele1status = true;//para la comprobacion del mensaje que se imprimira en pantalla al pulsar el boton
for (int i=0; i<=255; i++)
{
analogWrite(dimeoPantalla,i);
delay(100);
}
}
void dimeoAnochecer(){//apagamos la luz dia, primero dimeo y luego la fuente de forma fisica
for (int i=255; i>=0; i--)
{
analogWrite(dimeoPantalla,i);
delay(100);
}
digitalWrite(rele1, HIGH);//primero hacemos un dimeo hasta 0 y luego apagamos la fuente de los leds de dia (es una tonteria que trabaje en vacio)
rele1status = false;//para la comprobacion del mensaje que se imprimira en pantalla al pulsar el boton
}
void dimeoLunaInicio(){//encendemos la luz de luna
for (int i=0; i<=255; i++)
{
analogWrite(dimeoLuna,i);
delay(100);
}
}
void dimeoLunaFin(){//apagamos la luz de luna
for (int i=255; i>=0; i--)
{
analogWrite(dimeoLuna,i);
delay(100);
}
}
un saludo y gracias de antemano!