//Ultraschallwerte auf Monitor anzeigen (Ultraschall -> US) #define Trigger_US 4 //Ultraschalltriggerpin #define Echo 2 //Ultraschallechopin unsigned long US_Takt; //alle 40 Millisekunden US neu initialisieren volatile unsigned long Echo_Time; //Laufzeit des Echos unsigned long Echo_Time_begin; //Anfang der US-Messung void setup() { pinMode(Trigger_US, OUTPUT); //Pin 4 als Ausgang festlegen pinMode(Echo, INPUT); //Pin 2 als Eingang festlegen attachInterrupt(digitalPinToInterrupt(Echo), US, FALLING); //Bekanntmachung: //Interrupt wird ausgelöst durch fallende Flanke an Pin "Echo" (Pin 2), es //soll dann die Funktion "US()" ausgeführt werden. Serial.begin(9600); //Baud Rate für serielle Übertrageung 9600 Bit/sec //Seriellen Monitor einschalten: //Werkzeuge / serieller Monitor } void loop() { //Endlosschleife //millis() liefert die Zeit die seit dem Einschalten des... //...Arduino Boards vergangen ist, in MILLIsekunden if(millis()- US_Takt > 40) { //40 ms vorbei ? digitalWrite (Trigger_US, HIGH); //Pin 4 für... delayMicroseconds(10); //...10us (Microsekunden)... digitalWrite (Trigger_US, LOW);//...HI triggern (von 0V auf 5V) Echo_Time_begin = micros(); //Start der Zeitmessung des US-Signals //micros() liefert die Zeit die seit dem Einschalten des... //...Arduino Boards vergangen ist, in MIKROsekunden US_Takt = millis(); //aktuelle Zeit in ms abspeichern } Serial.println(Echo_Time - Echo_Time_begin); //Laufzeit des Signals anzeigen //Die Zeile 32 unbedingt beim Wettlauf auskommentieren, braucht viel Zeit! //Aufgabe: Motor vorwärts drehen lassen, wenn ein Hindernis <15cm vor dem //US-Sensor ist, Motor stoppen } //Interrupt: Fallende Flanke an Pin 2 //Hierher springt der Mikrocontroller, wenn die Flanke am Echo-Pin von +5V auf 0V(GND) fällt void US (void) { Echo_Time = micros(); //aktuelle Zeit in us abspeichern }