Autor Tema: switch para mover un servo  (Leído 1674 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Superboy

  • PIC10
  • *
  • Mensajes: 23
switch para mover un servo
« en: 05 de Noviembre de 2018, 17:11:25 »
Hola buena noche, apenas empiezo a programar y me gustaria saber si alguien puede ayudarme a saber como puedo definir en el codigo que tengo las variables para manejar varios servos, este es un switch en el que yo toco un boton y el servo gira a 180° y si vuelvo a tocar el boton regresa a 0°
el codigo es este:

Código: C++
  1. val1=getc();
  2.  
  3.    
  4.     if ((val1=='1' && val2=='2'))
  5.     {
  6.    
  7.     state=1-state;
  8.     delay_us(20);
  9.    
  10.     }
  11.     val2 = val1;
  12.        
  13. if (state == 1)
  14. {
  15.      output_high(servo);
  16.      delay_us(2500); /// 180
  17.      output_low(servo);
  18.      delay_ms(20);
  19.      output_high(LED1);  
  20. }
  21.  
  22. else
  23. {
  24.      output_high(servo);
  25.      delay_us(400); /// 0
  26.      output_low(servo);
  27.      delay_ms(20);
  28.      output_low(LED1);  
  29.  
  30. }

estoy enviando por programación serial los caracteres '1' y '2' de val1 y val2 pero cuando quiero manejar otro servo no funciona el programa y ya intente definiendo un state1, definiendo un val3 y un val4 para otro servo, pero no funciona, espero me puedan ayudar y me haya explicado bien.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:switch para mover un servo
« Respuesta #1 en: 05 de Noviembre de 2018, 17:26:54 »
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.