Tu post lo habia visto antes, el que lo pongas de nuevo no quiere decir que te lo vayan a contestar. Y tampoco repitas el tema en otro subforo, va en contra de las reglas del foro, podrias haber posteado nuevamente en tu primer post.
El problema de tu programa es simple...
Para mover un servo, necesitas de una salida con forma de PWM, un tiempo en alto y uno en bajo, y que no se detenga NUNCA. Cual es el problema de tu programa, son 3:
- El primero es que el getc() es bloqueante, es decir, espera hasta que llegue un caracter, y si tenemos eso en cuenta el codigo de tu "PWM" no se repite nunca, se cumple una sola ves y luego se queda esperando un nuevo caracter. Deberias buscar sobre "kbhit()"
- Segundo, tu PWM debe tener una frecuencia fija... es decir Ton + Toff = T = 1/F = cte... en tu caso eso no se cumple... ejemplo para state 1, tenes que el delay total es de 2500+20 (2520us ) mientras en el otro estado es de 400+20 (420us).
- El que quieras manejar VARIOS servos quiere decir que los delays grandes no te van a servir. Y vas a tener que hacerlo con delays pequeños. Repetir los delayspequeños y segun la posicion que queres que este el servo actuar.
Debido a que sos nuevo en la programacion, no te voy a recomendar hacerlo por interrupcion, pero este ultimo caso seria el ideal.