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 Block |
---|
#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; } } } |