Taller de Arduino

  • Iniciador del tema Iniciador del tema jmcadsl
  • Fecha de inicio Fecha de inicio
Estado
Cerrado para nuevas respuestas.
hola utiliza este
#include <Wire.h> //reloj
#define DS1307_I2C_ADDRESS 0x68// reloj
#include <LiquidCrystal.h>
////////////////////////////////////////////// PINES ////////////////////////
//LiquidCrystal lcd(7, 6, 5, 4, 3, 2);// YO LO TENGO ASI DESDE EL 2 HASTA EL 7 PARA LCD Y DEL 8 AL 13 LIBRES PARA CONEXIONES
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Convierte números normales decimales a BCD (binario decimal codificado)
byte decToBcd(byte val){return ( (val/10*16) + (val%10) );}
// Convierte BCD (binario decimal codificado) a números normales decimales
byte bcdToDec(byte val){return ( (val/16*10) + (val%16) );}
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

void setup()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
Wire.begin();
lcd.begin(16, 2);

// si desea poner en hora, active esta parte y luego vuelva a quitarla
second = 0;
minute = 3;
hour = 19;
dayOfWeek = 6;
dayOfMonth = 8;
month = 1;
year = 11;
setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);

}
void loop()
{
//lee el reloj
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
imphora();
delay(500);
}//////////////////// fin de loop

/////////////////////// IMPRIME HORA /////////////////////////
void imphora(){
lcd.setCursor(0, 0);
if (hour < 10) lcd.print("0");
lcd.print(hour, DEC);
lcd.print(":");
if (minute < 10) lcd.print("0");
lcd.print(minute, DEC);
lcd.print(":");
if (second < 10) lcd.print("0");
lcd.print(second, DEC);
switch (dayOfWeek)
{
case 1:
lcd.print(" Lunes "); break;
case 2:
lcd.print(" Martes "); break;
case 3:
lcd.print(" Miercol"); break;
case 4:
lcd.print(" Jueves "); break;
case 5:
lcd.print(" Viernes"); break;
case 6:
lcd.print(" Sabado "); break;
case 7:
lcd.print(" Domingo"); break;
}
lcd.setCursor(0, 1);
lcd.print(" ");
if (dayOfMonth < 10) lcd.print("0");
lcd.print(dayOfMonth, DEC);
lcd.print("/");
if (month < 10) lcd.print("0");
lcd.print(month, DEC);
lcd.print("/");
lcd.print("20");
if (year < 10) lcd.print("0");
lcd.print(year, DEC);
lcd.print(" ");}

////////////////////////////////////////////////// MODIFICA LA HORA /////////////////////////
void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.send(decToBcd(second)); // 0 a bit 7 inicia el reloj
Wire.send(decToBcd(minute));
Wire.send(decToBcd(hour)); // Si usted quiere 12 hora am/pm usted tiene que poner el
// bit 6 (tambien tiene que cambiar readDateDs1307)

Wire.send(decToBcd(dayOfWeek));
Wire.send(decToBcd(dayOfMonth));
Wire.send(decToBcd(month));
Wire.send(decToBcd(year));
Wire.endTransmission();
}

///////////////////////////////////////////// LEE LA HORA /////////////////////
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Resetea el registro puntero
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

// Alguno de estos necesitan enmascarar porque ciertos bits son bits de control

*second = bcdToDec(Wire.receive() & 0x7f);
*minute = bcdToDec(Wire.receive());
*hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
*dayOfWeek = bcdToDec(Wire.receive());
*dayOfMonth = bcdToDec(Wire.receive());
*month = bcdToDec(Wire.receive());
*year = bcdToDec(Wire.receive());
}
 
hola
lo unico que he echo es poner los void al final en vez del al principio. es cuestio de gustos. para organizarme mejor.
osea la estrucctura seria.
1 definicion de variables y demas.
2void setup
3void loop
4 todos los demas void.
 
Karagos, no consiguo ponerlo en hora, he probado tu codigo, cambiando los pines, y nada.

Hay alguna manera de probar el reloj, a ver si es que el que falla es el reloj y no el codigo.
 
Se me olvidaba lo tengo montado encima de este , el cual me facilita las conexiones de la pantalla y demas cosas que quiera conectar.
 
hola tu arduino es mega o normal por que cambia la manera de conectarlo.
para ponerlo en hora es solo modificar el codigo donde se refiere a ello. y una vez echo esto volver a poner en el principio del parrafo /*
y en el final antes de } poner */ para saber si lo has echo bien se tiene que poner en gris(en gris te indica que ese trozo de codigo lo obia.)
 
Karagos el arduino es .

Y en lo referente al codigo lo tengo puesto asi:

/*
second = 00;
minute = 51;
hour = 20;
dayOfWeek = 7;
dayOfMonth = 18;
month = 5;
year = 11;
setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
*/
}

O seria de esta otra forma:

/*
second = 00;
minute = 51;
hour = 20;
dayOfWeek = 7;
dayOfMonth = 18;
month = 5;
year = 11;
*/
setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);

}
 
Si lo que quieres es ponerlo en hora los codigos que escribes estan mal, debes quitar los comentarios, este sería el correcto (si no e equivoco)
Código:
 second = 00;
 minute = 51;
 hour = 20;
 dayOfWeek = 7;
 dayOfMonth = 18;
 month = 5;
 year = 11;
 setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
 
 }

Una vez proramado debes encenderlo una vez y luego volver a ponerle los comentarios y programarlo otra vez para que no te este "poniendo en esa hora" el reloj cada vez que inicies arduino
Salu2
 
Bueno chicos despues de doscientasmil vueltas al medidor de ph por fin lo tengo funcionando correctamente. En la protoboard todo perfecto pero el problema vino cuando lo monté en el acuario con toda la cacharreria (reles pantalla y demás), fuera del agua en un vasito media correcto el problema venía cuando lo dejaba constante en el agua del acuario. Me daba lecturas erroneas del orden de hasta 4.00 Ph. me he pegado mas de un mes dandole vueltas hasta que al final he encontrado la manera de hacerlo funcionar perfectamente. Con la pantalla de leds los calentadores los motores el arduino y toda la electrónica se formaba una corriente inducida cambiante en el agua del acuario del orden de 0 a 300 milivoltios y claro se me volvia loco el medidor. Le he puesto un cable desde el agua y otro desde la pantalla de aluminio donde estan los leds a uno de los pines GND de el medidor( el que conecta con la masa de la sonda y desde aquí a la toma tierra de la regleta. De momento lleva dos dias y genial.
Comento por si alguien mas ha tenido problemas con el medidor de PH.

Por cierto la función between funciona de fabula muy útil.
 
Hola Amigos este es mi primer mensaje que escribo por aqui aunque sigo esto desde el principio. Bueno comentaros que al final me he animado y he empezado a comprar piezas para liarme con el acuario.
Tengo un pequeño problema que es el siguiente:
¿Cuando conecto mi pantalla a mi placa arduino no me muestra nada y no entiendo el porqué?.

Mira os detallo mis piezas:

1) Placa arduino UNO (SMD).
2) Pantalla LCD 16x2 serial OJOOOO pero con el microprocesador (ATmega328).

https://www.bricogeek.com/shop/pantallas-lcd-oled/375-kit-lcd-serial-16x2.html

3) Placa de Reloj RTC DS1307

https://www.bricogeek.com/shop/componentes/56-placa-reloj-rtc-ds1307.html

4) Sensores de temperatura DS18B20 One-wire.

https://www.bricogeek.com/shop/sensores/41-sensor-de-temperatura-ds18b20-one-wire.html



Ahora empiezan los problemas es que:

1º) El codigo que tenemos por referencia en la primera pagina de este blog me da un fallo SLCD.h not such file or directory?

¿A que se debe ese fallo cuando compilo el codigo?.

2º) Mi pantalla se enciende pero no me muestra nada, me imagino que será porque la codificacion del codigo no la recibe por no ser el microcontrolador que usais vosotros.

Porfavor intentar ayudarme.

Si fuese posible alguien que tenga lo mismo que yo seria tan amable de pasarme ese troza de codigo con el que muestra la hora y mide la temperatura porfavor? Lo NECESITO....

Agradeceros de ante mano vuestra ayuda.
 
Última edición:
Haber donde dije digo digo diego no? Jajaja

He solventado el problema de la libreria SLCD.h que pasa ahora me encuentro otro error que dice algo como
sketch.may31a.cpp: 44: error: DallasTemperature.h no such file or directory

AYUDARME porfavor
 
Hola javier mira si tienes metida la libreria DallasTemperature dentro de la carpeta de librerias de arduino.
Un saludo
 
¿En cuanto al montaje final?. ¿Cómo lo habéis finalizado?, me refiero a caja, regletas de enchufes, ¿tenés fotos?. Por otra parte, los mismo en cuanto a la impermeabilización de las sondas. Saludos.
 
Jmcadsl, ya se que primero tengo que ponerlo en hora y luego poner el asterisco y la barra, antes y despues de la zona del codigo para ponerlo en hora. Pero aun haciendolo asi, sigue apareciendo en pantalla todo ceros.
 
Jmcadsl, ya se que primero tengo que ponerlo en hora y luego poner el asterisco y la barra, antes y despues de la zona del codigo para ponerlo en hora. Pero aun haciendolo asi, sigue apareciendo en pantalla todo ceros.

Me ocurrio igual que a ti, el problema lo tenia en las conexiones, una de las soldaduras, no hacia contacto.
 
Pero el mio es igual que cogio Pepepotamo, y se pincha directamente a la placa, o en mi caso, a unas bornas de conexion rapida que cogi. El modulo del reloj solo enciende una luz roja, no se si tiene que encenderse algo mas. A ver si me contesta Pepepotamo, o si no me parece que tendre que cojerme otro reloj, y al precio que estan.
 
Hola,

pues me uno al mundo "arduinero", pero en un principio con un microproyecto chiquitito, básicamente quiero hacer una cosa y es efecto amanecer anochecer

Por ahora no tengo ni tiempo ni paciencia para algo mucho más serio, pero si me gusta y le cojo el royo, quien sabe.

El lenguaje me resulta bastante asequible, aunque mis tiempos de programador pasaron hace bastante. Lo que me da más respeto es el tema electrónico, soy un absoluto zote en esta materia, todavía me pregunto cómo no ha ardido aún mi pantalla de leds :D

Mi pantalla de leds está documentada en el foro y básicamente lo que interesa son las dos fuentes Meanwell dimmeables de 0-10v ¿sigue existiendo problemas con esto? (no es problema porque en breve tendre dimmeables de 0 a 5 pero queria utilizar en este proyecto las meanwell)


Lo que le estoy dando vueltas si realmente necesito un modulo horario, o utilizar el propio programador electrico que ya tengo en mi cuadro electrico (entre luz al arduino y empieza el proceso de amanecer, a las X horas empieza el proceso de anochecer. (el problema es si se va la luz que cuando volviese empezaria ooootra ve a amanecer) ¿qué opinais?

Gracias y un saludo


Por cierto, menudo ladrillo de post ¿no se podría hacer una subsección en el foro en vez de un post único?

Ediot para poner el modulo que permite microSD
 
Última edición:
Estado
Cerrado para nuevas respuestas.
Atrás
Arriba