Es posible usar las dos interrupciones al mismo tiempo en el Arduino UNO

Hola Foro

Soy nuevo en ARDUINO y estoy usando la interrupción del pin2 en el ARDUINO UNO para medir las RPM de un motor.

Ahora quiero medir la velocidad (RPM) de otro motor al mismo tiempo que el primero , pero con la interrupción del pin3 .

He intentado usar el mismo código, pero no funciona.

De ser posible , como debería escribir el código para hacer la dos mediciones?

Este es el programa que estoy utilizando

volatile int contador = 0; // Variable entera que se almacena en la RAM del Micro

void setup() {
Serial.begin(57600);
attachInterrupt(0,interrupcion0,RISING); // Interrupcion 0 (pin2)
} // LOW, CHANGE, RISING, FALLING

void loop() {
delay(999); // retardo de casi 1 segundo
Serial.print(contador*60); // Como son dos interrupciones por vuelta (contador * (60/2))
Serial.println(" RPM"); // El numero 2 depende del numero aspas de la helise del motor en prueba
contador = 0;
}

void interrupcion0() // Funcion que se ejecuta durante cada interrupion
{
contador++; // Se incrementa en uno el contador
}
Gracias

Primer que nada, postea tu código correctamente según las Normas del foro, punto 7.

Si, obviamente se pueden usar ambas.
Por supuesto con una nueva rutina de servicio (por ej. interrupcion1()), y claro, otro contador.

Al mismo tiempo usando dos delay() ni loco!!!
Un delay para las dos interrupciones en todo caso o de otro modo sin delay().
El problema es que se puede jugar con delay() para prender leds e incluso para medir RPM pero en este caso tienen una razón de ser.
Ahora si quieres usar dos ISR (interrupciones) no puedes detener el loop las veces que se te de la gana. Debes hacerlo con coherencia.
Traducción. La interrupcion cuenta pulsos. Lo hace usando contador que se incrementa con cada flanco ascendente en tu caso RISING.
Todo eso lo hace durante 999mseg mas las perdidas o sea 1mseg mas aprox. Total 1 seg
Pulsos x 1 segun traducido a pulso por minuto te da RPM
Si pones dos interrupciones deja el mismo lapso de tiempo y medi los dos contadores, uno por una ISR y otra por la segunda ISR (interrupción).

Entiendo,lo tomare en cuenta las normas en las próximas preguntas.

Lo que hice fue repetir el código a continuación del primero ,pero cambiando obviamente la interrupción, por la del pin3 y cambiando el nombre de las variables. Pero lo que no tengo claro es desde donde debo iniciar el segundo código, si debo copiarlo a continuación del primero, como otro independiente, o debo insertarlo en el mismo cuerpo,etc.

Gracias.

Entiendo que el código que estoy usando es el correcto, pero estaría bien si lo utilizo para la lectura del segundo motor ? O debo agregar o cambiar algo?

Como es mi primera experiencia en programación, no tengo clara ,en este caso la estructura de todo el programa es decir ya para leer las dos velocidades. Si copiarlo íntegramente a continuación del primero o algo así.

No Sr. cuando un moderador te pide algo no lo dejas para la próxima, en la próxma no debería reclamarte lo mismo. Sino mira el foro y observarás como se llega a sancionar si el OP no hace caso.
Asi que edita por favor!!

Como no has cumplido con lo solicitado yo condiciono mi ayuda justamente a que respetes las normas del foro.

yo tambien soy nuevo. recién agarre el arduino.
Fijate si podes usar millis() y un contador de tiempo en lugar de un Delay que te para completamente todo por 1 segundo.

Lo voy editar y enviar nuevamente, no hay problema, gracias por la aclaración

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.