Schakelproces
int verzet;
Deze regel definieerd een integer. Dat wil zeggen dat het woord "verzet" een variabele is die alleen gehele waardes aan kan nemen. De waarde kan tijdens het programma veranderen (dat is een eigenschap van integers).
task main()
Alles wat in deze ruimte staat maakt deel uit van het programma.
	
SetSensor(SENSOR_1,SENSOR_ROTATION);
SetSensor(SENSOR_2,SENSOR_TOUCH); 
SetSensor(SENSOR_3,SENSOR_LIGHT);
De robot heeft drie input-poorten, genummerd 1, 2 en 3. Hierop worden de sensoren aangesloten. Met bovenstaande regels wordt aan de robot verteld wat voor sensor er op welke ingang aangesloten is. Dit is van belang omdat verschillende sensoren verschillende waardes doorgeven.
Zo kan een rotatiesensor (theoretisch) een oneindig grote waarde geven. Ook kan hij een negatieve waarde doorgeven. Een druksensor kan alleen de waardes 0 en 1 doorgeven. Een lichtsensor tenslotte kan een waarde tussen de 0 en de 100 doorgeven.
#define  MINIMUMSCHAKELTIJD    30 
#define  LICHTGRENS            53 
#define  TIJDMAX               6 
#define  TIJDMIN               2 
Dit zijn een aantal variabelen waarvan die waarde niet kan veranderen. Later in het programma wordt de functie hiervan duidelijk.
verzet = 0;
Aan het begin van het programma heeft de integer 'verzet' de waarde 0.
while(true)
Alles wat in dit gebied staat wordt herhaald zolang de waarde tussen haakjes 'waar' is. Aangezien er 'true' staat wordt het dus eindeloos herhaalt.
Er had bijvoorbeeld ook een vergelijking kunnen staan als 2*x=6. Alles wat in het deel 'while(true)' staat zou dan herhaald worden zolang variabele x de waarde 3 heeft.
if (SENSOR_3 > LICHTGRENS)
                   {
                      ClearTimer(0);
                      until (SENSOR_3 < LICHTGRENS);
                      until (SENSOR_3 > LICHTGRENS);
In dit gedeelte wordt de snelheid van de motor bepaald. Als sensor 3 een grotere waarde doorgeeft dan de waarde van variabele 'LICHTGRENS', wordt de timer gestart. Dit komt erop neer dat de timer start op het moment dat er een witte stip langs de lichtsensor komt. Vervolgens wordt er gewacht tot de lichtsensor een lage waarde doorgeeft (zwart), en weer een hoge. Hij meet dus de tijd die verstrijkt tussen het voorbijgaan van twee witte stippen.
if (Timer(0) >= TIJDMAX)
De opdracht die in dit gebied staat wordt uitgevoerd als de waarde van de timer groter is dan de waarde van variabele 'TIJDMAX'. Dit is dus als het wiel zodanig langzaam draait dat er teruggesschakeld moet worden.
Er wordt nu even vanuit gegaan dat het wiel inderdaad te langzaam draait.
if (verzet > 0)
Er moet dus teruggeschakeld worden. Dit is echter niet de bedoeling als de versnellingsbak al in zijn neutrale stand staat; hij kan dan beschadigen. Daarom wordt er eerst gecontroleerd of dit inderdaad niet het geval is.
OnFwd(OUT_B);
Wait(MINIMUMSCHAKELTIJD);
until (SENSOR_2 == 0);
Off(OUT_B);
verzet -= 1;
Er is dus geconstateert dat de motor te langzaam draait en dat de versnellingsbak niet in zijn neutrale stand staat. Het schakelen kan dan beginnen.

Er moet teruggeschakeld worden, de motor die de versnellingsbak aandrijft (motor B) moet in dat geval aan gaan (On) en vooruit draaien (Fwd).
Vervolgens wordt er een bepaalde tijd (MINIMUMSCHAKELTIJD) gewacht totdat er uit de huidige versnelling geschakeld is. Zodra hij uit zijn versnelling is, wordt sensor 2 niet meer ingedrukt. De motor die de versnellingsbak aandrijft blijft net zolang draaien totdat deze sensor wel weer ingedruk is (hij geeft dan de waarde 0 door). Dat de sensor weer ingedrukt is betekend dat hij een versnelling lager staat. Motor B kan dus uit. Als laatste wordt de integer 'verzet' met één verlaagd; hij staat immers een versnelling lager.


Programma gemaakt door Martijn van Boven