Ihr seid ja richtig fix bei der Hitze.
Ich habe in der Zwischenzeit doch noch mit float herum gespielt, zum Geradeausfahren reicht das leider noch nicht, mal dreht er nach links, mal nach rechts ab.
Code:
#include "asuro.h"
#include <string.h> //strlen

void TimeSleep(unsigned int time) 
{
        unsigned int i;
        for (i = 0; i < time; ++i) 
            Sleep(72);
} 

void Write(char * msg) 
{
        SerWrite( msg, strlen(msg));
}

unsigned int is_bright(unsigned int darkness) 
{
    if (darkness > 512) 
        return 0;
	else 
        return 1;
}

float CalibrateWheels(void) 
{
    Write("Start calibration");
    
    unsigned int i;        // counter
    unsigned int data[2];  // odometry data

    // rotation count of the wheels
    unsigned int count_left  = 0;
    unsigned int count_right = 0;

    // contains the last brightness state for the wheels
    unsigned int last_state[2];
    OdometrieData(data);
    last_state[0] = is_bright(data[0]);
    last_state[1] = is_bright(data[1]);

     // the relation between the left amd the right wheel's rotation count
     float relation;

     // start driving
     MotorDir(FWD, FWD);
     MotorSpeed(120, 120);
     TimeSleep(500); //Zum Hochfahren

     // 5 seconds
     for (i = 0; i < 100; ++i) 
     {
        OdometrieData(data);

        // if a wheel's brightness changed, increase the counter
        if (is_bright(data[0]) != last_state[0]) 
	    count_left++;
        if (is_bright(data[1]) != last_state[1]) 
            count_right++;

        last_state[0] = is_bright(data[0]);
    	last_state[1] = is_bright(data[1]);

        TimeSleep(50);
    }

    relation = (float) count_right / (float) count_left;

    // done testing, stop wheels
    MotorSpeed(0, 0);

    Write("Finished calibration");
    return relation;
}

int main(void)
{
        Init();

        MotorSpeed(120, 120.0f * CalibrateWheels());

        while(1);
        return 0;
}
Hat jemand einen Tipp dazu aus euren bisherigen Überlegungen?