Arbeitsblatt Abstandsregeltempomat 03
Problem/Aufgabe: 
Um es dem Fahrer zu ermöglichen, den Tempomat auszuschalten und insbesondere in Notsituationen einzugreifen, soll ein Notaus implementiert werden.
Lösung/Diskussion:
An das Intelligent Car sollte ein weiterer Berührungssensor angebracht werden, der den Notaus-Schalter symbolisiert. Ggf. kann auch eine der NXT-Tasten oder die hintere Stoßstange verwendet werden.
Zur Lösung muss das Intelligent Car anscheinend mehrere Dinge gleichzeitig erledigen: Einerseits die Abstandskontrolle und -regelung, andererseits das Beachten des Notaus-Schalters. Viele Programmiersprachen sehen hier das Konzept paralleler Tasks vor. Für die Implementierung muss die entsprechende Syntax eingeführt werden.
In der Diskussion kann auch thematisiert werden, dass in dieser Lösung jeder Task nur sogenannte Ressourcen (Aktoren, Sensoren etc.) benötigt, die anscheinend an keiner anderen Stelle im Programm verwendet werden (In Wahrheit werden durch den Programmabbruch im Befehl StopAllTasks() natürlich auch Ressourcen aus dem anderen Task verwendet). Typische Probleme des Multitaskings können mit den Schülerinnen und Schülern besprochen werden. 
Beispielprogramm (Auszug):
(vollständiges Programm: < ACC 05 IntelligentCar.nxc>)
task accDrive() {
    int initDist;
    int callDist;

    initDist = SensorUS(US_PORT);
    while (TRUE) {
        while (SensorUS(US_PORT) > initDist) {
            callDist = SensorUS(US_PORT);
            if (callDist > MAXDIST) callDist = MAXDIST;
            OnFwd(driveMotor, getPower(callDist, initDist));
        }
        Off(driveMotor);
    }
}

task emergencyHalt() {
    until ((SensorValueBool(TS3) == true));
    Off(driveMotor);
    StopAllTasks();
}

task main() {
    SetSensorLowspeed(US_PORT);
    SetSensorTouch(TS3);
    Precedes(emergencyHalt, accDrive);
}