Étape 14 : plus d’émissions (angles et courbes)
drawLeft(2)
« drawUp(1) »
et qui en boucle pendant un certain temps, mais ça ne sera jamais tout ce que lisse.
Ne serait-il pas beaucoup refroidisseur pour exécuter les deux moteurs en même temps et exécuter le moteur vertical (dans ce cas) la moitié aussi vite que le moteur vertical ?
La façon de le faire est avec PWM. Pour ceux d'entre vous qui n’êtes pas familier avec cette chose merveilleuse, PWM est l’acronyme de « Pulse Width Modulation » et est une façon de rapprocher une valeur comprise entre 0 et 1 dans un circuit numérique.
Voici un bref aperçu :
Disons que j’ai une puce qui peut produire des 0 ou 5 volts. Cette puce pousse un moteur électrique, et je voudrais vraiment exécutez-le à moitié vitesse, ou 2,5 volts. Je ne peux pas produire cette tension directement à partir de ma puce numérique, mais peut-être que si j’ai sortie 0 Volt pendant un certain temps, puis de 5 volts pour le même laps de temps, la production moyenne serait de 2,5 volts. Si je fais cela très lentement, le moteur se branler sur et en dehors, mais si je passe très vite entre 0 et 5 volts, le moteur se déroulera sans heurts. C’est parce que le moteur a un effet d’amortissement et pour certains haute fréquence, ne peut répondre aussi rapidement que le signal est en évolution, effectivement avec une moyenne de la tension à travers elle. Hourra ! Maintenant je peux contrôler la vitesse du moteur !
"Si je veux produire une tension différente, disons, 3 volts, je voudrais juste garder le signal à 5 volts pour 3/5 du temps. 2 volts, 2/5 du temps. Ad nauseam"
OK, donc en pratique, je voudrais écrire une routine PWM qui peut produire une onde pwm à deux moteurs simultanément.
Sub pwm (unsigned char horizontal, unsigned char vertical, unsigned char horizontal_direction, unsigned char vertical_direction, int grandeur)
{
comte d’unsigned char, sortie ;
sortie = 0 ;
int longueur ;
pour (int longueur = 0; longueur < grandeur ; longueur ++)
pour (count = 0; count < 255 ; count ++)
{
if(Count<horizontal)
Output|=_bv(horizontal_direction) ;
if(Count<vertical)
Output|=_bv(vertical_direction) ;
PORTB = output ;
}
}
L’angle que vous dessinez à (par rapport à l’horizontale) sera assez proche de atan(vertical/horizontal).
Maintenant vous avez une fonction qui vous permet de spécifier la grandeur et la direction d’un vecteur dessiné. Il s’agit de la composante de base, fondamentale de n’importe quel moteur de rendu graphique vectoriel. Sweet !