Étape 13 : programmation
Malheureusement, j’ai laissé mon code sur l’ordinateur de la boutique quand j’ai déménagé à LA au début de l’été, et il est possible que le code est perdu et disparu à jamais. Plutôt que d’essayer de le réécrire (bien que je trouverai probablement une copie quand je rentre à LA en quelques jours--je suis à frisco maintenant), je vais essayer de vous guider à travers la programmation techniques que vous pouvez utiliser pour ce bébé. Ne serait pas plutôt apprendre à pêcher que les poissons de manger, de toute façon ?
Ici ' s la théorie de base derrière le code :
Le dessin est un processus de boucle ouverte. Le seul moyen que nous avons de savoir dans quelle mesure l’etch-a-sketch a dessiné est de savoir combien de temps nous avons tourné le moteur à une vitesse constante. Le problème, bien sûr, est que les moteurs varient leur vitesse basé sur la tension de la batterie, qui pourrait changer de jour en jour. Je pourrais régler la tension du moteur, mais je trouve cette idée odieuse et inutiles. Au lieu de cela, je vais rester les bras croisés et écouter la chanson « Franchement, Monsieur Shankly » par les forgerons avec une expression béate sur mon visage.
Pour contourner ce problème, je prétends que je peins des images vectorielles (c'est-à-dire les images qui sont composés de courbes et de lignes évolutives). Je fais une variable globale dans mon code, appelée échelle, et si j’ai eu une fonction telles que drawLine (angle, longueur), je l’appellerais avec un nombre arbitraire de longueur, dites 3. À l’intérieur de la fonction, j’ai le code qui dit : tracer une ligne à l’angle approprié pour 3 * échelle des secondes
Qui a-t-il un sens ? Bon.
Voici quelques fonctions de base :
void drawRight(distance unsigned char)
{
PORTB = 1 ;
Wait(distance*Scale) ;
PORTB = 0 ;
}
void drawLeft(distance unsigned char)
{
PORTB = 2 ;
Wait(distance*Scale) ;
PORTB = 0 ;
}
void drawUp(distance unsigned char)
{
PORTB = 4 ;
Wait(distance*Scale) ;
PORTB = 0 ;
}
annuler le prélèvement(distance unsigned char)
{
PORTB = 8 ;
Wait(distance*Scale) ;
PORTB = 0 ;
}
pour ceux d'entre vous qui ne voulez pas écrire, ici de la fonction wait :
Sub attendre(int)
{
int count, count2 ;
pour (count = 0; count < 1000 ; count ++) //we're va brûler beaucoup de cycles ici.
pour (count2 = 0; count2 < temps ; count2 ++)
;
}
OK, cela devrait vous allez obtenir. Jouer avec ce code pour un peu et tirage au sort des lignes horizontales et verticales. Peut-être une boîte. Dans la section suivante, je vais parler de vous de courbes.
Tandis que vous programmez, vérifiez le label indie Kill Rock Stars. À côté de Matador, c’est un de mes étiquettes préférées. OK, cool.