Reaali Robootika.COM

NXT robotimaailm ja programmeerimine C-keeles

3 tund: Lülititega roboti juhtimine

Tunniteemaks ülesanded, mille käigus tuleb roboti tööd juhtida lülitite abil. tegemist suhteliselt lihtsate ülesannetega, kuid C-keele õppimiseks täiesti piisava keerukusega.

Õppematerjal:
Juhend- Andurite defineerimine ja lugemine
Juhend- while, until tsüklite kasutamine
Juhend- IF ELSE ja SWITCH kasutamine

Tunni sisu:

Igaühel on oma BOT, millele on vastavalt esimeste ülesannete käigus ühendatud 1 lüliti ning teiste käigus kaks lülitit. Õpime kasutama funktsioone Until, While ja IF ELSE laused.

Tegelikult ei jõudnud keegi neid ülesandeid 2 tunni jooksul ära teha, mistõttu ülesanne nr 2 jääb järgmise tunni teemaks.


Ülesanne 1. Robotil on küljes üks lülitiandur pika juhtmega.

Variant a) Robot sõidab seni kuni lüliti on vajutatud.

Lahendus. Esialgu muutujaid ei kasutanud, jõuame nendeni edaspidi. Õppisime kasutama IF ELSE lauset.

task main(){
SetSensorTouch(S1);                          
while (TRUE)
{ if (Sensor(S1))
{ OnFwd(OUT_BC, 100); } else
{ Off(OUT_BC); } } }

Variant b) Robot seisab kui lüliti on vajutatud.

Lahendus. Selle ülesande lahendamisel lähtus enamik sellest, et vahetati IF ja ELSE laused omavahel ära ning suur oli poiste üllatus kui selgus, et seda on võimalik lahendada vaid ühe hüüumärgi lisamisega. Kui näiteks IF ja ELSE lausete sisu on väga mahukas, on nende vahetamine igal juhul ajamahukam ja mõningate ohtudega seotud vs. hüüumärgi lisamine.

task main(){
SetSensorTouch(S1);                          
while (TRUE)
{ if (!Sensor(S1))
{ OnFwd(OUT_BC, 100); } else
{ Off(OUT_BC); } } }

Variant c) Robot hakkab sõitma kui lülitit on korra vajutatud ja lahti lastud ning peatub kui teist korda vajutatakse/lahti lastakse (bumped).

Lahendus. Õppisime kasutama until funktsiooni, mille abil on lihtne teha lülitile bumped-tüüpi vajutuse kontroll. Esimene until ootab kuni lüliti on vajutatud ning järgmine until ootab kuni lüliti on lahti lastud.

task main(){
SetSensorTouch(S1);
while(TRUE){
  until(Sensor(S1));
  until(!Sensor(S1));
  OnRev(OUT_BC, 100);
  until(Sensor(S1));
  until(!Sensor(S1));
  Off(OUT_BC);
}
}

Ülesanne 2. Robotil on küljes kaks lülitiandurit.

Variant a) Robot sõidab edasi, kuid vajutades ühte lülitit keerab sujuvalt paremale ning teise lüliti korral vasakule.
Variant b) Robot hakkab edasi sõitma siis kui mõlemad lülitid on korraga alla vajutatud ja lahti lastud. Üksikult kasutades toimivad lülitid paremale-vasakule keeramisena. Teistkordsel üheaegsel vajutamisel jääb robot seisma.

Add comment

Loading