Arduino Etch-A-Sketch Clock (8 / 9 steg)

Steg 8: Programvara - huvudkoden!

3 - huvudkoden

OK, 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)---* /
#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);

void setup() {
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).
}

void loop() {
tmElements_t tm;
RTC.read(tm);

MAJOR om avsnitt - kontrollera om minuten är en multipel av 5
om ((getDigit (tm. Minut, 1)) == 5 || (getDigit (tm. Minut, 1)) == 0) {/ / re-möjliggöra för 5 MIN uppdatering

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.
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 ("Ok, timme =");
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 ();

Extrakt och lottningen minut 1: a siffran
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 ();

Extrakt och lottningen minut 2: a siffran
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
}

Se Steg
Relaterade Ämnen

Etch A Sketch laserskärare baserade Arduino.

i detta projekt tar jag en Arduino Mini Pro ansluta den till en anpassad gjort Etch A Sketch panel och använda den för att styra en Blacknose laser cutter. Resultatet är timmar galen laser skärning roligt, som vi kommer att ta runt de flesta av UK Ma...

Arduino kontrollerade Pocket Etch A Sketch slumpmässig promenad simulering

detta projekt är resultatet av Wal-Mart utcheckning lane impulsköp av fickformat Etch A Sketch för $3,99.Två stegmotorer Etch A Sketch knopp drivaxlar och en servomotor vänder Etch A Sketch om du vill radera skärmen. Med hjälp av Arduino IDE Serial M...

$100 väggmålning ritning robot (fungerar även som en gigantisk etch-a-sketch)

på hacka-en-dag!Vad jag gillar med robotar är att du kan göra en sak som gör andra saker. Så meta! Den använder gcode Rita någon bild du, eller du kan köra runt som en etch-a-sketch. Du kan skala denna robot upp till nästan alla storlekar. Versionen...

NES kontrollerade Etch-A-Sketch

Ritning på en etch-a-sketch med en original Nintendo controller. Jag ansluten etch-a-sketch vreden till stegmotorer, som sedan kontrolleras av en Arduino mikrokontroller. Arduino programmet skrev jag tar signaler från NES controller och skickar dem s...

Etch-a-Sketch LOGO - EASiLOGO

Vad får du om du korsar en sköldpadda med en Etch-a-Sketch?Etch-A-Sketch interaktiva LOGO - "EASiLOGO"!Detta är den första programmeringsspråk som utformats speciellt för världen berömda leksaken från Ohio Arts - Etch-a-Sketch. Om du aldrig sett...

Virtuella Etch A Sketch

Etch A Sketch: berömda, kreativ och unik. Tyvärr har jag ingen aning Vart är en från min barndom, så jag bestämde mig att göra min egen virtuella! Kontrollera ut (och min hemska ritning färdigheter) nedan.Denna Etch A Sketch är ganska likt originalet...

SK3TCH - balans ombord kontrollerade Etch-A-Sketch

SK3TCHHur man använder en Wii Balance Board för att styra en Etch-A-SketchEndast WindowsInnehåll:1. intro och reservdelar2. växlar3. bygga ramen4. montage5. ansluta WiiMote och Balance Board6. GlovePIE7. Arduino + motorstyrning8. bearbetning9. kör de...

VHDL Etch-a-Sketch

För våra CPE 133 slutliga projektet på Cal Poly, San Luis Obispo, vi byggde ett Etch-a-Sketch med VHDL på Diligant nexys 3 styrelsen. En nexys 3 styrelse som kan bygga logiska kretsar utan att oroa om komplicerade externa gränssnitt, och mer avancera...

Electroluminescent Etch A Sketch

Hi, aftergetting några electroluminescent grejer för en övning för http://hci.rwth-aachen.de/mcp1314 att leka, det är mitt (första) försöka bygga en elektroluminiscent EAS (och göra en Instructable:-):Jag använde:-en Etch A Sketch (ganska självklart...

Etch-i-Sketch

"Vi inte kan konkurrera med det!"--Steve Jobs('s doppleganger)"Zune? Vad tänkte vi? Detta är vad vi behöver. "--Bill Gates('s likely thoughts)"Men behöver en strömkälla ruiner poängen..."--Ohio Art('s worthless opinion)Trött...

Avsnitt 15: Hacka en Etch-A-Sketch att rita cirklar

vi på dumma uppfinningar älskar Etch-A-Sketch, men vi saknar konstnärlig talang för att rita något bra på klassiska leksaken.Så kom vi fram till ett enkelt och billigt sätt att hacka Etch-A-Sketch så att inte bara kan du rita det gamla sättet, men du...

IPad Etch-A-Sketch ringer upp

Få tillbaka den gamla goda tiden med en DIY Etch-A-Sketch ratten som fungerar på en Tablet PC eller smarta telefon! Detta instructable kommer att lära dig hur man gör en fysisk ratten för din enhet. Det är särskilt utformade för att se och agera som...

LED Etch-a-Sketch

min LED Etch-a-Sketch är min första helt färdiga elektronik projekt. Jag använder fyra 8 x 8 ledde matriser för att göra en 16 x 16 ledde matrisen ritning yta. Två potentiometrar tillåter indata från användaren för kolumn- och rörelse, medan två tilt...

LED Etch-a-Sketch (Full Instructable)

min LED Etch-a-Sketch är min första helt färdiga elektronik projekt. När jag först fick in elektronik jag letade efter ett projekt att börja med och medan du surfar på Sparkfun.com jag kom över ledde matriser och jag visste att jag ville arbeta med d...

Hur man ställa in A Permanent Etch A Sketch (som proffsen)

som an Etch A Sketchist mig själv, jag känner att det värsta någon EAS artist kan göra för sig själva är att alltför få knutna till en av deras "skiss Works". Jag har sett detta hända innan och konstnärer har blivit galen försöker skydda sina ko...

Etch-a-sketch skapelser

jag nyligen hittade en etch-a-sketch i min garderob och blev intresserad i ritningen med det. Jag drar mestadels bilder från böcker medan jag sitter i engelska klass eller bilder från affischer i andra klasser. Det är ett bra sätt att använda din tid...

Etch-a-Sketch - w/Arduino & bearbetning

jag gjorde detta en för att lära sig om bearbetning och hur det integreras med Arduino.I grund och botten är vad jag har denna:En Arduino Duemilenova som är inrymt i en gammal bandet Säkerhetsfack. Arduinoen har 2 potentiometrar fäst vid den. En repr...

Arduino Nano: DS1307 realtid Clock(RTC) med Visuino

DS1307 Realtidsklocka finns allmänt tillgänglig låg kostnad I2C RTC moduler. De kommer med en klocka och ett litet batteri, och när ansluten till Arduino, kan hålla reda på realtid även när Arduino styrelsen inte drivs.I detta Instructable kommer jag...

Arduino 7 Segment Display Clock (+ ljud aktiveringen)

I detta instructable jag kommer att visa dig hur man gör ditt eget Arduino baserade 7 segment display (4 siffror) klocka med ljud aktiveringen funktion!Kretsen som använder den ATmega328p micro controller (samma som Arduino uno styrelsen) och den DS1...