Taster entprellen mittels Bounce-Library

Hallo!

Wir haben für Ausbildungszwecke den Auftrag bekommen aus diversen Codes ein zusammenhängendes Programm zu schreiben mit dem ein Fahrzeug mittels Taster losfahren und vor einem Hindernis stehen bleiben soll. Dazu soll auch eine Abstands- und Geschwindigkeitsangabe über ein Display angezeigt werden.
Bis hierhin funktioniert der Code soweit, das Problem für mich ist das Entprellen des Tasters. Dafür habe ich in meiner Recherche die Library Bounce2 gefunden. Ich habe diese versucht in den Code einzubinden, es kommt auch keine Fehlermeldung. Allerdings denke ich, dass das Entprellen nicht richtig funktioniert. Der Taster benötigt teilweise etwas lange bis er anspricht.
Da ich noch ein Anfänger auf diesem Gebiet bin möchte ich mich an die Community hier wenden und um ein wenig Hilfe bitten.

Noch eine kurze Zusammenfassung zum Programm:

Folgende Punkte sind für den ersten Schritt notwendig:

  • Abstandsmessung mittels Sensor
  • Start/Stop mittels Taster (Entprellt, stellt derzeit mein Problem dar)
  • verlangsamen bei Hindernis bis zum Stehenbleiben
  • Anzeige der Entfernung zum Hindernis und aktuelle Geschwindigkeit auf Display

Der angehängte Code ist noch im Arbeitsstatus, also bitte die Unordnung darinnen zu entschuldigen :-[

Danke im Voraus und schöne Grüße!

FTS_Edge_V12.ino (14.6 KB)

Das Problem sind die delay in deinem Sketch:

...
  // Distanzmessung und Display
  Demostring = laser_distance;
  displayUpdate(Demostring);
  delay(250);

  Entfernung = readLaser();
  delay (50);                                                                                 // Lassen wird er Lesung etwas Zeit – da der Sensor einen eigenen MC hat bremst uns das nicht
  Serial.println("Entfernung in mm: ");
...

Damit kannst Du dir die ganze Entprellung auch gleich sparen. Wenn der Taster nur alle 5-10ms abgefragt wird, ist er bereits entprellt. Und wenn er nur weniger als alle 300ms abgefragt wird, dann fühlt er sich auch träge an.

Hallo,

um deine harten delays zu ersetzen musst du millis anwenden, damit loop ungebremst durchlaufen kann.

Theseus erklärt millis()

GuntherB - BlinkwithoutDelay - Die Nachtwächtererklärung

Desweiteren solltest du dich mit dem Wertebereich von Datentypen befassen, ansonsten bekommst du Probleme im Umgang mit den Sensorwerten. GitHub - pololu/vl53l0x-arduino: Pololu Arduino library for VL53L0X time-of-flight distance sensor

Danke für die Antworten :slight_smile:

Ich habe die delays soweit mal rausgeschmissen, funktioniert immer noch und wirkt flüssiger. Ich hatte die delays aus den Beispielcodes, die wir bekommen hatten, einfach mit übernommen. Es waren in Summe noch deutlich mehr delays drinnen, nur bei den beiden war ich mir nicht sicher ob die benötigt werden. Bin leider erst noch am Anfang mich mit dem Ganzen zu beschäftigen und übersehe bzw. verstehe noch nicht alles so genau. :-[

Unsere Vortragenden hatten, nachdem ich wegen millis nachgefragt hatte, gemeint, dass der Befehl erst kommt und wir den noch nicht benötigten. Habe die Richtung dann auch nicht weiter verfolgt. -.-
Die Links werde ich mir in weiterer Folge noch genauer anschauen, danke dafür.

Ich werde mich erst mal dem zweiten Teil für die erste Überprüfung widmen und mich bei Bedarf nochmal an euch wenden. :slight_smile:

Danke nochmal.