Schritt 13: Programmierung
Leider hinterließ ich meinen Code auf dem Computer Shop wenn ich nach Los Angeles zu Beginn des Sommers zog, und es besteht die Möglichkeit, dass der Code verloren und für immer verschwunden. Anstatt zu versuchen, es neu zu schreiben (obwohl ich wahrscheinlich eine Kopie finden werde, wenn ich wieder nach Los Angeles in ein paar Tagen--ich bin in Frisco jetzt), ich werde versuchen, gehen Sie durch die Programmierung Techniken Sie für dieses Baby können. Lernen würden nicht Sie lieber sowieso als Essen Fisch, Fisch?
Hier ' s die grundlegende Theorie hinter dem Code:
Die Zeichnung ist eine Open-Loop-Prozess. Die einzige Möglichkeit, die wir haben zu wissen, wie weit der Etch-a-Sketch gezogen hat ist herauszufinden, wie lange wir den Motor mit einer konstanten Geschwindigkeit gedreht habe. Das Problem ist natürlich, dass die Motoren ihrer Geschwindigkeit basierend auf die Batteriespannung, die sich von Tag zu Tag ändern können variieren. Ich könnte die Motorspannung regulieren, aber ich finde diese Idee verabscheuungswürdig und unnötig. Stattdessen werde ich lehnen Sie sich zurück und hören Sie das Lied "Ehrlich gesagt, Herr Shankly" von the Smiths mit einem selbstgefälligen Ausdruck auf meinem Gesicht.
Um dies zu umgehen, pretend ich zeichne ich Vektor-Bilder (z.B. Bilder, die skalierbare Linien und Kurven bestehen). Ich mache eine globale Variable in meinem Code genannt Skala, und hätte ich eine Funktion wie DrawLine (Winkel, Länge), es mit einer beliebigen Anzahl für Länge, fordere ich sagen 3. Innerhalb der Funktion habe ich Code, der sagt: Zeichnen Sie eine Linie im richtigen Winkel für 3 * skalieren Sekunden
Macht das Sinn? Gute.
Hier sind einige grundlegenden Funktionen:
void DrawRight(unsigned Char Abstand)
{
PORTB = 1;
Wait(Distance*Scale);
PORTB = 0;
}
void DrawLeft(unsigned Char Abstand)
{
PORTB = 2;
Wait(Distance*Scale);
PORTB = 0;
}
void DrawUp(unsigned Char Abstand)
{
PORTB = 4;
Wait(Distance*Scale);
PORTB = 0;
}
void DrawDown(unsigned Char Abstand)
{
PORTB = 8;
Wait(Distance*Scale);
PORTB = 0;
}
für diejenigen unter Ihnen, die nicht wollen, um es, hier warten Funktion zu schreiben:
leere Zeit, warten(Int)
{
Int Count, count2;
für (Count = 0; Graf < 1000; Graf ++) //we're gonna viele Zyklen Hier verbrennen.
für (count2 = 0; count2 < Zeit; count2 ++)
;
}
OK, sollte dies wirst du bekommen. Mit diesem Code für ein bisschen herumspielen und Auslosung der horizontalen und vertikalen Linien. Vielleicht eine Box. Im nächsten Abschnitt werde ich Ihnen über Kurven sprechen.
Während Sie programmieren, lesen Sie in dem Indie-Label Kill Rock Stars. Neben Matador gehört es zu meinen Lieblings-Labels. OK, cool.