TODOPIC

Otros Microcontroladores / Dispositivos programables => Arduino => Mensaje iniciado por: osmangutierrez en 09 de Mayo de 2023, 02:13:14

Título: Ayuda con millis
Publicado por: osmangutierrez en 09 de Mayo de 2023, 02:13:14
Hola a todos.
Estoy haciendo un proyecto en mi auto, consiste en que cada vez que pase las 5000 rpm encienda un led por 1 segundo y luego mantenerlo apagado, el motor llega a 8000 rpm.
ya tengo la lectura de las rpm del motor, por lo que necesariamente debe ser con millis().
quede aqui:
  if (rpm > 5000) {
  }
 :lol:
Título: Re:Ayuda con millis
Publicado por: scrwld en 09 de Mayo de 2023, 02:27:52
hola osmangutierrez, mira aquí creo que te va servir:

https://programarfacil.com/blog/arduino-blog/millis-micros-arduino/

luis lopez
Título: Re:Ayuda con millis
Publicado por: remi04 en 09 de Mayo de 2023, 03:09:43
Hola a todos.
Estoy haciendo un proyecto en mi auto, consiste en que cada vez que pase las 5000 rpm encienda un led por 1 segundo y luego mantenerlo apagado, el motor llega a 8000 rpm.
ya tengo la lectura de las rpm del motor, por lo que necesariamente debe ser con millis().
quede aqui:

Código: C
  1. if (rpm > 5000) {
  2.    led = 1;
  3.    unsigned long tiempo = millis();
  4.    while (millis() < (tiempo + 1000));
  5.     led = 0;
  6.   }

Algo así.

 :lol:
Título: Re:Ayuda con millis
Publicado por: osmangutierrez en 09 de Mayo de 2023, 09:02:03
Hola.
No puedo usar while() por que tengo que mantener la lectura de las rpm en todo el tiempo.  :?
Título: Re:Ayuda con millis
Publicado por: DominusDRR en 09 de Mayo de 2023, 10:18:08
Hola.
No puedo usar while() por que tengo que mantener la lectura de las rpm en todo el tiempo.  :?

Deberías usar multitareas (cooperativismo)


Conceptos de retardos asincrónicos:

Título: Re:Ayuda con millis
Publicado por: Eduardo2 en 09 de Mayo de 2023, 11:04:57
Hola a todos.
Estoy haciendo un proyecto en mi auto, consiste en que cada vez que pase las 5000 rpm encienda un led por 1 segundo y luego mantenerlo apagado, el motor llega a 8000 rpm.
ya tengo la lectura de las rpm del motor, por lo que necesariamente debe ser con millis().
quede aqui:
  if (rpm > 5000) {
  }
 :lol:

Crea una interrupción que después de estar el led 1" encendido lo apague.
Título: Re:Ayuda con millis
Publicado por: osmangutierrez en 11 de Mayo de 2023, 08:44:52
Gracias por los comentarios.
Me ayudaron los videos sobre el funcionamiento de millis()
es algo demasadio simple, pero lo solucione así:
Código: [Seleccionar]
void loop() {
  if (rpm >= 5000) {
    tActual = millis();
    Serial.println((tActual - tInicio));
    if (tActual - tInicio <= 1000) {
      digitalWrite(solenoid_pin, HIGH);
      digitalWrite(led_pin, HIGH);
    } else {
      digitalWrite(led_pin, LOW);
      digitalWrite(solenoid_pin, LOW);
    }
  } else {
    tInicio = millis();
  }
}
Título: Re:Ayuda con millis
Publicado por: DominusDRR en 11 de Mayo de 2023, 10:35:07
Gracias por los comentarios.
Me ayudaron los videos sobre el funcionamiento de millis()
es algo demasadio simple, pero lo solucione así:
Código: [Seleccionar]
void loop() {
  if (rpm >= 5000) {
    tActual = millis();
    Serial.println((tActual - tInicio));
    if (tActual - tInicio <= 1000) {
      digitalWrite(solenoid_pin, HIGH);
      digitalWrite(led_pin, HIGH);
    } else {
      digitalWrite(led_pin, LOW);
      digitalWrite(solenoid_pin, LOW);
    }
  } else {
    tInicio = millis();
  }
}

Eso que has hecho es un retardo asincrónico (if (tActual - tInicio <= 1000)), tal vez se pueda optimizar, pero la idea es esa.
Título: Re:Ayuda con millis
Publicado por: dogflu66 en 14 de Mayo de 2023, 08:59:33
Prueba algo similar a esto:
       While (true) {
      _millis = millis();

      If (rpm >= 5000) {
         flag = 1;
         LedYellow = 1;
         PreMillis = _millis;
      }

      If (flag == 1) {
         If ((_millis - PreMillis) >= 1000) {  'Wait time in mSec.
            PreMillis = _millis;  'The last value of _MILLIS is stored.
            LedYellow = 0;  'State of the led.
            flag = 0;
         }
      }
      }