Stap 2: Toevoegen sommige Output - 7 Segment Display
Zien van tijd klikt u op uit op de seriële console is cool, maar he, hebt u reeds een nauwkeurige digitale klok naar beneden in de hoek van het computerscherm van uw. We moeten enkele echte output, dus ik ga om toe te voegen een 7-segment display. Adafruit en SparkFun hebben een aantal verschillende weergaveopties, maar I 'm gonna Adafruit de I2C gebruiken één (https://www.adafruit.com/products/881).
Zowel de weergave als de RTC-module (stap 5) hebben softwarebibliotheken die moeten worden geïnstalleerd om ons de functionaliteit om ze gemakkelijk te programmeren. Bibliotheken abstract alle low-level hardware-code, zodat we gewoon op de taak bij de hand concentreren kunnen.
Wij zijn uiteindelijk gaan drie bibliotheken nodig, dus laat ze allemaal nu installeren. Start met de instructies van de bibliotheek weergeven op https://learn.adafruit.com/adafruit-led-backpack/0... en de bibliotheken van installeren:
- https://github.com/adafruit/Adafruit-LED-Backpack-...
- https://github.com/adafruit/Adafruit-GFX-Library
Ook de instructies van de ... https://learn.adafruit.com/ds1307-real-time-clock- installeren met behulp van de bibliotheek van:
Het display kabellengte tot per de instructies en diagram, en test het met behulp van de bibliotheek voorbeeld "sevenseg". Zodra u tevreden bent het functioneert, we zijn klaar voor een klok-code:
#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(); } }
Afhankelijk van de starttijd ziet u mogelijk slechts "0 00". Vrij saai. Als u zien sommige nummer zet wilt, probeert u de vervanging in de tweede cijfers (s1, s2) voor de minuten cijfers (m1, m2) voor cijfers # 3 & 4.
Ook geven de meeste digitale klokken de indicatie van seconden voorbij het opvlammen van de dubbele punt tussen de uren en minuten. U kunt doen dat met een modulo-test op seconden te knipperen op als het oneven is, uit als het is zelfs. Probeer toe te voegen:
matrix.drawColon(seconds % 2);<br>
Met de RTC bibliotheek beschikbaar zijn (zelfs zonder de werkelijke module geïnstalleerd), kunnen we sommige trucs gebruiken om de tijd de schets werd opgeslagen en stel het gewenste tijdstip.
// Get upload date time<br> DateTime uploadDateTime = DateTime(__DATE__, __TIME__); int hours = uploadDateTime.hour(); int minutes = uploadDateTime.minute(); int seconds = uploadDateTime.second();
Nu moet je een fatsoenlijke weergave van de huidige tijd totdat u opnieuw instellen of het bestuur uit-en inschakelen. Gewoon opnieuw uploaden van de schets om in te stellen van de juiste tijd weer!
Tijd om te verkennen:
- Hoe zou u de klok lopen maken sneller of langzamer?
- Kun je het achteruit lopen?
- Hoe kon u AM/PM weergeven in plaats van 24 uur?