Reloj de pulsera de matriz de puntos de Arduino DIY (8 / 13 paso)

Paso 8: Sketch de Arduino para Reloj Digital

Biblioteca digital en modo ' Timer 2 ' frecuencia de uso. Puede descargar biblioteca desde aquí.

 #include <FrequencyTimer2.h> #include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // Convert normal decimal numbers to binary coded decimal byte decToBcd(byte val) { return( (val/10*16) + (val%10) ); } // Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val) { return( (val/16*10) + (val%16) ); } byte second_unit, second_tens, minute_unit, minute_tens, hour_unit, hour_tens, date_unit, date_tens, month_unit, month_tens, year_unit, year_tens, year_remain; byte _second = 0, _minute = 10, _hour = 12, _day = 1, _date = 1, _month = 1, _year = 15; byte tMSB, tLSB; float temp3231; long lastPressTime; #define space { \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define slash { \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 1, 0, 0, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define A { \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define M { \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 1, 0, 1, 1, 0, 0}, \ {0, 1, 0, 1, 0, 1, 0, 0}, \ {0, 1, 0, 1, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define P { \ {0, 1, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define zero { \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 1, 1, 0, 0}, \ {0, 1, 0, 1, 0, 1, 0, 0}, \ {0, 1, 1, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define one { \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 1, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define two { \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 1, 0, 0, 0, 0, 0}, \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define three { \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define four { \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 1, 1, 0, 0, 0}, \ {0, 0, 1, 0, 1, 0, 0, 0}, \ {0, 1, 0, 0, 1, 0, 0, 0}, \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define five { \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 1, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define six { \ {0, 0, 0, 1, 1, 0, 0, 0}, \ {0, 0, 1, 0, 0, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 1, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define seven { \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 1, 0, 0, 0, 0, 0}, \ {0, 0, 1, 0, 0, 0, 0, 0}, \ {0, 0, 1, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define eight { \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define nine { \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 1, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 1, 1, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define colon { \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 1, 1, 0, 0, 0, 0}, \ {0, 0, 1, 1, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 1, 1, 0, 0, 0, 0}, \ {0, 0, 1, 1, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define DEGC { \ {1, 1, 0, 0, 1, 1, 1, 0}, \ {1, 1, 0, 1, 0, 0, 0, 1}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 1}, \ {0, 0, 0, 0, 1, 1, 1, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define T { \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define smallm { \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 1, 1, 0, 1, 0, 0, 0}, \ {0, 1, 0, 1, 0, 1, 0, 0}, \ {0, 1, 0, 1, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define smallp { \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 1, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } byte col = 0; byte leds[8][8]; byte rows[8] = {0, 3, 6, 12, 7, 14, 15, 4}; byte cols[8] = {8, 1, 10, 5, 17, 11, 16, 13}; const byte numPatterns = 14; byte patterns[numPatterns][8][8] = { zero, one, two, three, four, five, six, seven, eight, nine, colon, space, slash, DEGC }; int pattern = 0; void setup() { Wire.begin(); for (byte i = 3; i <= 17; i++) { if(i==9) continue; pinMode(i, OUTPUT); } pinMode(0, OUTPUT); pinMode(1, OUTPUT); // set up cols and rows for (byte i = 1; i <= 8; i++) { digitalWrite(rows[i - 1], LOW); } for (byte i = 1; i <= 8; i++) { digitalWrite(cols[i - 1], LOW); } clearLeds(); // Turn off toggling of pin 11 FrequencyTimer2::disable(); // Set refresh rate (interrupt timeout period) FrequencyTimer2::setPeriod(2000); // Set interrupt routine to be called FrequencyTimer2::setOnOverflow(display); setPattern(pattern); } void loop() { calculateDateTime(); digitalClock(); } void clearLeds() { // Clear display array for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { leds[i][j] = 0; } } } void setPattern(int pattern) { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { leds[i][j] = patterns[pattern][i][j]; } } } void slidePattern(int pattern, int del) { for (int l = 0; l < 8; l++) { for (int i = 0; i < 7; i++) { for (int j = 0; j < 8; j++) { leds[j][i] = leds[j][i+1]; } } for (int j = 0; j < 8; j++) { leds[j][7] = patterns[pattern][j][0 + l]; } delay(del); } } // Interrupt routine void display() { digitalWrite(cols[col], LOW); // Turn whole previous column off col++; //digitalWrite(rows[row], LOW); // Turn whole previous column off //row++; if (col == 8) { col = 0; } for (int row = 0; row < 8; row++) { if (leds[col][7 - row] == 1) { digitalWrite(rows[row], LOW); // Turn on this led } else { digitalWrite(rows[row], HIGH); // Turn off this led } } digitalWrite(cols[col], HIGH); // Turn whole column on at once (for equal lighting times) } void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year) { // sets time and date data to DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set next input to start at the seconds register Wire.write(decToBcd(second)); // set seconds Wire.write(decToBcd(minute)); // set minutes Wire.write(decToBcd(hour | 0x40)); // set hours Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday) Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31) Wire.write(decToBcd(month)); // set month Wire.write(decToBcd(year)); // set year (0 to 99) Wire.endTransmission(); } void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set DS3231 register pointer to 00h Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // request seven bytes of data from DS3231 starting from register 00h *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x1f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } void calculateDateTime(){ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); if(hour > 12){ hour = hour - 24; } second_unit = second % 10; second_tens = second / 10; minute_unit = minute % 10; minute_tens = minute / 10; hour_unit = hour % 10; hour_tens = hour / 10; date_unit = dayOfMonth % 10; date_tens = dayOfMonth / 10; month_unit = month % 10; month_tens = month / 10; year_unit = year % 10; year_tens = year / 10; } void digitalClock(){ FrequencyTimer2::setOnOverflow(display); slidePattern(hour_tens, 80); slidePattern(hour_unit, 80); slidePattern(10, 80); slidePattern(minute_tens, 80); slidePattern(minute_unit, 80); slidePattern(10, 80); slidePattern(second_tens, 80); slidePattern(second_unit, 80); //slidePattern(11, 80); slidePattern(11, 80); slidePattern(date_tens, 80); slidePattern(date_unit, 80); slidePattern(12, 80); slidePattern(month_tens, 80); slidePattern(month_unit, 80); slidePattern(12, 80); slidePattern(2, 80); slidePattern(0, 80); slidePattern(year_tens, 80); slidePattern(year_unit, 80); slidePattern(11, 80); int tempC = get3231Temp(); int tempC_unit = tempC % 10; int tempC_tens = tempC / 10; slidePattern(tempC_tens, 80); slidePattern(tempC_unit, 80); slidePattern(13, 80); slidePattern(11, 80); slidePattern(11, 80); } int get3231Temp() { //temp registers (11h-12h) get updated automatically every 64s Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0x11); Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 2); if(Wire.available()) { tMSB = Wire.read(); //2's complement int portion tLSB = Wire.read(); //fraction portion temp3231 = (tMSB & B01111111); //do 2's math on Tmsb } else { //oh noes, no data! } return temp3231; } 

Artículos Relacionados

Temperatura ambiente en pantalla de matriz de puntos con Arduino y LM35

Temperatura ambiente en pantalla de matriz de puntos con Arduino y LM35

¡ Hola allí!Este es mi primer instructivo, y te voy a mostrar cómo puede interactuar un sensor de temperatura y una pantalla de matriz de puntos con arduino en tiempo real.He adjuntado el sketch de arduino, que es un poco grande a simple vista, pero
Sencillo Monitor de matriz de puntos de Arduino

Sencillo Monitor de matriz de puntos de Arduino

hoy en día hay muchas pantallas de matriz de puntos sobre tiendas o este tipo de lugares.Matriz de puntos tiene una idea simple, para hacer y mostrar con puntos LED o lámpara.En esta guía quiero mostrar cómo hacer un principiante y matriz de punto si
Bluetooth pantalla de matriz de punto con Arduino

Bluetooth pantalla de matriz de punto con Arduino

Si tienes un smartphone y un módulo Bluetooth. Puede ser realmente creativo con tu Arduino. Aquí hemos construido una estructura de pantalla de matriz de puntos controlada por un Arduino. Puede dibujar los patrones en su teléfono inteligente y se mos
Cuerpo DIY Reloj Digital de matriz de puntos con la instalación del Cable Canal U

Cuerpo DIY Reloj Digital de matriz de puntos con la instalación del Cable Canal U

Este proyecto es hacer cuerpo mi reloj de matriz de puntos en mi registro en esta ¿Paso 1: Lo que usted necesita? Usted apenas necesita le canal al panel de instalación, utilice la taza no canal U.Paso 2: Cortar la tapa del Canal U Use la sierra para
ChronosMEGA; un reloj de pulsera

ChronosMEGA; un reloj de pulsera

Siempre he amado los relojes; no sólo son estéticas y hermosas, pero son funcionales, precisa y útil. Una elegante fusión entre Ingeniería y arte; normalmente dos se opusieron a perspectivas, que ahora se unió al unísono armónico. Sin embargo, todas
Utilizando una matriz de puntos LED con Arduino y Shift Register

Utilizando una matriz de puntos LED con Arduino y Shift Register

el Siemens DLO7135 Dot matrix LED es una increíble pieza de la optoelectrónica. Ha anunciado como un 5 x 7 Dot Matrix Display inteligente (r) con controlador de memoria de descodificador. Junto a ese recuerdo, tiene una 96 caracteres ASCII exhibición
Platos reloj de pulsera

Platos reloj de pulsera

rayar discos es cargas de la diversión, incluso si no eres un turntablista. ¿Usted no desea que podría caer phat beats y scratch donde quiera que vayas? Bueno, ahora usted puede; DJ Hero con giradiscos de reloj de pulsera!Utilizando 2 tarjetas regist
Hacer una máquina de escribir con un teclado viejo y una impresora de matriz de punto

Hacer una máquina de escribir con un teclado viejo y una impresora de matriz de punto

este proyecto muestra cómo reciclar un viejo teclado y una impresora de matriz de puntos para hacer una máquina de escribir.Qué y cómo.La idea es conectar el teclado a la impresora con un interfaz simple y económico, he usado Arduino porque es una pl
Cara de corteza de abedul para reloj de pulsera

Cara de corteza de abedul para reloj de pulsera

¿Ha recibido aburrido de la misma cara en reloj de pulsera? ¿Nunca pensé que podría hacerlo mejor? Bien, la más fácil de lo que piensa. Este instructables te mostrará cómo hacer una cara de reloj de corteza de abedul, un maravilloso material natural
Arduino controla RGB LED Junta de matriz de punto

Arduino controla RGB LED Junta de matriz de punto

este proyecto es un tablero de música DIY relativamente directa y simple.La Junta de matriz de puntos permitirá a cualquier persona de crear su propia música y ritmos.Todo lo que necesitas tener es una comprensión del Arduino y el circuito.Paso 1: Re
Soporte para pantalla de matriz de punto Freetronics

Soporte para pantalla de matriz de punto Freetronics

Había comprado un par de pantallas Freetronics de matriz de puntos (DMD) el año pasado pero encontró difícil de manejar cuando se trata de utilizarlos. No era un problema de programación de Arduino para el DMD. Fue su tamaño físico en mi escritorio y
Arduino - matriz de punto pantalla escritura LED

Arduino - matriz de punto pantalla escritura LED

1. objetivosConseguir una pluma de escribir en la pantalla de matriz de puntos.2. Análisis de circuitoEscritura de pantalla de matriz de punto consta de tres partes principales: la fila análisis, columna de análisis de circuito mostrado, pluma ligera
Reloj de pulsera solo tubo de Nixie en 2

Reloj de pulsera solo tubo de Nixie en 2

Hace unos años descubrí Nixies y me compraron un reloj Nixie de 4 dígitos, no pasó mucho tiempo antes de que yo también quería hacer un reloj de pulsera con un Nixie.Después de mucho tiempo navegando por internet para un diseño de reloj simple se me
Walkie-Talkie reloj de pulsera

Walkie-Talkie reloj de pulsera

Bien, siempre he querido hacer un walkie-talkie reloj de pulsera para emular a los comunicadores en Mighty Morphin Power Rangers. Mi interés ha sido rejuvenecido recientemente después de encontrar un apoyo de comunicador de Power Rangers fresco y por