TODOPIC

Otros Microcontroladores / Dispositivos programables => Arduino => Mensaje iniciado por: Kspids en 09 de Marzo de 2020, 05:07:03

Título: fallo con millis();
Publicado por: Kspids 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();

}
Título: Re:fallo con millis();
Publicado por: planeta9999 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);
      }
}
Título: Re:fallo con millis();
Publicado por: Kspids 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??