Stap 13: programmeren
Helaas, ik verliet mijn code achter op de computer van de winkel toen ik verhuisd naar LA aan het begin van de zomer, en er een mogelijkheid is dat de code is verloren gegaan voor altijd. In plaats van te proberen om het te herschrijven (hoewel ik vindt waarschijnlijk een kopie wanneer ik weer terug naar LA in een paar dagen--ik ben in frisco nu), ik zal proberen om u te lopen via programmering technieken die u voor deze baby gebruiken kunt. Niet zou u liever leren vissen dan eet de vis, toch?
Hier ' s de basistheorie achter de code:
Tekening is een open-loop-proces. De enige manier waarop die we hebben om te weten hoe ver de etsen-a-schets heeft getekend is door het uitzoeken hoe lang we hebt dichtgeknepen de motor bij een constante snelheid. Het probleem is natuurlijk dat de motoren hun snelheid op basis van de accuspanning, die van dag tot dag veranderen kan variëren. Ik kon de motor spanning te regelen, maar ik vind dat idee weerzinwekkende en onnodig. In plaats daarvan ik leun achterover en luister naar het liedje 'Eerlijk gezegd, mijnheer Shankly' door the Smiths met een zelfvoldane uitdrukking op mijn gezicht.
Om rond dit, ik doe alsof dat ik ben tekening vectorafbeeldingen (d.w.z. afbeeldingen die zijn samengesteld uit schaalbare lijnen en curven). Ik maak een globale variabele in mijn code genoemd schaal, en als ik had een functie zoals drawLine (hoek, lengte), ik noem het met een willekeurig aantal voor lengte, zeggen 3. Binnen de functie, ik heb code die zegt: een lijn tekenen onder de juiste hoek voor 3 * schaal seconden
Is dat zinvol? Goed.
Hier zijn enkele basisfuncties:
VOID drawRight(unsigned char afstand)
{
PORTB = 1;
wait(Distance*Scale);
PORTB = 0;
}
VOID drawLeft(unsigned char afstand)
{
PORTB = 2;
wait(Distance*Scale);
PORTB = 0;
}
VOID drawUp(unsigned char afstand)
{
PORTB = 4;
wait(Distance*Scale);
PORTB = 0;
}
VOID kredietopneming(unsigned char afstand)
{
PORTB = 8;
wait(Distance*Scale);
PORTB = 0;
}
voor degenen onder u die niet willen schrijven het, hier is de functie wachten :
VOID wachten(int keer)
{
int count, count2;
voor (graaf = 0; graaf < 1000; count ++) //we're gaan branden veel cycli hier.
voor (count2 = 0; count2 < tijd; count2 ++)
;
}
OK, moet dit je gaan. Speel rond met deze code voor een beetje en loting van horizontale en verticale lijnen. Misschien een doos. In de volgende sectie zal ik met je praten over krommen.
Terwijl u programmeert, check out het indie label Kill Rock Stars. Naast de Matador is het een van mijn favoriete etiketten. OK, cool.