Hallo
Ist dir klar, dass die Odometrie-Werte keine Impulse sind sondern nur die vom Sensor gemessene Helligkeit bedeutet? Die mit OdometrieData() eingelesenen Werte schwanken deshalb auch im Stillstand.Da das auch mal sein kann, dass der Asuro beim fahren die 2 gleichen Werte bekommt...
Der Werteverlauf (ohne Fremdlichteinflüsse) bewegt sich nahezu sinusförmig zwischen min- und Maxwert. Die Kunst bei der Odometrie besteht nun darin, aus diesen Werten einen Flankenwechsel zu erkennen. Ansätze und umfangreiche Diskussionen (teilweise mit sehr aufschlussreichen Diagrammen) gibt es schon ein paar hier im Forum. Um so eine Stillstandserkennung zu Programmieren benötigt man leider schon etwas höhere Weihen:
https://www.roboternetz.de/phpBB2/ze...ag.php?t=49901
Eine Programmgrenze sehe ich hier:
Wenn PollSwitch() "Störungen" einfängt, wird jedesmal eine Sleep(255)-Pause eingefügt.Code:else if (PollSwitch() != 0) { Sleep(255); if(PollSwitch() != 0) {
Effektiver wäre folgender Ansatz für PollSwitch():
Dafür gibt es aber auch andere Lösungsansätze.Code:#include "asuro.h" char t1, t2; int main (void) { t1=0; // mit "keine Taste" vorbelegen while(1) { t2=t1; // alten Wert der Tasten merken t1=PollSwitch(); // aktuellen Wert einlesen // t1=PollSwitch(); // eventuell nötig damit der ADC sauber umschalten kann if(t1 && t1==t2) // nur wenn Taste gedrückt und beide Werte gleich sind { // Ab hier stehen dann alle Tastenfunktionen: // if(t1==1 // K6 // if(t1==32 // K1 // if(t1||&b111000) // K4 oder K5 oder K6 } // Linienabfrage // Odometrie // und was sonst noch nötig ist. } return 0; }
Gruß
mic







Zitieren

Lesezeichen