Hallo
Da das auch mal sein kann, dass der Asuro beim fahren die 2 gleichen Werte bekommt...
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.
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:
Code:
else if (PollSwitch() != 0)
{
Sleep(255);
if(PollSwitch() != 0)
{
Wenn PollSwitch() "Störungen" einfängt, wird jedesmal eine Sleep(255)-Pause eingefügt.
Effektiver wäre folgender Ansatz für PollSwitch():
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;
}
Dafür gibt es aber auch andere Lösungsansätze.
Gruß
mic
Lesezeichen