Digital/Analog klocka - Arduino + PaperCraft (10 / 11 steg)
Steg 10: programmering
AlgoritmHuvudloop
- Hämta gång från RTC modul (i timmar och minuter)
- Om tid är olika Visningstiden
- Upprepa
Visa tid
- Dela upp tiden i fyra siffror. (med hjälp av / div 10)
- För varje sju segment display, flytta segment ut att Visa siffror
Display-siffriga
- Placera dekoder logik. Översätta int till sju segment beställning.
- Flytta behövs servon från X graden. Flytta inte behövs servon Y grader (där X är ur position och Y är placera av planet.
Prov
#include < Wire.h >
#include "RTClib.h"RTC_DS1307 RTC;
kort segA = 0; Display stift 14
kort segB = 1; Visa pin 16
kort segC = 2; Display stift 13
kort segD = 3; Display stift 3
kort segE = 4; Display stift 5
kort segF = 5; Display stift 11
kort segG = 6; Visa pin 15kort segA_OUT = 110.
kort segB_OUT = 110.
kort segC_OUT = 110.
kort segD_OUT = 110.
kort segE_OUT = 110.
kort segF_OUT = 110.
kort segG_OUT = 110.kort segA_IN = 90.
kort segB_IN = 90.
kort segC_IN = 90.
kort segD_IN = 90.
kort segE_IN = 90.
kort segF_IN = 90.
kort segG_IN = 90.int tid = 2000.
DateTime datePast;
DateTime dateNow;House keeping
void setup() {
Serial.BEGIN(9600);
Wire.BEGIN();
RTC.begin();
RTC.adjust (DateTime (__DATE__, __TIME__));
datePast = RTC.now();
}huvudloop
void loop() {
dateNow = RTC.now();
om (! () datePast.hour() == dateNow.hour() & & datePast.minute() == dateNow.hour()))
{
displayNumber(dateNow.hour()*100+dateNow.minute());
datePast = dateNow;
}
}Givet ett antal, visar vi 10:22
Efter kör genom 4 nummer, displayen är kvar avstängd
void displayNumber (int toDisplay) {
för (int siffra = 4; tal > 0; siffriga--) {
lightNumber (toDisplay % 10, siffra);
toDisplay = 10;
}Starta rörelsen
Serial.Print ("T"); Serial.println(Time);
}{Ogiltig flytta (int servo, int position)
Serial.Print("#");
Serial.Print(servo);
Serial.Print ("P");
Serial.Print(position);
}Med tanke på ett nummer, vänder på dessa segment
Om tal == 10, sedan stänga av nummer
void lightNumber (int numberToDisplay, int segment) {int offset = (segment - 1) * 7;
växel (numberToDisplay) {fall 0:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_OUT);
flytta (segF + offset, segF_OUT);
flytta (segG + offset, segG_IN);
bryta;fall 1:
flytta (segA + offset, segA_IN);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_IN);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_IN);
flytta (segG + offset, segG_IN);
bryta;fall 2:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_IN);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_OUT);
flytta (segF + offset, segF_IN);
flytta (segG + offset, segG_OUT);
bryta;fall 3:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_IN);
flytta (segG + offset, segG_OUT);
bryta;fall 4:
flytta (segA + offset, segA_IN);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_IN);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_OUT);
flytta (segG + offset, segG_OUT);
bryta;fall 5:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_IN);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_OUT);
flytta (segG + offset, segG_OUT);
bryta;fall 6:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_IN);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_OUT);
flytta (segF + offset, segF_OUT);
flytta (segG + offset, segG_OUT);
bryta;fall 7:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_IN);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_IN);
flytta (segG + offset, segG_IN);
bryta;mål 8:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_OUT);
flytta (segF + offset, segF_OUT);
flytta (segG + offset, segG_OUT);
bryta;mål 9:
flytta (segA + offset, segA_OUT);
flytta (segB + offset, segB_OUT);
flytta (segC + offset, segC_OUT);
flytta (segD + offset, segD_OUT);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_OUT);
flytta (segG + offset, segG_OUT);
bryta;
mål 10:
flytta (segA + offset, segA_IN);
flytta (segB + offset, segB_IN);
flytta (segC + offset, segC_IN);
flytta (segD + offset, segD_IN);
flytta (segE + offset, segE_IN);
flytta (segF + offset, segF_IN);
flytta (segG + offset, segG_IN);
bryta;
}
}
Andra
Du måste också ställa dig RTC klockan första gången. Detta kommer att ge det en starttid motsvarar en på datorn. Du behöver RTC biblioteket att köra följande kod.
#include
#include "RTClib.h"RTC_DS1307 RTC;
Ogiltiga inställningar () {
Serial.BEGIN(57600);Wire.BEGIN();
RTC.begin();
IF (!. RTC.isrunning()) {
Serial.println ("RTC körs inte!");
RTC.adjust (DateTime (__DATE__, __TIME__));
}
}