hi allerseits,
habe wieder ein paar fragen...
das programm aus dem band 2 lässt sich fehlerfrei kompilieren, der asuro fährt auch schön geradeaus:
auf veränderungen bei TRIGGERLEVEL, auch ins extreme (2000 bzw. 200) reagiert er nicht und fährt weiter geradeaus. Ist das ok? Wozu dann diese variable überhaupt?Code:/* Geradeausfahren mit Initialisierung "geradeausplus.c"*/ #include "asuro.h" #include "eeprom.h" #include "inka.h" // Schwellwert für die Hell/Dunkel-Unterscheidung // Eventuell muss damit etwas variiert werden #define TRIGGERLEVEL 600 #define HYSTERESIS 10 #define LOW 0 #define HIGH 1 int main(void) { unsigned int data[2]; signed int status[2]={0,0}; signed int difference=0; unsigned int distance=0; unsigned int eeread,eewrite; char eewriteflag=0; Init(); WaitforStart(); // liest ein wort aus EEPROM eeread=eeprom_read_word ((uint16_t*)0); // Wert auf Plausibilität prüfen if (eeread<512) {difference=(signed)eeread-256;} MotorDir(FWD, FWD); while(1) { // Helligkeitswerte der Lichtschranken auslesen OdometrieData(data); // Wechsel linker Sensor von niedrig auf hoch? if ((status[0]==LOW) && (data[0]>TRIGGERLEVEL+HYSTERESIS)) { status [0] = HIGH; difference++; distance++; eewriteflag=1; } // Wechsel linker Sensor von hoch auf niedrig? if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERESIS)) { status [0] = LOW; difference++; distance++; eewriteflag=1; } // Wechsel rechter Sensor von niedrig auf hoch? if ((status[1]==LOW) && (data[1]>TRIGGERLEVEL+HYSTERESIS)) { status[1]=HIGH; difference-- ; } // Wechsel rechter Sensor von hoch auf niedrig? if ((status[1]==HIGH) && (data[1]<TRIGGERLEVEL-HYSTERESIS)) { status[1]=LOW; difference-- ; } // zur Sicherheit: verhindern, dass der Differenzzähler // den erlaubten Wertebereich veriässt if (difference<-255 ) difference=-255; if (difference>255) difference=255; // status-LED noch entsprechend der erkannten Segmente // aufleuchten lassen, grün für links, rot für rechts StatusLED(status[0]+status[1]*2); // Zähldifferenz passend, auf die Motoren verteilen if (difference>0) MotorSpeed(255-difference,255); else MotorSpeed(255, 255+difference); // Alle 128 Odo-Ticks den Wert ins EEPROM schreiben if ((distance%128==0) && (eewriteflag==1)) { eewrite=(unsigned) (difference+256); eeprom_write_byte ((uint8_t * )0,eewrite&0xFF); eeprom_write_byte ((uint8_t * )1,eewrite>>8); eewriteflag=0; } return 0; } }
zweite frage: kann ich irgendwie überprüfen was da ins EEPROM geschrieben wird, und ob überhaupt???
danke euch







Zitieren

Lesezeichen