Autor Tema: Ayuda con millis  (Leído 649 veces)

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

Desconectado osmangutierrez

  • PIC10
  • *
  • Mensajes: 13
Ayuda con millis
« 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:

Desconectado scrwld

  • PIC12
  • **
  • Mensajes: 52
Re:Ayuda con millis
« Respuesta #1 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

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Ayuda con millis
« Respuesta #2 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:

Desconectado osmangutierrez

  • PIC10
  • *
  • Mensajes: 13
Re:Ayuda con millis
« Respuesta #3 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.  :?
« Última modificación: 09 de Mayo de 2023, 09:04:42 por osmangutierrez »

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1890
    • Sicoy
Re:Ayuda con millis
« Respuesta #4 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:

« Última modificación: 09 de Mayo de 2023, 10:23:57 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 947
Re:Ayuda con millis
« Respuesta #5 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.

Desconectado osmangutierrez

  • PIC10
  • *
  • Mensajes: 13
Re:Ayuda con millis
« Respuesta #6 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();
  }
}

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1890
    • Sicoy
Re:Ayuda con millis
« Respuesta #7 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.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3495
Re:Ayuda con millis
« Respuesta #8 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;
         }
      }
      }
« Última modificación: 14 de Mayo de 2023, 09:02:18 por dogflu66 »
Saludos desde Granada, España.