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...