Paso 2: Añadir algunos salida - Display de 7 segmentos
Ver tiempo desactiva en la consola serie es cool, pero bueno, ya tienes un reloj digital exacta abajo en la esquina de la pantalla del ordenador. Necesitamos algunas reales de salida, así que voy a agregar un display de 7 segmentos. Adafruit y SparkFun tienen un número de opciones de visualización diferentes, pero voy a usar I2C de Adafruit uno (https://www.adafruit.com/products/881).
La pantalla y el módulo RTC (paso 5) tienen bibliotecas de software que deben instalarse para darnos la funcionalidad programarlos fácilmente. Bibliotecas Resumen todo el código de bajo nivel del hardware por lo que sólo podemos centramos en la tarea.
Eventualmente van a necesitar tres bibliotecas, así que vamos a instalar todos ellos ahora. Comience con las instrucciones de la biblioteca de exhibición en https://learn.adafruit.com/adafruit-led-backpack/0... e instalar las bibliotecas de:
- https://github.com/Adafruit/Adafruit-LED-Backpack-...
- https://github.com/Adafruit/Adafruit-GFX-Library
También, siguiendo las instrucciones de instalación de https://learn.adafruit.com/ds1307-real-time-clock-... la biblioteca de:
Conectar la pantalla por las instrucciones y el diagrama y prueba con el ejemplo de la biblioteca "sevenseg". Una vez que estés satisfecho está funcionando, estamos listos para algún código de reloj:
#include "Wire.h" <br> #include "RTClib.h" #include "Adafruit_LEDBackpack.h" #include "Adafruit_GFX.h" Adafruit_7segment matrix = Adafruit_7segment(); // time variables long lastMillis; int hours = 0; int minutes = 0; int seconds = 0; void setup() { Serial.begin(9600); // Open channel to serial console Serial.println("Arduino Clock Step 2"); matrix.begin(0x70); // Start display } void loop() { long curMillis = millis(); // get current counter in milliseconds if (curMillis > (lastMillis + 1000)){ // If one second has passed: lastMillis = lastMillis + 1000; seconds = seconds + 1; // increment seconds if (seconds > 59){ seconds = 0; minutes = minutes + 1; // increment minutes if (minutes > 59){ minutes = 0; hours = hours + 1; // increment hours if (hours > 23){ hours = 0; } } } // Display time on serial console if (hours < 10){ Serial.print(" "); // pad hours } Serial.print(hours); Serial.print(":"); if (minutes < 10){ Serial.print("0"); // pad minutes} } Serial.print(minutes); Serial.print(":"); if (seconds < 10){ Serial.print("0"); // pad seconds } Serial.println(seconds); // Break time into individual digits for display int h1 = hours / 10; int h2 = hours - h1 * 10; int m1 = minutes / 10; int m2 = minutes - m1 * 10; int s1 = seconds / 10; int s2 = seconds - s1 * 10; // Send data to display if (h1){ matrix.writeDigitNum(0, h1, false); } else{ matrix.writeDigitRaw(0, 0); // blank instead of zero } matrix.writeDigitNum(1, h2, false); matrix.drawColon(seconds % 2); // on if second is odd matrix.writeDigitNum(3, m1, false); matrix.writeDigitNum(4, m2, false); matrix.writeDisplay(); } }
Dependiendo de su hora de salida, sólo puede ver "0 00". Bastante aburrido. Si quieres ver algún movimiento número, intentar sustituir en los dígitos de los segundos (s1, s2) para los dígitos de minutos (m1, m2) para dígitos # 3 y 4.
También, la mayoría relojes digitales dan la indicación de segundos pasando por los dos puntos entre horas y minutos que destella. Usted puede hacerlo usando un modulo de prueba en segundos a flash en si es impar, apagado si es incluso. Trate de añadir:
matrix.drawColon(seconds % 2);<br>
Con la biblioteca RTC (incluso sin el módulo real instalado), podemos utilizar algunos trucos para obtener la hora el bosquejo fue guardado y ajuste la hora.
// Get upload date time<br> DateTime uploadDateTime = DateTime(__DATE__, __TIME__); int hours = uploadDateTime.hour(); int minutes = uploadDateTime.minute(); int seconds = uploadDateTime.second();
Ahora debe tener una pantalla decente de tiempo actual hasta que reinicia o encender el tablero. Sólo volver a subir el boceto para definir la hora otra vez!
Tiempo para explorar:
- ¿Cómo harías el reloj correr más rápido o más lento?
- ¿Puede hacer correr hacia atrás?
- ¿Cómo podría mostrar AM/PM en lugar de 24 horas?