Paso 14: más programas (ángulos y curvas)
drawLeft(2)
"drawUp(1)"
y lazo durante un tiempo, pero que nunca será tan suave.
¿No sería mucho más fresco para ejecutar ambos motores a la vez y ejecutar el motor vertical (en este caso) la mitad tan rápidamente como el motor vertical?
La forma de hacerlo es con PWM. Para aquellos de ustedes que no están familiarizados con esta cosa maravillosa, PWM significa "Pulse Width Modulation" y es una forma de aproximar un valor entre 0 y 1 en un circuito digital.
Aquí está un breve resumen:
Digamos que tengo un chip que puede producir ya sea 0 o 5 voltios. Este chip lleva un motor eléctrico, y realmente me gustaría correr a media velocidad, o 2,5 voltios. Yo no puedo producir tensión directamente desde mi chip digital, pero tal vez si había salida de 5 voltios y 0 voltios para un rato por la misma cantidad de tiempo, la producción media 2,5 voltios. Si lo hago muy lentamente, el motor se tirón encendido y apagado, pero si muy rápido cambiar entre 0 y 5 voltios, el motor funcionará sin problemas. Esto es porque el motor tiene un efecto de amortiguación y para algunos de alta frecuencia, no puede responder tan pronto como la señal está cambiando, efectivamente un promedio de la tensión a través de él. ¡ Hurra! Ahora puedo controlar velocidad del motor.
"Si quiero producir un voltaje diferente, digamos, 3 voltios, sólo mantener la señal de 5 voltios 3/5 del tiempo. 2 voltios, 2/5 del tiempo. Frecuentement ad"
OK, así que prácticamente, quisiera escribir una rutina de PWM que puede hacer salir una onda pwm ambos motores simultáneamente.
void pwm (unsigned char char sin signo, horizontal vertical, unsigned char horizontal_direction, vertical_direction unsigned char, int magnitud)
{
cuenta char sin signo, de la salida;
salida = 0;
int longitud;
para (int longitud = 0; longitud < magnitud; longitud ++)
para (cuenta = 0; cuenta < 255; cuenta ++)
{
if(Count<horizontal)
OUTPUT|=_BV(horizontal_direction);
if(Count<vertical)
OUTPUT|=_BV(vertical_direction);
PORTB = salida;
}
}
El ángulo que dibuja en (respecto a la horizontal) será bastante cerca de atan(vertical/horizontal).
Ahora tienes una función que permite especificar la magnitud y dirección de un vector dibujado. Este es el componente básico, fundamental de cualquier procesador de gráficos del vector. Dulce!