Al probar de mover todos los servos usando threads, observamos que se producia un movimiento más lento y entrecortado (a trompicones), ya que al parecer nuestra placa era incapaz de ejecutar un programa con ocho hilos a la vez. Así que estamos provando otro método que funcione mejor, se trata de la clase OutputCompare.
Utilizando esta clase se puede configurar uno o varios pines para que retengan su salida en el estado deseado durante un tiempo concreto. El OuputCompare es muy fácil de implementar ya que no es necesario generar la señal PWM que activa los servos, simplemente tenemos que darle el valor del ancho de pulso y la espera (tiempo que dura el valor alto y bajo).
Utilizando esta clase se puede configurar uno o varios pines para que retengan su salida en el estado deseado durante un tiempo concreto. El OuputCompare es muy fácil de implementar ya que no es necesario generar la señal PWM que activa los servos, simplemente tenemos que darle el valor del ancho de pulso y la espera (tiempo que dura el valor alto y bajo).
A continuación, mostramos un sencillo ejemplo para mover el servo a tres posiciones distintas:
public static void Main()
{
OutputCompare oc = new OutputCompare((Cpu.Pin)FEZ_Pin.Digital.Di0, true, 2);
while (true)
{
oc.Set(true, new uint[] { 2200, 17800 }, 0, 2, true); // Servo hacia la derecha
Thread.Sleep(1000);
oc.Set(true, new uint[] { 1200, 1800 }, 0, 2, true); // Servo en el centro
Thread.Sleep(1000);
oc.Set(true, new uint[] { 200, 19800 }, 0, 2, true); // Servo hacia la izquierda
Thread.Sleep(1000);
}
}
No hay comentarios:
Publicar un comentario