Autor Tema: fallo con millis();  (Leído 205 veces)

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

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 190
fallo con millis();
« en: 09 de Marzo de 2020, 05:07:03 »
Buenas que tal!?

tengo el siguiente código pero no hace lo que pretendo. Busco que cada tiempo 'BIG' se active y se desactive, como un toggle pero solo me lo hace una vez. Está 1 segundo funcionando y luego se queda parado para siempre. ¿Cómo puedo hacer conseguirlo?

Código: [Seleccionar]
const unsigned long BIG = 1000;

unsigned long top;
unsigned long t;
 
void setup() {}

void loop() {
 if ( presion_baja < 2.4 ) {
  top = BIG;
  if ( millis()-t >= top){
    digitalWrite(motor_i,0);
    digitalWrite(motor_d,0);
    }
    else {
      digitalWrite(motor_i,1);
      digitalWrite(motor_d,0);   
       }
    }
   t = millis();

}

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:fallo con millis();
« Respuesta #1 en: 09 de Marzo de 2020, 05:32:25 »
Para eso lo ideal sería usar un timer con una interrupción.

En cuanto a tu programa:
1.- ¿ de donde sale presion_baja ?, ni se define, ni cambia en ningún momento.
2.- t no tiene asignado ningún valor la primera ver que se consulta con el IF
3.- t no lo debes de cargar constantemente con millis(), solo cuando se alcancen los 1000ms
4.- ¿ Para que creas y cargas top si le asignas siempre un valor de 1000 ?.
5.- No tiene sentido poner digitalWrite(motor_d,0); en las dos condiciones del IF


Prueba estos cambios:

#define BIG = 1000;
unsigned long t;

void setup()
{
     t = millis();
}

void loop()
{
   if (presion_baja < 2.4)
     {
        if ( millis()-t >= BIG)
         {
           digitalWrite(motor_i,0);
           t = millis();
          } else  digitalWrite(motor_i,1);
          digitalWrite(motor_d,0);
      }
}
« Última modificación: 09 de Marzo de 2020, 05:54:51 por planeta9999 »

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 190
Re:fallo con millis();
« Respuesta #2 en: 09 de Marzo de 2020, 05:49:21 »
Buenas!

Gracias por el aporte!

El código lo he puesto escueto para que vieran como tengo programado ese bucle en cuestión por eso parte del código no sale.

Ahora sí parece que se mueve! pero solo puedo manejar el tiempo en que están los dos a '0', el else no puedo controlar su tiempo??


 

anything