Lineare Geschwindigkeitsmessung? (Hallsensor?)

Hallo,

mir fällt nochwas auf. Die Variable start wird rot marktiert beim kompilieren. Das bedeutet sie wird von der Arduino IDE schon verwendet. Also Namen ändern.

Desweiteren funktioniert Dein Sketch zwar, aber wenn Du nur den 2. Hallsensor ständig schalten würdest, bekommst Du unsinnige Werte, weil Deine Startzeit veraltet ist.

Hab das mal mit if und while geändert. Die Messung startet erst, wenn der erste Hallsensor sein Low Signal liefert. Egal was vorher der 2. Sensor macht. Dann wird mittels while gewartet bis der 2. Sensor sein Low Signal liefert. Damit ist die Messung beendet. Die LED signalisiert jetzt das eine Messung läuft, nicht mehr das ein einzlner Sensor geschalten hat. Jetzt kannst Du weitere Sensoren mittels while einbauen um vielleicht Zwischenergebnisse von Teilstrecken zu erhalten.

sollte eigentlich funktionieren:

const int HallSens_1 = 9;     
const int HallSens_2 = 12;     
const int ledPin =  13;     

unsigned long time_1, time_2, elapsed;

void setup() {
 
  pinMode(ledPin, OUTPUT);      // initialize the LED pin as an output:
  pinMode(HallSens_1, INPUT);   // initialize the hall effect sensor pin as an input: 
  pinMode(HallSens_2, INPUT);   // initialize the hall effect sensor pin as an input:
  
  Serial.begin(9600);  
}

void loop() {
  
  if (digitalRead(HallSens_1) == LOW)   // start Stopwatch, wenn 1. Hallsensor auf LOW    
    {
     time_1 = micros();                 // 1. Zeitnahme
     digitalWrite(ledPin, HIGH);        // turn LED on "Messung gestartet"
         
     while (digitalRead(HallSens_2) == HIGH) {}  // wenn 2. Hallsensor auf HIGH, warten bis wieder LOW
     time_2 = micros();                          // 2. Zeitnahme
     
     digitalWrite(ledPin, LOW);         // turn LED off "Messung beendet"
     
     // Berechungen und Ausgaben  
     elapsed = time_2 - time_1;        // Differenz bilden
     Serial.print("Start: "); Serial.print(time_1);  Serial.println(" microseconds");
     Serial.print("Ende: ");  Serial.print(time_2);  Serial.println(" microseconds");
     Serial.print("Dauer: "); Serial.print(elapsed); Serial.println(" microseconds");
    }    
    
}  // Ende loop