Arduino RTC LED-Uhr
Komponenten und Verbrauchsmaterialien
| × | 1 | ||||
| × | 1 | ||||
| × | 15 | ||||
| × | 15 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 190 | ||||
| × | 10 | ||||
| × | 12 | ||||
| × | 4 | ||||
| × | 1 |
Notwendige Werkzeuge und Maschinen
| ||||
| ||||
|
Über dieses Projekt
Zuerst müssen Sie die folgenden Bibliotheken herunterladen (Link befindet sich am Ende dieser Seite) 1. Wire.h
2. RTClib.hTeileliste
Video ansehen
Dies ist das RTC-Uhrenmodul
Dies ist die Arduino-Schaltung
RTC-Kabelverbindungen
RTC-Schalter
Identifizieren Sie Anode und Kathode
Schaltplan (GEMEINSAME ANODE)
WENN SIE GEMEINSAME KATHODEN-LED VERWENDEN, WIE FOLGEN SIE DIE ÄNDERUNGEN VOR
STROMVERSORGUNG
Code
- LED-Uhr-CODEs
LED-Uhr CODEsArduino
Laden Sie diesen Code herunter und laden Sie ihn in das Projekt hoch/* 4-stellige 7-Segment-Anzeige:http://www.sparkfun.com/products/9483 Datenblatt:http://www.sparkfun.com/datasheets/Components/LED/ 7-Segment/YSD-439AR6B-35.pdf */// Modified connexion by niq_ro from http://nicuflorica.blogspot.com// dataseet:http://www.tme.eu/ro/Document/dfc2efde2e22005fd28615e298ea2655/KW4 -563XSA.pdf// Code geändert von BMIAK Basnayaka// http://www.setnfix.comint digit1 =11; int-Ziffer2 =10;int-Ziffer3 =9; int-Ziffer4 =6;int-Ziffer5 =5; int digit6 =3; // Pin-Mapping von Arduino zum ATmega DIP28, wenn Sie es brauchen // http://www.arduino.cc/en/Hacking/PinMappingint segA =0; // Anzeigestift 11int segB =1; // Anzeigestift 7int segC =2; // Anzeigestift 4int segD =4; // Anzeigestift 2int segE =7; // Anzeigestift 1int segF =8; // Anzeigestift 10int segG =12; // Anzeigestift 5int segDP =13; // Display-Pin 3#include#include "RTClib.h"RTC_DS1307 RTC;// Datums- und Uhrzeitfunktionen mit einer DS1307 RTC, die über I2C und Wire lib verbunden ist// Original-Sketck von http://learn.adafruit .com/ds1307-real-time-clock-breakout-board-kit/// Teil mit SQW=1Hz hinzufügen von http://tronixstuff.wordpress.com/2010/10/20/tutorial-arduino-and-the- i2c-bus/// Teil mit manueller Anpassung hinzufügen http://www.bristolwatch.com/arduino/arduino_ds1307.htmbyte SW0 =A0;Byte SW1 =A2;Byte SW2 =A1;Byte SWT =A3;int Adhr=0; int Admnt=0;int D =0;int Z =0; // use for hexa in zecimal Conversionlong zh, uh, ore;long zm, um, miniti;void setup() { //Serial.begin(57600); Wire.begin(); RTC.begin(); // RTC.adjust(DateTime(F(__DATE__), F(__TIME__))); // Wenn Sie die Uhr einstellen müssen ... entfernen Sie einfach // aus der Zeile darüber // Teilecode zum Blinken von LEDWire.beginTransmission (0x68);Wire.write(0x07); // Zeiger auf SQW-Adresse verschieben // Wire.write (0x00); // schaltet den SQW-Pin aus Wire.write (0x10); // sendet 0x10 (hex) 00010000 (binär) an das Steuerregister - schaltet die Rechteckwelle mit 1 Hz ein // Wire.write (0x13); // sendet 0x13 (hex) 00010011 (binär) 32kHzWire.endTransmission(); pinMode (segA, AUSGANG); pinMode (segB, AUSGANG); pinMode (segC, AUSGANG); pinMode (segD, AUSGANG); pinMode (segE, AUSGANG); pinMode (segF, AUSGANG); pinMode (segG, AUSGANG); pinMode (segDP, AUSGANG); pinMode (Ziffer1, AUSGANG); pinMode (Ziffer2, AUSGANG); PinMode (Digit3, AUSGANG); PinMode (Ziffer4, AUSGANG); PinMode (Ziffer5, AUSGANG); pinMode (digit6, OUTPUT); // Serial.begin (9600); pinMode (SW0, INPUT); // NEIN. DruckknopfschalterpinMode (SW1, INPUT); // NEIN. DruckknopfschalterpinMode (SW2, INPUT); // NEIN. DruckknopfschalterpinMode (SWT, INPUT); // NEIN. DruckknopfschalterdigitalWrite (SW0, HIGH); // Pull-ups ondigitalWrite (SW1, HIGH); digitalWrite (SW2, HIGH); digitalWrite (segDP, LOW);}void loop () { DateTime now =RTC.now (); lange HR =jetzt.Stunde () * 1000; lange Zeit =(HR*10)+jetzt.Minute()*100+jetzt.Sekunde(); Adhr =jetzt.Stunde(); Admnt=now.minute();int DIM =0;if (timp> =250000)timp=timp-240000;//------------------------ -------------------//12/24 Stunden Scheiße //--------- ---------------------------------------------------------wenn (timp <130000 ) {digitalWrite (segDP, LOW);} if (digitalRead (SWT) ==0) {delay (300); if (D ==0) { D =1;delay (200);} else{D =0;}}if (D ==0){ if (timp> =130000){timp=timp-120000;digitalWrite( segDP, HIGH);}}if (timp> =130000){ digitalWrite(segDP, LOW);}if ((D==1)&(timp <130000))digitalWrite(segDP, LOW); //--- -------------------------------------------------- - //int timp =(now.minute(), DEC); // displayNumber (12); // Dies ist die anzuzeigende Zahl für (int i =100; i> 0; i--) { if (timp> =100000) displayNumber01 (timp); sonst displayNumber02(timp); } for(int i =100; i> 0; i--) { if (timp> =100000) displayNumber03 (timp); sonst displayNumber04(timp); } for(int i =100; i> 0; i--) { if (timp> =100000) displayNumber05 (timp); sonst displayNumber06(timp); aufrechtzuerhalten. Wenn (digitalRead (SW0) ==0) {Verzögerung (100); Z =1; Zeit einstellen(); } // Halten Sie den Schalter gedrückt, um die Zeit einzustellen}void set_time () { Byte Minuten1 =0; Byte Stunden1 =0; Byte-Minuten =0; Bytestunden =0; Stunden =Adhr; Minuten=Admnt; if ((Stunden &0x0f)> 9) Stunden =Stunden + 6; if (Stunden> 0x24) Stunden =1; // Mitternacht 12.00 wird als 12:00 (mit eingeschalteter PM-LED) oder 24:00 angezeigt // wenn (Stunden> 0x24) Stunden =1; // Mitternacht 12.00 wird als 0:00 angezeigt, wenn ((Minuten &0x0f)> 9) Minuten =Minuten + 6; if (Minuten> 0x59) Minuten =0; Während (!(Z==0)) {// Zeitschalter muss losgelassen werden, um zu beenden Int TST =digitalRead (SW2); while (TST==0) // Stunden setzen { Stunden++; // Hexa in Zecimal umwandeln:zh =Stunden / 16; äh =Stunden - 16 * zh; Erz =10 * zh + uh; zm =Minuten / 16; um =Minuten - 16 * zm; miniti =10 * zm + um; if ((Stunden &0x0f)> 9) Stunden =Stunden + 6; if (Stunden> 0x24) Stunden =1; // Mitternacht 12.00 wird als 12:00 (mit eingeschalteter PM-LED) oder 24:00 angezeigt // wenn (Stunden> 0x24) Stunden =1; // Mitternacht 12.00 wird als 0:00 angezeigt if (hours <=9) delay(1); for(int i =400; i> 0; i--) { displayNumber01 (ore*10000+miniti*100); } TST =digitalRead (SW2); aufrechtzuerhalten. Während (!(digitalRead(SW1))) // Minuten einstellen {minutes++; // Hexa in Zecimal umwandeln:zh =Stunden / 16; äh =Stunden - 16 * zh; Erz =10 * zh + uh; zm =Minuten / 16; um =Minuten - 16 * zm; miniti =10 * zm + um; for(int i =400; i> 0; i--) { displayNumber01 (ore*10000+miniti*100); } if ((Minuten &0x0f)> 9) Minuten =Minuten + 6; if (Minuten> 0x59) Minuten =0; if (Minuten>=9) Verzögerung (1); } Wire.beginTransmission(0x68); // DS1307 aktivieren Wire.write (0); // wo beginnen Wire.write (0x00); // Sekunden Wire.write (Minuten); // Minuten Wire.write (0x80 | Stunden); // Stunden (24-Stunden-Zeit) Wire.write (0x06); // Tag 01-07 Wire.write (0x01); // Datum 0-31 Wire.write (0x05); // Monat 0-12 Wire.write (0x09); // Jahr 00-99 Wire.write (0x10); // Control 0x10 erzeugt eine 1 Hz Rechteckwelle an Pin 7. Wire.endTransmission(); // Hexa in Zecimal umwandeln:zh =Stunden / 16; äh =Stunden - 16 * zh; Erz =10 * zh + uh; zm =Minuten / 16; um =Minuten - 16 * zm; miniti =10 * zm + um; for(int i =400; i> 0; i--) { displayNumber01 (ore*10000+miniti*100); } Verzögerung (100); // Serial.print (digitalRead (SW0)); if (digitalRead (SW0) ==0) Z =0; Verzögerung (300); } // Serial.print (SW2);}void displayNumber01 (long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) {//einschalten eine Ziffer für eine kurze Zeitschaltuhr (Ziffer) { Fall 1:digitalWrite (Ziffer1, DIGIT_ON); brechen; Fall 2:digitalWrite (Ziffer2, DIGIT_ON); // digitalWrite (segDP, LOW); brechen; Fall 3:digitalWrite (Ziffer3, DIGIT_ON); brechen; Fall 4:digitalWrite (Ziffer4, DIGIT_ON); brechen; Fall 5:digitalWrite(digit5, DIGIT_ON); brechen; Fall 6:digitalWrite(digit6, DIGIT_ON); brechen; } lightNumber(toDisplay % 10); toDisplay /=10; VerzögerungMikrosekunden (DISPLAY_BRIGHTNESS); // Alle Segmente ausschalten lightNumber (10); // Alle Ziffern ausschalten DigitalWrite (Digit1, DIGIT_OFF); digitalWrite (Ziffer2, DIGIT_OFF); digitalWrite (Digit3, DIGIT_OFF); digitalWrite (Ziffer4, DIGIT_OFF); digitalWrite (Ziffer5, DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber02(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) {//Eine Ziffer einschalten für kurze Zeit switch(digit) { case 1:lightNumber(10); brechen; Fall 2:digitalWrite (Ziffer2, DIGIT_ON); // digitalWrite (segDP, LOW); brechen; Fall 3:digitalWrite (Ziffer3, DIGIT_ON); brechen; Fall 4:digitalWrite (Ziffer4, DIGIT_ON); brechen; Fall 5:digitalWrite(digit5, DIGIT_ON); brechen; Fall 6:digitalWrite(digit6, DIGIT_ON); brechen; } lightNumber(toDisplay % 10); toDisplay /=10; VerzögerungMikrosekunden (DISPLAY_BRIGHTNESS); // Alle Segmente ausschalten lightNumber (10); // Alle Ziffern ausschalten DigitalWrite (Digit1, DIGIT_OFF); digitalWrite (Ziffer2, DIGIT_OFF); digitalWrite (Digit3, DIGIT_OFF); digitalWrite (Ziffer4, DIGIT_OFF); digitalWrite (Ziffer5, DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber03(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) {//Eine Ziffer einschalten für kurze Zeit switch(digit) { Fall 1:digitalWrite(digit1, DIGIT_ON); brechen; Fall 2:digitalWrite (Ziffer2, DIGIT_ON); brechen; Fall 3:digitalWrite (Ziffer3, DIGIT_ON); brechen; Fall 4:digitalWrite (Ziffer4, DIGIT_ON); brechen; Fall 5:digitalWrite(digit5, DIGIT_ON); brechen; Fall 6:digitalWrite(digit6, DIGIT_ON); brechen; } lightNumber(toDisplay % 10); toDisplay /=10; VerzögerungMikrosekunden (DISPLAY_BRIGHTNESS); // Alle Segmente ausschalten lightNumber (10); // Alle Ziffern ausschalten DigitalWrite (Digit1, DIGIT_OFF); digitalWrite (Ziffer2, DIGIT_OFF); digitalWrite (Digit3, DIGIT_OFF); digitalWrite (Ziffer4, DIGIT_OFF); digitalWrite (Ziffer5, DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber04(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) {//Eine Ziffer einschalten für kurze Zeit switch(digit) { case 1:lightNumber(10); brechen; Fall 2:digitalWrite (Ziffer2, DIGIT_ON); brechen; Fall 3:digitalWrite (Ziffer3, DIGIT_ON); brechen; Fall 4:digitalWrite (Ziffer4, DIGIT_ON); brechen; Fall 5:digitalWrite(digit5, DIGIT_ON); brechen; Fall 6:digitalWrite(digit6, DIGIT_ON); brechen; } lightNumber(toDisplay % 10); toDisplay /=10; VerzögerungMikrosekunden (DISPLAY_BRIGHTNESS); // Alle Segmente ausschalten lightNumber (10); // Alle Ziffern ausschalten DigitalWrite (Digit1, DIGIT_OFF); digitalWrite (Ziffer2, DIGIT_OFF); digitalWrite (Digit3, DIGIT_OFF); digitalWrite (Ziffer4, DIGIT_OFF); digitalWrite (Ziffer5, DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber05(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) {//Eine Ziffer einschalten für kurze Zeit switch(digit) { Fall 1:digitalWrite(digit1, DIGIT_ON); brechen; Fall 2:digitalWrite (Ziffer2, DIGIT_ON); brechen; Fall 3:digitalWrite (Ziffer3, DIGIT_ON); brechen; Fall 4:digitalWrite (Ziffer4, DIGIT_ON); brechen; Fall 5:digitalWrite(digit5, DIGIT_ON); brechen; Fall 6:digitalWrite(digit6, DIGIT_ON); brechen; } lightNumber(toDisplay % 10); toDisplay /=10; VerzögerungMikrosekunden (DISPLAY_BRIGHTNESS); // Alle Segmente ausschalten lightNumber (10); // Alle Ziffern ausschalten DigitalWrite (Digit1, DIGIT_OFF); digitalWrite (Ziffer2, DIGIT_OFF); digitalWrite (Digit3, DIGIT_OFF); digitalWrite (Ziffer4, DIGIT_OFF); digitalWrite (Ziffer5, DIGIT_OFF); digitalWrite(digit6, DIGIT_OFF);}} void displayNumber06(long toDisplay) {#define DISPLAY_BRIGHTNESS 25#define DIGIT_ON HIGH#define DIGIT_OFF LOW for(int digit =6; digit> 0; digit--) {//Eine Ziffer einschalten für kurze Zeit switch(digit) { case 1://digitalWrite(digit1, DIGIT_ON); brechen; Fall 2:digitalWrite (Ziffer2, DIGIT_ON); brechen; Fall 3:digitalWrite (Ziffer3, DIGIT_ON); brechen; Fall 4:digitalWrite (Ziffer4, DIGIT_ON); brechen; Fall 5:digitalWrite(digit5, DIGIT_ON); brechen; Fall 6:digitalWrite(digit6, DIGIT_ON); brechen; } lightNumber(toDisplay % 10); toDisplay /=10; VerzögerungMikrosekunden (DISPLAY_BRIGHTNESS); // Alle Segmente ausschalten lightNumber (10); // Alle Ziffern ausschalten DigitalWrite (Digit1, DIGIT_OFF); digitalWrite (Ziffer2, DIGIT_OFF); digitalWrite (Digit3, DIGIT_OFF); digitalWrite (Ziffer4, DIGIT_OFF); digitalWrite (Ziffer5, DIGIT_OFF); digitalWrite (digit6, DIGIT_OFF);}} // Bei einer Zahl werden diese Segmente eingeschaltet // Wenn Zahl ==10, dann schalte numbervoid lightNumber (int numberToDisplay) aus {//Common Anode ********* **************#define SEGMENT_ON HIGH#define SEGMENT_OFF LOW/* Gemeinsame Kathode ***************** #define SEGMENT_ON LOW # Definiere SEGMENT_OFF HIGH*/ switch (numberToDisplay){ case 0:digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_OFF); brechen; Fall 1:digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); brechen; Fall 2:digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_OFF); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_ON); brechen; Fall 3:digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite (segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_ON); brechen; Fall 4:digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); brechen; Fall 5:digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); brechen; Fall 6:digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); brechen; Fall 7:digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite (segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); brechen; Fall 8:digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_ON); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); brechen; Fall 9:digitalWrite(segA, SEGMENT_ON); digitalWrite(segB, SEGMENT_ON); digitalWrite(segC, SEGMENT_ON); digitalWrite(segD, SEGMENT_ON); digitalWrite(segE, SEGMENT_OFF); digitalWrite(segF, SEGMENT_ON); digitalWrite(segG, SEGMENT_ON); brechen; // alle Segmente sind EIN Fall 10:digitalWrite(segA, SEGMENT_OFF); digitalWrite(segB, SEGMENT_OFF); digitalWrite(segC, SEGMENT_OFF); digitalWrite(segD, SEGMENT_OFF); digitalWrite(segE, SEGMENT_OFF); digitalWrite (segF, SEGMENT_OFF); digitalWrite(segG, SEGMENT_OFF); brechen; }// Ende der Codierung, BUDHUSARANAI, Viel Glück. }
Schaltpläne
Dies ist die Verkabelung von SSD mit LEDHerstellungsprozess