Danke für das Lob!
Die Platine + Atmega8L sind Original, via IR geflasht. Der Code:
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;
}
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.

Der Weihnachtsurlaub ist nun leider fertig, damit vorläufig auch mein Tatendrang gebremst...
Lesezeichen