Tässä esimerkissä ajellaan teipin päästä päähän ja käännytään takaisin teipoin päässä. Ohjelman toiminnot, ajo suoraan ja kääntyminen esitetään askelilla. Tällä tavalla suurenkin sekvenssin toiminnot on helppo jakaa osiin.
{code}
#pragma config(Sensor, S4, RGB, sensorCOLORFULL)
#pragma config(Sensor, S2, kosketus1, sensorTouch)
//*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//
//esitellaan funktio, jolla kysellaan halusta ajella robotilla
int FlipFlopToiminto();//tämä funktio on esitelty wikissä muualla
//paaohjelma
task main()
{
int suunnanToistojenMaaraValkoisella=0;
int suunnanToistojenMaaraMustalla=0;
int askel=1;//1 = aja suoraan, 2 = kaanny teipin paassa
while(1)
{
wait1Msec(10);//odotellaan 10 millisekuntia
if(FlipFlopToiminto())//testataan koko ajan kayttajan halua ajaa robottia
{
if(askel==1)
{
if(SensorValue(RGB)== 6) //WHITECOLOR) valkoinen havaittu, yritetaan takaisin mustalle
{
suunnanToistojenMaaraMustalla=0;//nollataan toisen suunnan laskuri
motor[motorC] = 0;
motor[motorB] = 80;
suunnanToistojenMaaraValkoisella++;//lisataan taman suunnan laskuriin yksi
}
if(SensorValue(RGB) == 1) //BLACKCOLOR) musta havaittu, yritetaan takaisin valkoiselle
{
suunnanToistojenMaaraValkoisella=0;
motor[motorC] = 80;
motor[motorB] = 0;
suunnanToistojenMaaraMustalla++;
}
//testataan: paattyiko teippi eli jos maaraaikaan mennessa ei loytynyt teipin paa niin vaihdetaan askeleelle kaksi
if(suunnanToistojenMaaraValkoisella>50||suunnanToistojenMaaraMustalla>50)
{
suunnanToistojenMaaraMustalla=0;
suunnanToistojenMaaraValkoisella=0;
askel=2;
}
}
if(askel==2)
{
//kaannytaan paikoillaan ympari
motor[motorC] = -40;
motor[motorB] = 40;//moottori peruuttaa
if(SensorValue(RGB) == 1) //BLACKCOLOR)
{
askel=1;//kun teippi loytyi vaihdetaan takaisin askeleelle yksi
}
}
}
else//pysaytetaan robotti, jos painetaan toisen kerran kosketusanturia
{
motor[motorC] = 0;
motor[motorB] = 0;
}
}
}
{code} |