Danke für das Lob!
Die Platine + Atmega8L sind Original, via IR geflasht. Der Code:Was die Zeit angeht, naja der Tag hat 24 Stunden und Schi fahren können wir nur tagsüber, abgesehen davon, dass sich derzeit (fast nur) Wahnsinnige auf den Pisten rumtreiben - wie man der Unfallstatistik entnehmen kann.Code:#include "asuro.h" #define LEDLEVEL 200 #define WARNINGLEVEL 300 void DistanceData(unsigned int *data) { ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT; ADCSRA |= (1 << ADSC); while (!(ADCSRA & (1 << ADIF))); ADCSRA |= (1 << ADIF); data[0] = ADCL + (ADCH << 8); ADMUX = (1 << REFS0) | (1 << REFS1) | IR_RIGHT; ADCSRA |= (1 << ADSC); while (!(ADCSRA & (1 << ADIF))); ADCSRA |= (1 << ADIF); data[1] = ADCL + (ADCH << 8); } int main(void) { unsigned int data[2]; int leftled, rightled; signed int diff; int flag=0; Init(); MotorDir(FWD, FWD); MotorSpeed(255, 255); FrontLED(ON); while(1) { DistanceData(data); if (data[1]>LEDLEVEL) leftled=ON; else leftled=OFF; if (data[0]>LEDLEVEL) rightled=ON; else rightled=OFF; BackLED(leftled,rightled); if (data[0]>WARNINGLEVEL && data[1]>WARNINGLEVEL) { StatusLED(RED); MotorSpeed(255,255); if (flag==0){ if (data[0]>data[1]) {MotorDir(FWD,RWD); flag=1;} else { MotorDir(RWD,FWD); flag=2;} } else { if (flag==1) MotorDir(FWD,RWD); else MotorDir(RWD,FWD); } } else { StatusLED(GREEN); MotorDir(FWD,FWD); flag=0; diff=((signed int)data[0]-(signed int)data[1])/2; if (diff>255) diff=255; if (diff<-255) diff=-255; if (diff>0) MotorSpeed(255,255-diff); else MotorSpeed(255+diff, 255); } } return 0; }
![]()
Der Weihnachtsurlaub ist nun leider fertig, damit vorläufig auch mein Tatendrang gebremst...






Zitieren

Lesezeichen