// This source code is for Not Quite C (.nqc) sub initsensors() // de sensoren moeten eerst worden geinitialiseerd { // SENSOR_1 is de lichtsensor, te meten als percentage. // Dit kun je uiteraard veranderen, mocht je dat nodig vinden. SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensorMode(SENSOR_1, SENSOR_MODE_PERCENT); // SENSOR_2 en _3 zijn touchsensors, die we in boolean mode zetten. // In bijvoorbeeld SENSOR_MODE_RAW zou je ook de mate van touch kunnen uitlezen. SetSensor(SENSOR_2, SENSOR_TOUCH); SetSensorMode(SENSOR_2, SENSOR_MODE_BOOL); SetSensor(SENSOR_3, SENSOR_TOUCH); SetSensorMode(SENSOR_3, SENSOR_MODE_BOOL); } // Initialisatie #define wanderSound PlaySound(0); int grenswaarde=44; //Waarde tussen licht en donker in (cut-off) int voorkeursrichting=0; //Richting die als eerste bekeken wordt int powerL; //Power bij links-draaien int powerR; //Power bij rechts-draaien int powerFW; //Power bij vooruit rijden int powerBW; //Power bij achteruit rijden int tijd; //Lengte van rijtijd in 10de seconden /* Relatieve lichtmeting, is verworpen voor absolute waarde (grenswaarde) int laatstGezien; //Laatst waargenomen waarde van lichtsensor task lichtgeheugen() { laatstGezien=SENSOR_1; } */ sub gaVooruit() //Ga vooruit met aangegeven power en tijd { SetPower(OUT_C+OUT_A,powerFW); OnFwd(OUT_A); OnRev(OUT_C); Wait(tijd*40); } sub gaAchteruit() //Ga achteruit met aangegeven power en tijd { SetPower(OUT_C+OUT_A,powerBW); OnFwd(OUT_C); OnRev(OUT_A); Wait(tijd*40); } sub draaiLinks() //Ga links met aangegeven power en tijd { SetPower(OUT_C+OUT_A,powerL); OnFwd(OUT_C+OUT_A); Wait(tijd*5); } sub draaiRechts() //Ga rechts met aangegeven power en tijd { SetPower(OUT_C+OUT_A,powerR); OnRev(OUT_C+OUT_A); Wait(tijd*5); } task wander() //Loop rond { wanderSound; //HerkenningsMelodietje voor wander stop followPath; //Onderbreek followPath while(true) { powerFW=7; int richting = Random(1); //Bepaal richting random tijd = Random(12)+12; //Bepaal draai- en rijtijd random powerL = Random(3)+4; //Bepaal draai- en rijsnelheid random powerR = Random(3)+4; gaVooruit(); //Ga vooruit if (richting==1) //Draai de bepaalde richting draaiLinks(); else draaiRechts(); } } task followPath() //Volg pad { PlaySound(0); //HerkenningsMelodietje voor followPath stop wander; //Onderbreek wander while (true) { stop followreleaser; //onderbreek followReleaser SetPower(OUT_A+OUT_C, 7); //Zet power op vol OnFwd(OUT_A); //Standaard : rij vooruit OnRev(OUT_C); int draaiduur; int autodraai=20; int kleinedraai=25; int mediumdraai=60; int grotedraai=250; int eersteSchatting=0; int tweedeSchatting=0; int doordraaitijd=10; while (SENSOR_1 > grenswaarde) //Als op wit { Off(OUT_A+OUT_C); //Stop met rijden int i; int j; if (voorkeursrichting==0) // { for (i=0;i<3;i++) { if (i==0) draaiduur=kleinedraai; if (i==1) draaiduur=mediumdraai; if (i==2) draaiduur=grotedraai; OnRev(OUT_A+OUT_C); for (j=0;jgrenswaarde)//Als op wit { //Onderbreek wander stop wander; SetPower(OUT_A+OUT_C,4); //Draai 3 keer om as (2e keer langer) //Hierdoor komt hij van de muur af OnFwd(OUT_C); Wait(50); OnFwd(OUT_A); Wait(500); OnRev(OUT_C); Wait(50); //Hervat wander start wander; } } else if (SENSOR_2)//Als linker-bumper ingedrukt { PlaySound(1); if (SENSOR_1