En el nuestro Blog contribución del 17 de junio tenemos ya un reloj de tiempo real con el nuestro Nano V3aliarse.
Algunos clientes lo han copiado, y tenían en esencia 2 preguntas:
1. ¿Cómo recibo los dos puntos al centelleo?
2. ¿Cómo se debe hacer porque de sowas una hora binaria?
Quisiera responder a las ambas preguntas en nuestra Blog contribución de hoy.
Para el anuncio binario utilizo lo popular AZ-Derlivery el U-64-LED-Panel con 64 WS2812b RGB LEDs.
De lo contrario necesitamos todavía un condensador (en 1000 µ F) y una resistencia (220 Ω)
Cómo cada vez que trabajamos con WS2812b LEDs: éstas son muy claros, tiran sin embargo también muchísima corriente. Uno de 64 LEDs puede tirar en la luminosidad llena hasta 50mA. Sin embargo Nano puede entregar como máximo 200mA. Quién no ejerce Panel con la pequeña luminosidad o con una parte de red externa de modo arriesgado su salud propia así como ellos de sus prójimos.
Tomamos el circuito de la contribución mencionada al principio, y amplían éste. Norma industrial alemana en RGB Panel se hace con 220 intercaladoΩ la resistencia Pin D6 de Arduino se alian.
Para el suministro de electricidad recomiendo un 5Voltmeter a la parte de red con 5A. Vir ligan el polo positivo de la parte de red con 5V-Pin de Panels, y el polo negativo de la parte de red con GND-Pin de Panels. Luego superamos los 5Voltmeter y GND Pins ello de Panels con en 1000 µ F el condensador (¡polaridad tienen en cuenta!).
Para que Panel funcione, tenemos que ligar GND en Panel todavía con GND-Pin de Arduino.
Ahora es un buen momento para probar si la hora y el anuncio van todavía.
Si todo funciona como de modo deseado, y ningún humo espeso mágico sube, hemos hecho todo justo.
Como cercano viene de Sketsch. A esto he ampliado el sketch de la Blog contribución mencionada al principio:
//////////////////////////////////////////////////////////////////////////////////////////////////////c!p/ //Hora binaria con el módulo RTC y 8x8 matriz RGB LED // //Ampliación del tiempo real la hora de AZ-Delivery Blog la contribución // https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/echtzeituhr-mit-display-am-nano-v3 // //Usa el código modificado de npowley https://codebender.cc/sketch:241472#NeoPixel%20Binary%20Clock.ino //Usa el código modificado de http://www.pjrc.com/teensy/td_libs_DS1307RTC.html ////////////////////////////////////////////////////////////////////////////////////////////////////////// #include <Arduino.h> #include <TM1637Display.h> //por 4 bites de 7-segmento indica #include <Wire.h> //terminar de leer alrededor de RTC #define RTC_I2C_ADDRESS 0x68 //I2C la dirección de RTC DS3231 #include <FastLED.h> //hacer rumbo alrededor de LED Panel (https://github.com/FastLED/FastLED) #define CLK 2 //Arduino Pin D2 como CLK (RTC) #define DIO 3 //Ardiono Pin D3 como DIO (RTC) #define NUM_LEDS 64 //Número de LEDs #define DATA_PIN 6 //Data-Pin D6 en Nano para LED Panel U-64 #define HourColor Red //Color para horas #define MinuteColor Green //Color por minutos #define SecondColor Blue //Color por segundos #define HourNeutral Black //Del color para horas #define Neutro de minuto Black //Del color por minutos #define SecondNeutral Black //Del color por segundos #define LEDDimLevel 8 //Halligkeit de LEDs. En lo superior por favor Panel sobre su Nano del 5Voltmeter no proveen. TM1637Display display(CLK, DIO); //7-segmento el anuncio uint8_t dots = 0b10000000; //Punk doble el 7-segmento el anuncio. uint8_t bcdToDec( uint8_t val ) { return (uint8_t) ((val / 16 * 10) + (val % 16)); } int calca = 190; int acuerda una moratoria,minuto,segundo; CRGB leds[NUM_LEDS]; //Array hacen para LED Panel void Setup(){ Wire.begin(); Serial.begin(9600); display.setBrightness(0x0a); //la luminosidad indica el 7-segmento FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); //LED Panel Array befüllen } void loop(){ Wire.beginTransmission(RTC_I2C_ADDRESS); //Construcción de la relación a la dirección 0x68 Wire.write(0); Wire.transmisión final(); Wire.requestFrom(RTC_I2C_ADDRESS, 7); segundo = bcdToDec(Wire.read() & 0x7f); minuto = bcdToDec(Wire.read()); acuerda una moratoria = bcdToDec(Wire.read() & 0x3f); Serial.print(acuerda una moratoria); Serial.print(":"); Serial.print(minuto); Serial.print(":"); Serial.println(segundo); if ((segundo % 2) == 0){ //El 7-segmento indica el delimitador ":" en o de dots = 0b11111111; } else { dots = 0b00000000; } display.showNumberDecEx(acuerda una moratoria, dots, true, 2, 0); display.showNumberDec(minuto, true, 2, 2); FastLED.clear(); LEDS.setBrightness(LEDDimLevel); if (acuerda una moratoria > 12) { //de 24h formato en 12h formato acuerda una moratoria = acuerda una moratoria -12; } displayHour(acuerda una moratoria); //La hora indican binario minuto de display(minuto); //El minuto indican binario displaySecond(segundo); //El segundo indican binario delay(calca); } void displayHour(byte Hora){ for (int h = 0; h <= 3; h++) //count from el mosto right el bit (0) to 4th bites (3) //for (int h = 3; h >= 0; h-) { if (bitRead(acuerda una moratoria, h) == 1){ //¡Read el single the bites from right to left e if there is a! ¡1!, trae the LED up leds[55 - h] = CRGB::HourColor; //show the color defined at the top of this el sketch leds[63 - h] = CRGB::HourColor; //show the color defined at the top of this el sketch } else { leds[55 - h] = CRGB::HourNeutral; //if the LED is la necesidad used, take it down or to a different color. Lago top of the ketch leds[63 - h] = CRGB::HourNeutral; //if the LED is la necesidad used, take it down or to a different color. Lago top of the ketch } } FastLED.show(); //Show the LEDs } void minuto de display(byte Minuto){ for (int m = 0; m <= 5; m++){ if (bitRead(Minuto, m) == 1){ leds[31 - m] = CRGB::MinuteColor; //Salida at the el 1San LED for the minutes (4) y add el bit de minuto the leds[39 - m] = CRGB::MinuteColor; //Salida at the el 1San LED for the minutes (4) y add el bit de minuto the } else { leds[31 - m] = CRGB::Neutro de minuto; leds[39 - m] = CRGB::Neutro de minuto; } } FastLED.show(); } void displaySecond(byte Segundo){ for (int s = 0; s <= 5; s++){ if (bitRead(Segundo, s) == 1){ leds[7 - s] = CRGB::SecondColor; //Salida at the el 1San LED for the seconds (10) y add Seconds bites the leds[15 - s] = CRGB::SecondColor; //Salida at the el 1San LED for the seconds (10) y add Seconds bites the } else { leds[7 - s] = CRGB::SecondNeutral; leds[15 - s] = CRGB::SecondNeutral; } } FastLED.show(); }
Ahora, si bien, se mira, según hora actual, más o menos muchos LEDs de colores resplandecer, pero no le indico no siempre fácilmente también para personas Expertas par binario descifrar.
Por eso, he hecho un modelo pequeño al impreso. Éste puede ser bajado sobre el Dropbox enlace siguiente:https://www.dropbox.com/s/nr2kuth73zbqka1/bin%20uhr.svg?dl=0
Cómo se dice tan bien: "Hay 10 tipos personas. Que entienden el código binario y que, él no entienden."
Por eso, una hora binaria no debía faltar en ninguna aula de informática.
Naturalmente hay todavía algo para hacer. El sketch podría ser optimizado todavía en algunos lugares. Esto no me gusta, p. ej., que RGB LEDs en cada uno pasa flamean.
Además, alguien quería un sensor de temperatura, y Servo conducido por tiempo, y un receptor DCF, y Buzzer, y un Larson escáner para LEDs no utilizados, y, y...
Pero esto debe haber esto para hoy en primer lugar.
Nos alegramos por sus comentarios.
¡Hasta la contribución cercana de AZ-Delivery, su experto para microelectrónica!
3 comentarios
Andreas Wolter
danke für den Hinweis, wurde korrigiert.
Andreas Wolter
AZ-Delivery Blog
Michael Steinsträßer
Hallo Zusammen,
Schönes Projekt! Leider funktioniert der Link zur Echtzeituhr nicht. Bitte mal reparieren.
Mfg Michael
Richard
Hallo,
habe ein max7219 Led Matrix, damit funktioniert der Code leider nicht.
5Anschlüsse:
VCC, GND, DIN, CS, CLK
Könnten sie mir den Code so umschreiben damit es auch mit dem max7219 funktioniert?
Danke im voraus für ihre Bemühungen.
Liebe Grüße
Richard