Arduino Etch-A-Sketch Clock (8 / 9 steg)
Steg 8: Programvara - huvudkoden!
3 - huvudkodenOK, detta är huvudprogrammet - du skriva över testprogrammet med detta.
Måste du installera "Tid" biblioteket om jag tycker detta är installerat som standard.
Jag ska tala du igenom de viktigaste funktionerna i koden. Jag är fortfarande väldigt mycket en elev så jag får väl har valt några klumpiga metoder, men det fungerar.
De viktigaste hindren är:
-Läs tiden
-Konvertera timmar från 24-timmarsformat till 12-timmarsformat, och stoppa 0 från den 1: a siffran - vill inte det ritning "08 32" - avfall tid dra nollan.
-ta till protokollet och band dem till enskilda siffror.
-dra gång, varje siffra med samma mängd utrymme så att markören på EAS alltid återvänder till samma plats, redo för nästa tid uppdatering.
Jag har gjort de tid omvandlingarna med remote funktionsanrop (getDigit och hourConverter). print2digits används inte men var en del av testerna.
Det finns mycket kommenterade testning kod kvar i till din fördel. En hel del testning av den faktiska tiden att hålla gjordes via IDE seriell bildskärmen - EAS är alldeles för långsam för att testa sånt.
/ *---(Import behövs bibliotek)---* / void setup() { void loop() { MAJOR om avsnitt - kontrollera om minuten är en multipel av 5 Tydlig EAS skärmen med en EasyDriver fast med riktning stift till Arduino stift 8 och steg stift till Aruino pin 9 digitalWrite 8, låg. / * Serial.print ("Ok, timme ="); Extrakt och lottningen minut 1: a siffran Extrakt och lottningen minut 2: a siffran
#include < DS1307RTC.h >
#include < Time.h >
#include < Wire.h >
#include < Stepper.h >
/ *---(Deklarera konstanter, Pin-numren)---* /
#define steg 32 //Number steg per varv
#define STEPSSIDE 200 //number steg sida motor
/ *---(Deklarera objekt)---* /
skapa en instans av klassen stepper, ange
antalet steg av motorn och stiften har
bifogas
Pin-anslutningar måste vara 4 stift ansluten
Motorn Driver In1 In2, In3, In4 och sedan stiften trädde
här i sekvensen 1-3-2-4 för korrekt sekvensering
Stepper small_stepperV (steg, 4, 5, 6, 7);
Stepper small_stepperH (steg, 2, 3, 12, 13);
Serial.BEGIN(9600);
ställa in hastigheten på motorn
small_stepperH.setSpeed(700);
small_stepperV.setSpeed(700);
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
digitalWrite 8, låg.
digitalWrite (9, låg).
}
tmElements_t tm;
RTC.read(tm);
om ((getDigit (tm. Minut, 1)) == 5 || (getDigit (tm. Minut, 1)) == 0) {/ / re-möjliggöra för 5 MIN uppdatering
för (int microsteps = 1; microsteps < 1400; microsteps ++) {
digitalWrite (9, hög).
Delay(1);
digitalWrite (9, låg).
Delay(1);
}
Delay(1000);
digitalWrite 8, hög.
för (int microsteps = 1; microsteps < 1400; microsteps ++) {
digitalWrite (9, hög).
Delay(1);
digitalWrite (9, låg).
Delay(1);
}
Serial.Print (hourConverter (tm. Timme));
hourConvert (tm. Timme).
Serial.Print (tm. Timme).
Serial.write (',').
Serial.Print ("minuter =");
print2digits(TM. Minut).
Serial.Print (tm. Minut).
Serial.println();
*/
Huvudsakliga tid utvinning avsnitt
Extrahera och rita timme
om ((hourConverter (tm. Timme)) == 1) {
sketchBlank ();
sketchSpaceSml ();
sketch1 ();
} else om ((hourConverter (tm. Timme)) == 2) {
sketchBlank ();
sketchSpaceSml ();
sketch2 ();
} else om ((hourConverter (tm. Timme)) == 3) {
sketchBlank ();
sketchSpaceSml ();
sketch3 ();
} else om ((hourConverter (tm. Timme)) == 4) {
sketchBlank ();
sketchSpaceSml ();
sketch4 ();
} else om ((hourConverter (tm. Timme)) == 5) {
sketchBlank ();
sketchSpaceSml ();
sketch5 ();
} else om ((hourConverter (tm. Timme)) == 6) {
sketchBlank ();
sketchSpaceSml ();
sketch6 ();
} else om ((hourConverter (tm. Timme)) == 7) {
sketchBlank ();
sketchSpaceSml ();
sketch7 ();
} else om ((hourConverter (tm. Timme)) == 8) {
sketchBlank ();
sketchSpaceSml ();
sketch8 ();
} else om ((hourConverter (tm. Timme)) == 9) {
sketchBlank ();
sketchSpaceSml ();
sketch9 ();
} else om ((hourConverter (tm. Timme)) == 10) {
sketch1 ();
sketchSpaceSml ();
sketch0 ();
} else om ((hourConverter (tm. Timme)) == 11) {
sketch1 ();
sketchSpaceSml ();
sketch1 ();
} else om ((hourConverter (tm. Timme)) == 12) {
sketch1 ();
sketchSpaceSml ();
sketch2 ();
}
blanksteg före minuter
sketchBlank ();
om ((getDigit (tm. Minut, 2)) == 1) {
sketch1 ();
} else om ((getDigit (tm. Minut, 2)) == 2) {
sketch2 ();
} else om ((getDigit (tm. Minut, 2)) == 3) {
sketch3 ();
} else om ((getDigit (tm. Minut, 2)) == 4) {
sketch4 ();
} else om ((getDigit (tm. Minut, 2)) == 5) {
sketch5 ();
} annat {
sketch0 ();
}
Blanksteg före 2: a minut siffra
sketchSpaceSml ();
om ((getDigit (tm. Minut, 1)) == 1) {
sketch1 ();
} else om ((getDigit (tm. Minut, 1)) == 2) {
sketch2 ();
} else om ((getDigit (tm. Minut, 1)) == 3) {
sketch3 ();
} else om ((getDigit (tm. Minut, 1)) == 4) {
sketch4 ();
} else om ((getDigit (tm. Minut, 1)) == 5) {
sketch5 ();
} else om ((getDigit (tm. Minut, 1)) == 6) {
sketch6 ();
} else om ((getDigit (tm. Minut, 1)) == 7) {
sketch7 ();
} else om ((getDigit (tm. Minut, 1)) == 8) {
sketch8 ();
} else om ((getDigit (tm. Minut, 1)) == 9) {
sketch9 ();
} annat {
sketch0 ();
}
Returnera markören för att starta
small_stepperH.Step(-11800); vänster
small_stepperH.Step(1200); höger
test för att extrahera 1: a eller andra siffran (räknas från höger) dvs "12" - tal 1 = 2
/ * Serial.print ("Min siffra 2 =");
Serial.Print (getDigit (tm. Minut, 2));
Serial.println();
Serial.Print ("Min siffran 1 =");
Serial.Print (getDigit (tm. Minut, 1)).
Serial.println();
testa utdrager timmen numrerar
om ((hourConverter (tm. Timme)) == 9) {
Serial.Print ("siffran timme = nio!");
} else om ((hourConverter (tm. Timme)) == 10) {
Serial.Print ("siffran timme = tio!");
}
Serial.println();
*/
Delay(59500); En anständig fördröjning mellan uppdateringar
} //remove ovan förseningen och re-anable denna linje för 5 min uppdateringar
}
SLUTET AV MAIN LOOP
void print2digits (int antal) {
om (nummer > = 0 & & nummer < 10) {
Serial.write('0');
}
Serial.Print(Number);
}
int getDigit (unsigned int nummer, int siffra) {//Takes ett tal och returnerar den x'th siffran)
för (int jag = 0; jag < siffra-1; i ++) {
nummer / = 10;
}
returnera antal % 10.
}
int hourConverter (int antal) {//Takes 24 timmars tid och subtraherar 12 eller lägger till 12 om det är 00: timme)
om (nummer > 12) {
antal = antal - 12.
} else om (antal == 0) {
antal = antal + 12.
}
returnera nummer.
}
void sketch1 () {
small_stepperH.Step(700); höger
small_stepperV.Step(3100); upp
small_stepperH.Step(500); höger
small_stepperV.Step(-3090); ned
small_stepperH.Step(-1000); vänster
small_stepperH.Step(1700); höger
}
void sketch2 () {
small_stepperV.Step(2000); upp
small_stepperH.Step(1400); höger
small_stepperV.Step(600); upp
small_stepperH.Step(-1750); vänster
small_stepperV.Step(500); upp
small_stepperH.Step(2200); höger
small_stepperV.Step(-1950); ned
small_stepperH.Step(-1600); vänster
small_stepperV.Step(-600); ned
small_stepperH.Step(1600); höger
small_stepperV.Step(-500); ned
small_stepperH.Step(-2200); vänster
small_stepperH.Step(2200); höger
}
void sketch3 () {
small_stepperH.Step(2000); höger
small_stepperV.Step(3100); upp
small_stepperH.Step(-2250); vänster
small_stepperV.Step(-950); ned
small_stepperH.Step(1700); höger
small_stepperV.Step(-500); ned
small_stepperH.Step(-1650); vänster
small_stepperV.Step(-550); ned
small_stepperH.Step(1650); höger
small_stepperV.Step(-550); ned
small_stepperH.Step(-1700); vänster
small_stepperV.Step(-550); ned
small_stepperH.Step(2150); höger
}
void sketch4 () {
small_stepperH.Step(1800); höger
small_stepperV.Step(3100); upp
small_stepperH.Step(-950); vänster
small_stepperV.Step(-1500); ned
small_stepperH.Step(-650); vänster
small_stepperV.Step(1500); upp
small_stepperH.Step(-600); vänster
small_stepperV.Step(-1950); ned
small_stepperH.Step(1600); höger
small_stepperV.Step(-1130); ned
small_stepperH.Step(630); höger
}
void sketch5 () {
small_stepperV.Step(1000); upp
small_stepperH.Step(1300); höger
small_stepperV.Step(600); upp
small_stepperH.Step(-1700); vänster
small_stepperV.Step(1500); upp
small_stepperH.Step(2100); höger
small_stepperV.Step(-950); ned
small_stepperH.Step(-1700); vänster
small_stepperV.Step(-650); ned
small_stepperH.Step(1700); höger
small_stepperV.Step(-1450); ned
small_stepperH.Step(-2200); vänster
small_stepperH.Step(2200); höger
}
void sketch6 () {
small_stepperV.Step(3100); upp
small_stepperH.Step(1750); höger
small_stepperV.Step(-950); ned
small_stepperH.Step(-1650); vänster
small_stepperV.Step(-700); ned
small_stepperH.Step(1650); höger
small_stepperV.Step(-1450); ned
small_stepperH.Step(-2200); vänster
small_stepperH.Step(950); höger
small_stepperV.Step(1500); upp
small_stepperH.Step(800); höger
small_stepperV.Step(-1000); ned
small_stepperH.Step(-1150); vänster
small_stepperV.Step(-480); ned
small_stepperH.Step(1650); höger
}
void sketch7 () {
small_stepperH.Step(1250); höger
small_stepperV.Step(2600); upp
small_stepperH.Step(-1100); vänster
small_stepperV.Step(-1200); ned
small_stepperH.Step(-600); vänster
small_stepperV.Step(1670); upp
small_stepperH.Step(2200); höger
small_stepperV.Step(-3020); ned
small_stepperH.Step(-900); vänster
small_stepperH.Step(1000); höger
}
void sketch8 () {
small_stepperV.Step(3100); upp
small_stepperH.Step(1750); höger
small_stepperV.Step(-950); ned
small_stepperH.Step(-1650); vänster
small_stepperV.Step(-700); ned
small_stepperH.Step(1150); höger
small_stepperV.Step(1200); upp
small_stepperH.Step(470); höger
small_stepperV.Step(-2600); ned
small_stepperH.Step(-2200); vänster
small_stepperH.Step(950); höger
small_stepperV.Step(1500); upp
small_stepperH.Step(800); höger
small_stepperV.Step(-1000); ned
small_stepperH.Step(-1160); vänster
small_stepperV.Step(-500); ned
small_stepperH.Step(1700); höger
}
void sketch9 () {
small_stepperH.Step(1250); höger
small_stepperV.Step(2650); upp
small_stepperH.Step(-1100); vänster
small_stepperV.Step(-1200); ned
small_stepperH.Step(1050); höger
small_stepperV.Step(-450); ned
small_stepperH.Step(-1550); vänster
small_stepperV.Step(2050); upp
small_stepperH.Step(2150); höger
small_stepperV.Step(-3050); ned
small_stepperH.Step(-900); vänster
small_stepperH.Step(1000); höger
}
void sketch0 () {
small_stepperV.Step(3100); upp
small_stepperH.Step(1850); höger
small_stepperV.Step(-3050); ned
small_stepperH.Step(-2200); vänster
small_stepperH.Step(800); höger
small_stepperV.Step(2500); upp
small_stepperH.Step(850); höger
small_stepperV.Step(-2000); ned
small_stepperH.Step(-1150); vänster
small_stepperV.Step(-530); ned
small_stepperH.Step(1800); höger
}
void sketchBlank () {
small_stepperH.Step(2000); höger
}
void sketchSpaceSml () {
small_stepperH.Step(500); höger
}