Ma tegin ühe roboti mis ronib kahe seina vahel üles-alla. Seda ehitades mul polnud mitte mingit probleemi. Kuid kui ma jõudsin programmeerimise juurde siis tekkis mul küll mõningaid probleeme. Kuid enne räägin milline oli mu roboti programmeerimise järjekord. Kõigepealt kui robot oli valmis siis polnud mingit muret esimese kolmandikuga alustada. Esimeses kolmandikus ma panin ta lihtsalt üles sõitma seni kuni ta näeb lähedamal kui 10 cm lage. Sellega erilisi probleeme ei tekkinud kuna see oli üpriski lihtne programm. Teise kolmandiku programmist ma panin roboti sõitma küll pikema programmiga kuid mõne algaja jaoks ka kergem ning seekord sõitis robot lõpmatuseni üles-alla. Minu viimane kolmandik programmist sõitis robot ka muidugi lõpmatusein üles alla kuid nüüd on see lühem ja kergem kui eelmine kord.
Mu isa tegi sellest ka video:
Kahe seina vahel ronija robot
Programm näeb välja selline:
/*
Autor:Ramses Sepp 09.02.2011
See programm võimaldab robotil sõita kahe seina vahelt üles
*/
//See alamprogramm juhib roboti mootoreid üles-alla sõidul
void Liikumine(bool Yles, int KiirusSeinal){
//Järgnev if lause peatab ühe või teise mootori kui robot on balansist väljas
//Siin if-i lauses korrgeerib balanssi robot siis kui ta näeb oranþi
if (Sensor(S2) > 50){
//Need kaks järgmist rida suunavad kumb mootor peatub
//siis kui läheb üles-alla ja näeb oranþi
if (Yles) Off(OUT_B);
else Off(OUT_C);
until(Sensor(S2) < 50);
}
//Siin else if-i lauses korrigeerib balanssi robot siis kui ta näeb musta
else if(Sensor(S2) < 40){
//Need kaks järgmist rida suunavad kumb mootor peatub
//siis kui läheb üles-alla ja näeb musta
if (Yles) Off(OUT_C);
else Off(OUT_B);
until(Sensor(S2) > 40);
}
else{
//Muidu sõidab robot lihtsalt kahe seina vahelt alla
OnRevReg(OUT_BC, KiirusSeinal, OUT_REGMODE_SPEED);
OnRev(OUT_A, 20);
}
}
task main(){
SetSensorLowspeed(S4);
SetSensorLight(S2);
SetSensorLowspeed(S3);
bool TOP;
//Järgnev mootori programmi osa laiendab mõlemad mootorid seinte vastu
OnFwd(OUT_A, -75);
Wait(1000);
while (TRUE){
//Siin vaatab kas lagi on lähedamal kui 10 cm
if(SensorUS(S4) < 10){
Off(OUT_BC);
TOP = TRUE;
}
//Siin vaatab kas põrand on lähedamal kui 10 cm
if(SensorUS(S3) < 10){
Off(OUT_BC);
TOP = FALSE;
}
//See pool paneb roboti alla sõitma
if(TOP){
Liikumine(FALSE, -15);
}
//See pool paneb roboti üles sõitma
else{
Liikumine(TRUE, 30);
}
}
}