Algunas dudas sobre Interrupciones.

Hola, estoy haciendo una especie de encendido electronico para un coche antiguo de platinos.. Bien ahora con las interrupciones no estoy yo muy seguro como debe ser... Creo que deberia montar todo el calculo sobre la interrupcion, ya que el calculo siempre es necesario para obtener las rpm y asi cortar el encendido cuando se pasa de revoluciones o deberia dejar el calculo en el loop??

Posteo codigo haver que os parece..

const byte interruptPin = 2;
volatile unsigned long cont_rpm;
int corte = 1800;
int rpm_actuales;

void setup() {
  Serial.begin(9600);

  pinMode(5,OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), Carga, RISING);
  digitalWrite(5,LOW);
}

void loop() {
  static unsigned long rpm_ant;
  static unsigned long t_anterior;
  rpm_ant=cont_rpm;
  t_anterior=millis();

  delay(100); 

  rpm_actuales=(cont_rpm-rpm_ant)/(2.0*(millis()-t_anterior)/60000);
 
  Serial.println(rpm_actuales);
}


void Carga(){
  if (digitalRead(2) == LOW && rpm_actuales <= corte ){
  digitalWrite(5,HIGH);
  }else digitalWrite(5,LOW);
  cont_rpm++;
 
}

Muchas Gracias por adelantado :slight_smile:

Tal como esta, es correcto.
A pesar de que haces algo mas que contar las RPM (cont_rpm++) las instrucciones previas no agregan demasiado tiempo.
Diferente es hacer cálculos matemáticos o una salida Serial, o poner delay como he visto en otras consultas.

El cálculo hazlo por fuera, en el loop tal como lo estas haciendo!