IR Obstacle Sensor

Guten Tag,

ich studiere Ingenieurwesen im Bereich Industriemesstechnik und befasse mich derzeit mit Platinencomputern.
Zudem bastle ich sehr gerne an Motorrädern und kopple alles ein wenig.

Ich möchte einen Drehzahlmesser modulieren mit Hilfe eines IR Sensors und einem Propeller. Hieran klebe ich Alufolie.

Die Drehzahlen sind vermutlich so bis 5000rpm möglich. Der Bereich ist aber erstmal nebensächlich.

Bisher habe ich einen Zähler implementiert, der mit jedem Impuls hochzählt.

Meine Frage an euch.
Wie kann ich es am Besten einbringen, dass immer nur weitergezählt wird, wenn es eine Unterbrechung gab? Also er nicht weiterzählt, wenn bspw. 15000rpm bei rum kommen würden und somit nur noch ein durchgehender Impuls erzielt wird.

Leider habe ich die letzten Tage nichts passendes gefunden.

Ich bin noch nicht lange dabei. Generell beim Probieren. Also programmiere ich wahrscheinlich noch sehr umständlich. Vielleicht habt ihr Tipps, wie ich den Part kürzer schreiben kann, bei dem LEDs angesteuert werden.

int n = 500;            // n Anzahl der Impulse
int Z;                // Z INPUT des Sensors 0 oder 1

void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
}

void loop() {{

int previousmillis = millis();
  Z = digitalRead(A0); // LOW or HIGH
  if ( Z != HIGH){    // Obstacle!
    n++;
  }

  if ( n > 500){
    digitalWrite(A1, HIGH);
      if ( n > 1500){
    digitalWrite(A2, HIGH);    // LEDs
      if ( n > 2500){
    digitalWrite(A3, HIGH);
      if ( n > 3500){
    digitalWrite(A4, HIGH);
      if ( n > 4500){
    digitalWrite(A5, HIGH);
  }}}}}


  int currentmillis = millis();
  int limit = currentmillis - previousmillis;
{ 

  Serial.print("");
  Serial.println(n);


int overallmillis = currentmillis - previousmillis;
Serial.println(overallmillis);

ich weis nicht ob ich deine Frage richtig verstanden habe, aber versuch es mal so

int n = 500;            // n Anzahl der Impulse
bool Z, Zalt;                // Z INPUT des Sensors 0 oder 1

void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
}

void loop() {

uint32_t previousmillis = millis();
  Z = digitalRead(A0); // LOW or HIGH
  if ( !Z && Z !=Zalt){    // Obstacle!
    n++;
    Z = Zalt;
  }

  if ( n > 500){
    digitalWrite(A1, HIGH);
      if ( n > 1500){
    digitalWrite(A2, HIGH);    // LEDs
      if ( n > 2500){
    digitalWrite(A3, HIGH);
      if ( n > 3500){
    digitalWrite(A4, HIGH);
      if ( n > 4500){
    digitalWrite(A5, HIGH);
  }}}}}


  uint32_t currentmillis = millis();
  uint32_t limit = currentmillis - previousmillis;
{

  Serial.print("");
  Serial.println(n);


uint32_t overallmillis = currentmillis - previousmillis;
Serial.println(overallmillis);
}}