Lámpara LED + Meanwell LDD-H + arduino

9 Dic 2009
1.031
españa (jaen) ubeda
Provincia
jaen
Ostias, que pasada, yo no llego a eso ni de coña. soy un zoquete para la electronica, yo si pongo una foto es todo una maraña de cables.
os pongo mi sketch provisional para la pantalla. tiene un reloj , pantalla, bluetooth, y el dimmeo.
lo que queria mostar con este esketch es la funcion de luces que calcula el momento exacto de dimmeo segun la hora actual asi si se va el arduino continua siempre en el momento exacto.
el bluetooth es para consultar y modificar
¿como guardas datos en la memoria del reloj?
un saludo
//////////// lcd ///////////
////// lcd
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
////////////////////
/////// blue ///////
///////////////////
#include <SoftwareSerial.h>
//SoftwareSerial bt(10, 11); // RX del bt al TX del nano que es 11
SoftwareSerial bt(53, 52); // bTX>53rx esto es para el mega
///////////////////////
//////// luces ////////
///////////////////////
long segActual=0;
long on= (13*60)+30;// encendemos a las 13h y 30 minutos que despues multiplicamos por segundos
long off=(23*60)+45;// apagamos a 23h y 45min
int Tdimmeo=30*60;// es el tiempo en segundo que tarda el dimmeo de 0% a 100% 30 minutos
int dimmer=0;// primer canal
int dimmerb=0;// segundo canal
int retraso=15*60;// segundo canal entra 15 minutos mas tarde
int Pazul=8;
int Pblanco=9;
void luces(){
// AZUL //
segActual=segActu(); // leemos el segundo acutual de dia
if (segActual>=on&&segActual<=off-Tdimmeo){// tramo que enciende y apaga
//enciende
/*explico el map (regla de tres)
* segundo actual, "on" es el segundo en el que empezamos(0%) y "on+Tdimmeo" es cuando termina (100%)
* ejemplo: si el segundo actual es el 23% del tiempo que hemos dimmeado , el valor devuelto es el 23% del dimmer(de 0 a 255)
* con esto conseguimos que si se reinicia el arduino a medio dimmeo va a continuar por el porcentaje exacto segun el segundo del dia.
*/
dimmer=map(segActual,on,on+Tdimmeo,0,255);// calculamos el dimmer exacto segun el segundo que estamos
if (dimmer>=255) dimmer=255;
}else if (segActual>off-Tdimmeo && segActual<=86400){
//apaga
dimmer=map(segActual,off-Tdimmeo,off,255,0);
if (dimmer<=0) dimmer=0;
}else{
dimmer=0;
}
// BLANCO //
if (segActual>=on+retraso&&segActual<=off-Tdimmeo-retraso){
//enciende
dimmerb=map(segActual,on+retraso,on+Tdimmeo+retraso,0,255);
if (dimmerb>=255) dimmerb=255;
}else if (segActual>off-Tdimmeo-retraso && segActual<=86400){
//apaga
dimmerb=map(segActual,off-Tdimmeo-retraso,off-retraso,255,0);
if (dimmerb<=0) dimmerb=0;
}else{
dimmerb=0;
}
analogWrite(Pazul,dimmer);
analogWrite(Pblanco,dimmerb);
}
///////////////////
///// blue ////////
///////////////////
void leerb(){
String a;
String variable="";
String valor="";
float temp1=0.0;
float temp2=0.0;
int temp=0;
while(bt.available()) {
a= bt.readString();// read the incoming data as string
variable =a.substring( 0,a.indexOf (".") );
valor =a.substring( a.indexOf (".")+1,a.length() );
}
if (variable!=""){
bt.println(a);
//bt.println(variable);
//bt.println(valor);
///////////// humedad suelo//////////////////////
if (variable=="fecha"){
Serial.println("fecha");
RTC.adjust(DateTime(
a.substring( a.indexOf ( "/" )+4 ,a.length()).toInt(),//ano
a.substring( a.indexOf ( "/" )+1 ,a.indexOf ( "/" )+3).toInt(),//mes
a.substring( a.indexOf ( " " )+1 ,a.indexOf ( "/" )+1).toInt(),//dia
a.substring( a.indexOf ( "=" )+1 ,a.indexOf ( ":" )+1).toInt(),//hora
a.substring( a.indexOf ( ":" )+1 ,a.indexOf ( ":" )+3).toInt(),//minu
a.substring( a.indexOf ( ":" )+4 ,a.indexOf ( ":" )+7).toInt()//seg
));

/* Serial.println (valor.substring( valor.indexOf ( "/" )+4 ,valor.length()).toInt());//año
Serial.println (valor.substring( valor.indexOf ( "/" )+1 ,valor.indexOf ( "/" )+3).toInt());//mes
Serial.println (valor.substring( valor.indexOf ( " " )+1 ,valor.indexOf ( "/" )+1).toInt());//dia
Serial.println (valor.substring( 0 ,valor.indexOf ( ":" )+1).toInt());//hora
Serial.println (valor.substring( valor.indexOf ( ":" )+1 ,valor.indexOf ( ":" )+3).toInt());//minu
Serial.println (valor.substring( valor.indexOf ( ":" )+4 ,valor.indexOf ( ":" )+7).toInt());//seg
*/
// 2016,12,30,12,59,59
}else if (variable=="enciende"){
Serial.println("enciende");
temp= valor.substring(0,valor.indexOf ( ":" )).toInt();//HORA
on=temp*60;
Serial.println(on);
temp= valor.substring( valor.indexOf ( ":" )+1 ,valor.length()).toInt();//minuto
on=on+temp;
on=on*60;
Serial.println(on);
bt.println("enciende");
///////////// hora //////////
}else if (variable=="apaga"){
temp= valor.substring(0,valor.indexOf ( ":" )).toInt();//HORA
off=temp*60;
temp= valor.substring( valor.indexOf ( ":" )+1 ,valor.length()).toInt();//minuto
off=off+temp;
off=off*60;
bt.println("apaga");
///////////// hora //////////
}else if (variable=="info"){
// leer_hora();
bt.print("hora:");bt.print(hora,DEC);bt.print(":");bt.print(minuto,DEC);bt.print(":");bt.println(segundo,DEC);
bt.print("Temperature: ");
bt.print(RTC.getTemperature());
bt.println(" C");
Serial.println(dimmerb);
Serial.println(dimmer);
Serial.println(segActual);
bt.print("blancas ");bt.print( map(dimmerb,0,255,0,100) );bt.println("%");
bt.print("azules ");bt.print( map(dimmer,0,255,0,100) );bt.println("%");

bt.println(variable);
}else if (variable=="temp"){
temp1= a.substring( a.indexOf ( "." )+1 ,a.length()).toFloat();

bt.print("temperatura ");bt.println(temp1-3);
}else if (variable=="retraso"){
temp1= a.substring( a.indexOf ( "." )+1 ,a.length()).toFloat();

bt.print("temperatura ");bt.println(temp1-3);
}else if (variable=="dimmer"){
temp1= a.substring( a.indexOf ( "." )+1 ,a.length()).toFloat();

bt.print("temperatura ");bt.println(temp1-3);
}else if (variable=="maximo"){
temp1= a.substring( a.indexOf ( "." )+1 ,a.length()).toFloat();

bt.print("temperatura ");bt.println(temp1-3);
}else {
//no hay nada}
bt.println("nada");
}
}
}
/////////////////////////////
/////// RELOJ !!!NO¡¡¡ TINY //////////
/////////////////////////////
#include "RTClib.h"
//RTC_DS1307 RTC;
RTC_DS3231 RTC;
char diasemana[7][12] = {"Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"};
int segundo, minuto, hora, diaSemana, dia, mes, ano;
int minuto_cambia=61;
int horaH=0;
unsigned long time;
int retardo=3000;
int mt(int horad,int minuto){
return (horad*60)+minuto;
}
/******************************
***** FUNCIONES DEL RELOJ *****
******************************/
/***** MODIFICA LA HORA ******/
void modificar_hora(){
RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora (Comentar una vez establecida la hora)
//año , month, day, hour, min, sec
// RTC.adjust(DateTime(2016,12,30,12,59,59)); // Establece la fecha y hora (Comentar una vez establecida la hora)
}
void leer_hora(){
// Serial.println("entra");
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
dia=now.day();
mes=now.month();
ano=now.year();
hora=now.hour();
minuto=now.minute();
segundo=now.second();
diaSemana= now.dayOfTheWeek();
horaH=mt(hora,minuto);
//Serial.print(hora,DEC);Serial.print(":");Serial.print(minuto,DEC);Serial.print(":");Serial.println(segundo,DEC);
//Serial.print("Temperature: ");
// Serial.print(RTC.getTemperature());
// Serial.println(" C");
}
///// actuales segundos //////
long segActu(){
leer_hora();
segActual=hora*60;
segActual=segActual+minuto;
segActual=segActual*60;
segActual=segActual+segundo;
return segActual; // devolvemos el segundo que en que estamos en el dia(24h)
}
////// SETUP /////
void setup()
{
//// lcd ////
lcd.init();
// lcd.createChar (0, Grado);
lcd.backlight();
// bluetooth
bt.begin(9600);
bt.write("encedido bt");
pinMode(A3,OUTPUT);// bateria del reloj
digitalWrite(A3,HIGH);
pinMode(Pazul,OUTPUT);
pinMode(Pblanco,OUTPUT);
on=on*60;
off=off*60;
if (! RTC.begin()) {Serial.println("No hay reloj");}
/// serial /////
Serial.begin(9600);
Serial.println("comienza...");
Serial.print("enciende ");
Serial.println(on);
Serial.print("apaga ");
Serial.println(off);
// modificar_hora();
// RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora (Comentar una vez establecida la hora)
}
void loop(){
luces();// dimeamos
leerb();// leemos el bluetooth
linea1();// linea 1 del lcd y columna 0
lcd.print("bl ");lcd.print( map(dimmerb,0,255,0,100) );lcd.print("% ");// convertimos el 255 de dim en % y mostramos en pantalla
lcd.print("az ");lcd.print( map(dimmer,0,255,0,100) );lcd.print("%"); //idem
linea2();
lcd.print(hora,DEC);lcd.print(":");lcd.print(minuto,DEC);lcd.print(":");lcd.println(segundo,DEC);
//lcd.print(dia,DEC);lcd.print("/");lcd.print(mes,DEC);lcd.print("/");lcd.println(ano,DEC);
}
///////////// VARIOS //////////////
void linea1(){
lcd.setCursor(0,0);
}
void linea2(){
lcd.setCursor(0,1);
}
void linea3(){
lcd.setCursor(0,2);
}
void linea4(){
lcd.setCursor(0,3);
}
 
Última edición:
Arriba