Hallo
Das liegt schlicht daran, dass dein Programm nicht funktioniert. Du solltest einfach auch lesen, was man dir schreibt. Das auch im Stillstand gezählt wird, habe ich dir oben schon geschrieben. Wenn du durch Einrückungen deinen Code etwas struckturierst wird dir vielleicht auch klar, dass du nur eine einzige Schleife hast:
Nur ein paar Fehler:Code:/*Asuro fährt geradeaus und misst die Helligkeit der Readsensoren*/ //#include <asuro.h> int main(void) { unsigned int durchlauf; unsigned int umdrehung=0; //Ist wichtig zu zaehlen der Umdrehungen unsigned int zaehler=0; //Ist wichtig zu zaehlen der verschiedenen Felder unsigned int zeit; //Ist wichtig fuer die Pausen unsigned int data[2],data_neu[2]; Init(); while(1) { MotorDir(FWD,FWD); //Asuro fäht sehr langsam fuer genaue Messungen MotorSpeed(150,160); OdometrieData(data); //Das aktuelle Feld wird erfasst for(durchlauf=0;durchlauf>=1000;durchlauf++) { sleep(36); } OdometrieData(data_neu); //Das aktuellere Feld wird erfasst if(data[1]!=data_neu[1]) //und mit dem aktuellem Feld verglichen { //wenn es anders war wird das zu der Anzahl der veränderten Felder addiert zaehler++; SerWrite("zeahler++\n\r",11); //Dieses TOPEREIGNISS wird natürlich weitererzählt } if(zaehler>=24) //Wenn 24 Änderungen erfasst wurden { umdrehung++; //Haben sich die Räder einmal gedreht SerWrite("Umdrehung++\n\r",14); //Auch dieses TOPEREIGNISS wird natürlich weitererzählt zaehler = 0; } if(umdrehung>=4) //wenn sie sich denn 4 mal gedreht haben { MotorSpeed(0,0); for(zeit=0;zeit<4000;zeit++) //Vier Sekunden stillstand { Sleep(36); } umdrehung = 0; SerWrite ("Das waren 4 Umdrehungen!\n\r",26); } } while(1) return 0; }
-Zwischen dem Einlesen der alten und neuen Werte funktioniert die Zeitschleife nicht, weil du auf "durchlauf>=1000" prüfst. Wenn die Verzögerung funktionieren sollte, was sollte sie bewirken? Alter Wert einlesen-eine Sekunde warten während das Rad lustig weiterdreht-Überprüfen, ob sich der Wert geändert hat? Wenn er sich nicht geändert hätte, würde mich das sehr wundern!
-Du sendest immer noch während der Fahrt.
-Du kümmerst dich nicht um Hell oder Dunkel, du zählst einfach nur die Unterschiede.
Das sind auf den ersten Blick die gröbsten Dinge. Lies dir mal diesen Codescheiben-Thread durch und führe das Messprogramm (den Datenlogger) aus, dass in diesem Thread angeboten wird. Dann bekommst du vielleicht ein Gefühl für die Odometrie und ihre Tücken.
Gruß
mic







Zitieren

Lesezeichen