okay kann ich das irgendwie ausmerzen ? oder muss ich das nun doch mit Unterprogrammen machen?
Mir fällt gerade auf, dass sich die US-Sensoren wohl doch ins Gehege kommen könnten.
Fallbeispiel:
Sagen wir ein Hindernis 1m ist entfernt
- der 1. US-Sensor wird abgefragt und liefert kein Ergebnis, weil er nach 70cm nicht mehr 'fragt'
- gleich danach wird der 2. abgefragt und wird das Echo des ersten erfassen, allerdings wird dieser 'behaupten', es sei ein Hindernis in 30cm Entfernung (100cm-70cm=30cm)
okay kann ich das irgendwie ausmerzen ? oder muss ich das nun doch mit Unterprogrammen machen?
Meine Homepage www.belagra.de
Ich würde testen, wie weit die US-Sensoren messen können, dann mit dieser maximalen Messdistanz die Zeit berechnen, die mindestens zwischen 2 Messungen vergehen muss.
Im Prg würde ich dann die Sensoren einzeln abfragen und jeweils in der freien Zeit bis zur nächsten Messung andere Dinge wie z.B. Funk auswerten.
Okay hört sich nach dem richtigen Weg an. Nur bis ich das testen kann, vergeht noch ein bisschen, denn ich muss die Sensoren noch bestellen und die Halterungen fertigen!
Bis das dann am Roboter so sitzt wie ich das gerne hätte vergeht noch bisschen, das ich das testen kann. Werde es im Hinterkopf behalten und dann an der Stelle weiter machen
wenn das dann Spruch reif ist, genau so wie mit den Bumpern. Schön eins nach dem anderen^^
Meine Homepage www.belagra.de
Kannst du berechnen: Schallgeschwindigkeit und die maximale Reichweite: zwischen 4 und 5m schaffen sie. Wenn du 6m ansetzt dürftest du auf der sicheren Seite sein. Musst die Entfernung natürlich doppelt nehmen, weil ja das Echo zurück kommt.
Das is halt ein Nachteil der US-Sensoren: besonders schnell sind die Brüder nicht.
Grüssle, Sly
..dem Inschenör ist nix zu schwör..
Das heist wenn man alle 40ms (mit ein bisschen Sicherheit ) die Sensoren abfragt, sollte es eigentlich gehen! oder ?
nur ob 40 oder 70ms das is doch so schnell da macht das nichts oder ? wenn man bisschen Sicherheit dazu gibt?
- - - Aktualisiert - - -
haben wir ja schon gestern geklärt, das hier einer nach dem andern mit ODER abgefragt wird!
Wie sag ich ihm jetzt am besten, das er 40ms warten soll zwischen jeder ODER Abfrage?
Code:void loop() { if(VORNE_MITTE.ping_cm() || VORNE_RECHTS.ping_cm() || RECHTS.ping_cm()) { zurueck_LINKS(); } else { vor(); } if(VORNE_LINKS.ping_cm() || LINKS.ping_cm()) { zurueck_RECHTS(); } else { vor(); } }
Meine Homepage www.belagra.de
währe es denkbar mit Hilfe von millis() zum Ziel kommen? da ich kein Delay verwenden möchte weil sonst ja das ganze Programm angehalten wird?
Meine Homepage www.belagra.de
Ich hab da mal was vorbereitet:
Code:// ----- Ultraschallsensoren (US) ----- #include <NewPing.h> #define MAX_DISTANCE 70 // 70 cm sind maximale Distanz, Werte darüber sind uninteressant #define ANZAHL_SENSOREN_US 5 NewPing lUS (1, 2, MAX_DISTANCE); // jeweils die Pins eintragen NewPing lvUS(1, 2, MAX_DISTANCE); NewPing mUS (1, 2, MAX_DISTANCE); NewPing rvUS(1, 2, MAX_DISTANCE); NewPing rUS (1, 2, MAX_DISTANCE); NewPing sensorenUS[ANZAHL_SENSOREN_US] = {lUS, lvUS, mUS, rvUS, rUS}; enum SENSOREN_US { LINKS_US, LINKS_VORNE_US, MITTE_US, RECHTS_VORNE_US, RECHTS_US}; // ----- END_Ultraschallsensoren ----- #define MIN_TIME 35 // minimaler zeitl. Triggerabstand in ms void setup() {} void loop() { // Variablen für Zeitpunkt und Sensornummer static unsigned long timeMemory = 0; static byte aktuellerSensor = LINKS_US; // aktuellen US-Sensor abfragen // (ist MAX_DISTANCE unterschritten?) if(sensorenUS[aktuellerSensor].ping_cm()) { switch (aktuellerSensor) { case LINKS_US : // tuwas(); // Hier jeweils auf Hindernis reagieren break; case LINKS_VORNE_US : // tuwas(); break; case MITTE_US : // tuwas(); break; case RECHTS_VORNE_US: // tuwas(); break; case RECHTS_US : // tuwas(); break; } } // Abfrage eines US-Sensors beendet, jetzt Zeit nutzen: while (millis()-timeMemory < MIN_TIME) { // nutzeZeit(); } // auf nächste Abfrage vorbereiten timeMemory = millis(); // alle Sensoren abgefragt? -> Zähler zurücksetzen if (++aktuellerSensor > RECHTS_US) aktuellerSensor = LINKS_US; }
Geändert von Sisor (18.08.2014 um 19:57 Uhr)
uffff ... okay.
Also, du hast das gemacht was ich auch schon vor hatte und nicht hinbekommen hab ( schäm )
Die NEW PING Library kann ja bis zu 15 Sensoren verwalten genau so wie du es gemacht hast!
Nur vom Loop Teil verstehe ich das switch / case / brake nicht ganz ....
Also wie ich sehe is das die bestmögliche Lösung, aber das ich nichts anderes wie vorher oder ?
nur das du Global eine Zeit festgelegt hast in der Reihenfolge mit Pause die Sensoren abfragt?
Meine Homepage www.belagra.de
Lesezeichen