[ Foro de C ]

Bucle for y while

16-Jan-2021 05:47
Ari Jair Tamayo Gutierrez
1 Respuestas

"CODIGO EN PIC C"

ESPERO QUE PUEDAN AYUDARME, PUSE MUCHOS COMENTARIOS AL CODIGO PARA QUE SEPAN DE QUE HACE CADA COSA.

Que tal comunidad de SpartanGeek, necesito su ayuda con los bucles mencionados en el titulo.
Estoy haciendo un programa para tomar lectura de un sensor de temperatura y realice ciertas acciones. Al llegar a una temperatura mayor o igual a 36 °C aumentara la velocidad de un motor hasta llegar al máximo (1023) y cuando sea menor la temperatura, bajara la velocidad del motor de 1023 a 511 que es la velocidad media del motor.

Utilizo el bucle for para aumentar y disminuir la velocidad del motor.

La pregunta es ¿Cómo puedo hacer que el motor se quede  girando al nivel máximo (temperatura>=36) y se quede a velocidad media (temperatura <36) y a la vez se pueda seguir ciclando infinitamente la lectura del sensor ?

¿Se puede salir y entrar a un ciclo cuantas veces quiera?

Les mostrare el código que tengo, en este código se sigue aumentando/disminuyendo la velocidad cada ves que se repite el bucle while.

Este es mi código:

void main()
{
  WHILE (true)
  {
     DHT11_read_data (&humedad,&temperatura);           //Toma lectura del sensor
     lcd_clear ();                                                                  //Limpia el LCD
     lcd_gotoxy (1, 1) ;                                                       // Posición de escritura LCD
     printf (lcd_putc, "Hum = %0.1f%%", humedad);        //Muestra la lectura de la humedad LCD
     lcd_gotoxy (1, 2) ;                                                      //Posición de escritura LCD
     printf (lcd_putc, "Tem = %0.1fC", temperatura);       //Muestra la lectura de la temperatura LCD
     
     printf ("Hum = %0.1f%%\r\n", humedad);              //Muestra la lectura de la humedad
     printf ("Tem = %0.1fC\r\n\r\n", temperatura);       //Muestra la lectura de la temperatura
     delay_ms (200);                                                      //Toma la lectura del sensor cada 200 ms
     
     IF (temperatura >= 36)
     {
       // 511 -> velocidad media | 1023 -> velocidad maxima
        //Aumentar a la velocidad máxima el motor
        FOR (DutyCycle = 511; DutyCycle < 1023; DutyCycle++)
        {
           set_pwm1_duty (DutyCycle);                     //Manda la velocidad actual al motor
           delay_us (300);                                          // incremento rápido de velocidad
        }
 
        IF (DutyCycle == 1023)                             // sí llego a la velocidad máxima
        {
           set_pwm1_duty (1023);                         // se mantendrá a esa velocidad el motor
        }
     }
    else                        // Mismo código que el de arriba, solo que para que disminuya la velocidad
     {
        //Regresa el motor a velocidad media
        for (DutyCycle = 1023; DutyCycle > 511; DutyCycle--)
        {
           set_pwm1_duty (DutyCycle) ;
           delay_us (300);
        }

        if (DutyCycle == 511)                   // sí llego a la velocidad máxima
        {
           set_pwm1_duty (511);                // se mantendrá a esa velocidad el motor
        }
     }
  }
}


18-Jan-2021 23:35
Invitado (mario)

hola ari jair

decirte que las mayúsculas en un foro significa
gritar y no me parece de buen gusto

también que hacer copia y pega ayuda pero hay
que fijarse y no colarse como es el caso y pedir
ayuda en este foro y agradeces la ayuda a otra
comunidad :-(

bueno al código:

ten en cuenta que solo he programado alguna vez arduino
pero creo que tu problema es más con delay() y los for

decirte que no has dejado todo el código ya que
faltan las librerías definición de variables como
DutyCycle etc

- La pregunta es ¿Cómo puedo hacer que el motor se
quede  girando al nivel máximo (temperatura>=36)
y se quede a velocidad media (temperatura <36) y
a la vez se pueda seguir ciclando infinitamente la
lectura del sensor ?

- quiero entender que quieres controlar el motor y
que el programa siga comprobando la temperatura
y no se quede atascado en bucles y esperas

el problema que le veo al menos en arduino, que ya
se que no es un pic tal cual, pero en la programación
de arduino delay es una función que deja el programa
parado hasta que pasa el tiempo fijado, y es un
problema porque como dices no se hace nada más

una solución es capturar el tiempo del sistema y
comprobar en cada ciclo del while si se ha superado
el tiempo que pretendo que espere

si buscas por la red encontrás varias soluciones yo
te paso una al delay y a los for que creo no hacen falta

código:
https://www.online-ide.com/S6LencO1Dp

suerte ;-)






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)