Noh mida siin veel rääkida peale selle, et mis robotid ma seekord tegin.
Seekord ma tegin “Explorer” robotid ehk “Maadeavastajad”. Ühe Exploreri tegin ainult kinni oleva sonariga ehk kaugus anduriga. Peale seda ma tegin ainult puuteanduriga. Kolmanda ma tegin mootoriga sonariga ja viimase tegin mootoriga sonariga ja puuteanduriga.
Esimese programm nägi välja selline:
task main(){
/*
DIRECTION muutuja abil määratakse kas robot
sõidab edasi või tagasi
DIRECTION = true: sõidab tagasi
DIRECTION = false: sõidab edasi
KAUGUS muutuja abil määrab robot kas peab
tagasi sõitma
RAND muutuja abil määrab robot kas ta sõidab
paremale või vasakule
*/
SetSensorLowspeed(S4);
bool DIRECTION;
int KAUGUS = 38;
int RAND;
while (true){
if (SensorUS(S4) < KAUGUS){ //Kui robot näeb seina lähedamal
kui 38 cm siis ta sõidab tagasi
DIRECTION = true;
if (DIRECTION){
RAND = Random(2);
switch (RAND)
{
case 0: //Robot sõidab paremale
RotateMotorEx(OUT_BC, 100, 332, -50, TRUE, TRUE);
break;
case 1: //Robot sõidab vasakule
RotateMotorEx(OUT_BC, 100, 332, 50, TRUE, TRUE);
break;
}
}
}
else {
DIRECTION = false; //Muidu sõidab robot edasi
OnRevSync(OUT_BC, 100, 0);
}
}
}
Selle programmiga eriliselt raskusi e tulnud kuna ma sain abi oma ühest eelmisest programmist.
Nüüd tuleb siis teise roboti programm ehk ainult lülitiga:
task main(){
/*
muutuja DIRECTION määrab kas robot sõidab
edasi või tagasi
muutuja RAND määrab suvaliselt kas robot
pöörab tagurdades paremale või vasakule
*/
SetSensorTouch(S1);
bool DIRECTION;
int RAND;
while(true){
if (Sensor(S1)== 1){
DIRECTION = true;
if(DIRECTION){
RAND = Random(2); //määratakse kummale poole
sõidetakse kui tagurdatakse.
switch (RAND)
{
case 0: //robot pöörab vasakule
RotateMotorEx(OUT_BC, 100, 332, -50, TRUE, TRUE);
break;
case 1: //robot pöörab paremale
RotateMotorEx(OUT_BC, 100, 332, 50, TRUE, TRUE);
break;
}
}
}
else {
DIRECTION = false; //robot sõidab edasi
OnRevSync(OUT_BC, 100, 0);
}
}
}
Selle programmiga mul ka erilisi raskusi ei tekkinud kuna jällegi sai kasutada eelneva programmi abi.
Minu kolmas programm oli siis pöörleva sonariga:
task main(){
SetSensorLowspeed(S4);
int VASAK; Selle muutujaga salvestan vasakule poole vaatamise kauguse
int PAREM; Selle muutujaga salvestan paremale poole vaatamise kauguse
while(true){
if(SensorUS(S4) < 38){
Off(OUT_BC);
RotateMotor(OUT_A, 50, 90); robot vaatab vasakule
VASAK = SensorUS(S4);
RotateMotor(OUT_A, 50, -180); robot vaatab paremale
PAREM = SensorUS(S4);
RotateMotor(OUT_A, 50, 90); robot läheb omale kohale tagasi
if(VASAK < PAREM){ kui vasakule vaatamise kaugus on väiksem kui
paremale siis läheb robot paremale
RotateMotorEx(OUT_BC, 50, -332, 50, TRUE, TRUE);
}
else{ kui vasak on suurem kui parem siis vasakule
RotateMotorEx(OUT_BC, 50, -332, -50, TRUE, TRUE);
}
}
else{ muidu sõidab robot lihtsalt edasi
OnRevSync(OUT_BC, 100, 0);
}
}
}
Selle programmiga tekkisid mõned raskused näiteks kuidas salvestada sonari praegust näitu muutujasse.
Nüüd tuleb viimane programm mis ma tegin ehk liikuva sonari ja puuteanduriga see on umbes sama mis ainult liikuva sonariga ainult mõndades kohtades on lisatud juurde:
task main(){
SetSensorLowspeed(S4);
SetSensorTouch(S1);
int VASAK;
int PAREM;
while(true){
if(SensorUS(S4) < 38 || Sensor(S1) == 1){
Off(OUT_BC);
if(Sensor(S1)==1){
RotateMotor(OUT_BC, 50, 360);
}
RotateMotor(OUT_A, 50, 90);
VASAK = SensorUS(S4);
RotateMotor(OUT_A, 50, -180);
PAREM = SensorUS(S4);
RotateMotor(OUT_A, 50, 90);
if(VASAK < PAREM){
RotateMotorEx(OUT_BC, 50, -332, 50, TRUE, TRUE);
}
else{
RotateMotorEx(OUT_BC, 50, -332, -50, TRUE, TRUE);
}
}
else{
OnRevSync(OUT_BC, 100, 0);
}
}
}
Selle programmiga erilisi raskusi ei tekkinud ja sellele programmile ma filmisin ka video juurde: