Käesoleva tunni eesmärk on õppida kasutama C-keeles switch-funktsiooni.
Õppematerjal: Juhend- IF ELSE ja SWITCH kasutamine
Ülesanne: Värvilise rooliga auto
Teha BOT mis on ühendatud juhtme abil värvianduriga, mis omakorda on BOT-i juhtimispult.
Juhtimispult ehitada selliselt, et värvianduri ees oleks pöörlev komponent (hammasratas, rool), mille peale on kinnitatud värviline ketas. Rooli otse hoides sõidab robot otse kuid keerates muutub värv ning robot hakkab sellele vastavalt pöörama.
Musta värvi paber kinnita teise klotsi külge, mis liigub värvilise ketta ning värvianduri ees edasi tagasi. Must värv on nagu autol gaas, kui must on ees, siis robot seisab, vastasel juhul liigub vastavalt ketta värvile. Sellesama pildi saad siit suuremana avada ja siis välja printida.
Värvide tähendused:
- Punane: sõidab otse
- Sinine-roheline: keerab veidi paremale-vasakule
- Kollane-oranz: keerab keskmisel paremale-vasakule
- Helesinine-heleroheline: keerab palju paremale-vasakule
- Valge: keerab kohapeal ringi
Lahendus.
Nagu arvata oligi siis tegemist on lihtsa programmiga, kuid õpetab hästi switch-funktsiooni olemust.
Rooli ehitamise peamine raskus seisnes selles, et värviandur ei tundnud korralikult värve ära. Esialgu arvasime, et liiga ligidalt mõõdab ning jätsime vahe ca 3 cm. Kuid nüüd oli valge ja musta tulemus sama, mis oli eriti veider.
Lõpuks jõudsime lahenduseni, värviandur tuli paigutada väikese nurga all, muidu see mõõtis enda poolt välja kiirguva valguse peegeldust. Seega HiTechnicu värviandur poolviltu asetades oli tulemus perfektne.
/*
Autor: Ramses Sepp 02.02.2011
Sellel robotil on värviline rool ja must käigukang.
Rooliga ta sõidab erinevalt ja käigukang peatab roboti.
*/
task main(){
SetSensorLowspeed(S2);
while (TRUE){
switch (SensorHTColorNum(S2))
{
//must - mootorid seisavad
case 0:
Off(OUT_BC);
ClearScreen();
TextOut(5, LCD_LINE3, "must");
break;
//sinine - robot keerab kergelt paremale
case 2:
OnFwdSync(OUT_BC, -50, 5);
ClearScreen();
TextOut(5, LCD_LINE3, "sinine");
break;
//helesinine - robot keerab palju paremale
case 3:
OnFwdSync(OUT_BC, -50, 35);
ClearScreen();
TextOut(5, LCD_LINE3, "helesinine");
break;
//roheline - robot keerab kergelt vasakule
case 4:
OnFwdSync(OUT_BC, -50, -5);
ClearScreen();
TextOut(5, LCD_LINE3, "roheline");
break;
//kollane - keerab keskmiselt paremale
case 6:
OnFwdSync(OUT_BC, -50, 15);
ClearScreen();
TextOut(5, LCD_LINE3, "kollane");
break;
//oranþ keerab keskmiselt vasakule
case 8:
OnFwdSync(OUT_BC, -50, -15);
ClearScreen();
TextOut(5, LCD_LINE3, "oranþ");
break;
//punane - sõidab otse
case 9:
OnFwdSync(OUT_BC, -50, 0);
ClearScreen();
TextOut(5, LCD_LINE3, "punane");
break;
//heleroheline - keerab palju vasakule
case 13:
OnFwdSync(OUT_BC, -50, -35);
ClearScreen();
TextOut(5, LCD_LINE3, "heleroheline");
break;
//valge - keerab kohapeal ringi
case 17:
OnFwdSync(OUT_BC, -50, 100);
ClearScreen();
TextOut(5, LCD_LINE3, "valge");
break;
}
}
}