Indicador de fase lunar reloj analógico de Steampunk (6 / 11 paso)

Paso 6: Hablar con el reloj de tiempo Real (RTC)

Lo que quieres hacer es conectar el chronodot a una fuente de alimentación adecuada y el Arduino, subir un fragmento de código para el arduino y conseguir hablar con el DS3231. Hay un esquema a continuación que debe conseguir enganchada para arriba inmediatamente. No tienes que conectar la clavija de onda cuadrada ahora para este código funcione. Que utilizaremos más adelante para obtener los indicadores marcando.
El circuito y el código siguiente inmediatamente trabajaban para mí.

Aquí está el enlace a la hoja de datos del DS3231:
http://datasheets.Maxim-IC.com/en/DS/DS3231.pdf

Encontré este pequeño programa (sketch en Arduinish) en la web de thew y han unido para usted. Lee la información de la RTC y escupe en el monitor serie. (Mucho gracias al autor; gfbarros). Aquí está el link original:
http://code.Google.com/p/GFB/Source/Browse/Arduino/DS3231/DS3231.PDE

Si todo va bien, debería ver salida en el monitor serial como el de la foto de abajo.

DS3231 Fragmento de código

#include < Wire.h >

#define DS3231_I2C_ADDRESS 104

byte segundos, minutos, horas, día, fecha, mes, año;
día de la semana Char [4];

byte tMSB, tLSB;
Float temp3231;

void setup()
{
Wire.Begin();
Serial.Begin(9600);
registro de control conjunto a onda cuadrada de salida en el pin 3 en 1Hz
Wire.beginTransmission(DS3231_I2C_ADDRESS); 104 es DS3231 dispositivo dirección
Wire.Send(0x0E); //
Wire.Send(B00000000);
Wire.endTransmission();
}

void loop()
{

watchConsole();


get3231Date();

Serial.Print(weekDay); Serial.Print (","); Serial.Print (mes, DEC); Serial.Print("/"); Serial.Print (fecha, DEC); Serial.Print("/"); Serial.Print (año, DEC); Serial.Print ("-");
Serial.Print (horas, DEC); Serial.Print(":"); Serial.Print (minutos, DEC); Serial.Print(":"); Serial.Print (segundos, DEC);

Serial.Print ("temperatura:"); Serial.println(get3231Temp());

Delay(1000);
}

Convierte a números decimales normales a binario codificado decimal
decToBcd(byte val) bytes
{
regresar ((val/10 * 16) + (val % 10));
}

void watchConsole()
{
Si (Serial.available()) {/ / buscar carbón en proceso de cola de la serie y si encuentra
Si (Serial.read() == 84) {//If comando = "T" fijar fecha
set3231Date();
get3231Date();
Serial.println("");
}
}
}

void set3231Date()
{
T(SEC)(min)(hour)(dayOfWeek)(dayOfMonth)(month)(Year)
T(00-59)(00-59)(00-23)(1-7)(01-31)(01-12)(00-99)
Ejemplo: 02 de febrero de 09 @ 19:57:11 para el 3 º día de la semana -> T1157193020209

segundos = (byte) ((Serial.read()-48) * 10 + (Serial.read() - 48)); Uso de las matemáticas de fundición y ascii de tipo (byte) para lograr el resultado.
minutos = (byte) ((Serial.read()-48) * 10 + (Serial.read() - 48));
horas = (byte) ((Serial.read()-48) * 10 + (Serial.read() - 48));
día = (byte) (Serial.read() - 48);
fecha = (byte) ((Serial.read()-48) * 10 + (Serial.read() - 48));
mes = (byte) ((Serial.read()-48) * 10 + (Serial.read() - 48));
año = (byte) ((Serial.read()-48) * 10 + (Serial.read() - 48));
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.Send(0x00);
Wire.Send(decToBcd(seconds));
Wire.Send(decToBcd(minutes));
Wire.Send(decToBcd(hours));
Wire.Send(decToBcd(Day));
Wire.Send(decToBcd(Date));
Wire.Send(decToBcd(month));
Wire.Send(decToBcd(Year));
Wire.endTransmission();
}

void get3231Date()
{
enviar solicitud para recibir los datos a partir de registro 0
Wire.beginTransmission(DS3231_I2C_ADDRESS); 104 es DS3231 dispositivo dirección
Wire.Send(0x00); desde el registro 0
Wire.endTransmission();
Wire.requestFrom (DS3231_I2C_ADDRESS, 7); solicitar siete bytes

{if(Wire.Available())}
segundos = Wire.receive(); segundos
minutos = Wire.receive(); obtener minutos
horas = Wire.receive();   Haz horas
día = Wire.receive();
fecha = Wire.receive();
mes = Wire.receive(); mes temperatura
año = Wire.receive();

segundos = (((seconds & B11110000) >> 4) * 10 + (segundos / B00001111)); convertir de BCD a decimal
minutos = (((minutes & B11110000) >> 4) * 10 + (minutos / B00001111)); convertir de BCD a decimal
horas = (((hours & B00110000) >> 4) * 10 + (horas / B00001111)); convertir de BCD a decimal (asumir el modo de 24 horas)
día = (día & B00000111); 1-7
fecha = (((date & B00110000) >> 4) * 10 + (fecha & B00001111)); 1-31
mes = (((month & B00010000) >> 4) * 10 + (mes & B00001111)); msb7 es desbordamiento del siglo
año = (((year & B11110000) >> 4) * 10 + (año & B00001111));
}
Else {}
Oh noes, no hay datos!
}

interruptor (día) {}
caso 1:
strcpy (día de la semana, "Sol");
rotura;
caso 2:
strcpy (día de la semana, "Lunes");
rotura;
caso 3:
strcpy (día de la semana, "Martes");
rotura;
caso 4:
strcpy (día de la semana, "Mie");
rotura;
caso 5:
strcpy (día de la semana, "Jue");
rotura;
caso 6:
strcpy (día de la semana, "Viernes");
rotura;
caso 7:
strcpy (día de la semana, "se sentó");
rotura;
}
}

flotador get3231Temp()
{
registros de temperatura (11h - 12h) Haz actualizan automáticamente cada 64s
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.Send(0x11);
Wire.endTransmission();
Wire.requestFrom (DS3231_I2C_ADDRESS, 2);

{if(Wire.Available())}
tMSB = Wire.receive(); 2 complementar la porción int
tLSB = Wire.receive(); parte de la fracción

temp3231 = (tMSB & B01111111); de 2 matemáticas en Tmsb
temp3231 += ((tLSB >> 6) * 0.25); atención sólo de bits 7 y 8
}
Else {}
Oh noes, no hay datos!
}

volver temp3231;
}

Artículos Relacionados

Steampunk analógico indicador de fase lunar reloj

Steampunk analógico indicador de fase lunar reloj

Compruebe hacia fuera la foto instructable para este reloj. Incluir un corto vídeo y detalles de construcción, componentes y software. ¡ Saludos!Un reloj que construyó para una amiga en el estilo steampunk; hecho con una vieja caja de roble teléfono
Reloj analógico

Reloj analógico

Este proyecto es un puré de mi reloj favorito dos Instructables, un reloj y reloj literario. Quería ver si podía hacer una versión analógica de un reloj (sin la electrónica de lujo) y me pareció apropiado que el reloj se casa en un libro. También tie
Reutiliza un disco duro y conviértelo en reloj analógico.

Reutiliza un disco duro y conviértelo en reloj analógico.

En ocasiones tenemos discos duros de ordenadores portátiles dañados y no sabemos hacer con ellos, por lo general y como lo marca la obsolencia parte Terminans en la basura. Por lo tanto decidí crear ONU lejor analógico.Paso 1: Material necesario: -Va
Hacer una digital "Miau" de reloj analógico

Hacer una digital "Miau" de reloj analógico

¿Es el reloj analógico no haciendo suficiente? ¿Quieres hacer cosas digitales con un reloj analógico?Este tutorial le mostrará cómo hacer un reloj de Kit Cat jugar un clip de sonido de "Miau", a intervalos de tiempo exactos, usando la Atmega 328
DIY - reloj analógico

DIY - reloj analógico

Ahora usted puede hacer el reloj de pared visible 24 horas al día.
Reloj analógico para el LCD gráfico

Reloj analógico para el LCD gráfico

escribir un código para un reloj de analoge puede parecer un poco de una tarea de enormes proporciones. Especialmente los cálculos de las posiciones de las manos, pero no es realmente tan difícil en absoluto.En este instructable voy a hablar un poco
Hablando de resplandor en el oscuro 3D analógico impreso reloj

Hablando de resplandor en el oscuro 3D analógico impreso reloj

El reloj mostrará la hora analógica de 4 metros. He visto este tipo de relojes en varias encarnaciones, pero nunca vi un reloj analógico en este formato que hablaba. Este reloj anuncia la hora a intervalos de media hora y juega un mensaje cada vez qu
Reloj de alcance: sensor analógico reloj y temperatura en un osciloscopio

Reloj de alcance: sensor analógico reloj y temperatura en un osciloscopio

Scopeclock es un equipo fácil de usar para hacer más útil tu osciloscopio analógico capaz de X-Y. Usando este simple utilizar hardware que puede convertir tu osciloscopio analógico en un reloj de alcance. Este proyecto era yo y mi amigo kshitij gupta
Vúmetro analógico y el reloj (Arduino Powered)

Vúmetro analógico y el reloj (Arduino Powered)

este proyecto trae el viejo tiempo Analog VU Meter, con la funcionalidad añadida de un reloj de aspecto aseado! Cuando apagas tu música los metros swing automáticamente en modo de reloj. Detrás de todo está el Arduino popular y fácil de usar.Esta es
Reloj fase lunar

Reloj fase lunar

En este Instructable que construyendo una dinámica lámpara lunar con el Raspberry Pi. Con su propio reloj lunar siempre sabrás la actual fase de la luna, no importa el tiempo!Paso 1: Historia y teoría¿Astrónomo en ciernes? ¿Recientemente mordido por
Reloj digital y analógico - Arduino + PaperCraft

Reloj digital y analógico - Arduino + PaperCraft

en este instructable nos va ser recreando un reloj inspirado en el diseño original de Alvin Aronson. Primera vez que vi este reloj que me ha impresionado por cómo limpia una elegante el diseño fue que inmediatamente quise recrear este efecto.Diseño o
Reloj binario analógico

Reloj binario analógico

he visto muchos de reloj binario de instructables, y un día yo estaba tratando de crear un reloj original basado en esta idea.Así, cuando mi hermano y yo fuimos averiguar nuestros algunas ecuaciones originales, él me dijo "¿por qué no hacerlo en bina
Binario / analógico reloj

Binario / analógico reloj

me inspiré por el reloj digital / analógico para hacer mi propio reloj especial como mi segundo instructable. Explorar la internet y me encontré que relojes servo son raras y binarios son comunes. Así que decidí combinar los dos y esto es lo que hice
Hardware analógico universal Testbench

Hardware analógico universal Testbench

una ayuda a la ENSE6ANZA $35 de electrónica básica y un inestimable disposición EXPERIMENTAL para el aficionado de la electrónica.Enseñanza básica analógica y electrónica Digital a nivel de licenciatura consiste en clases teóricas con las manos-en-en