Objektuak ekiditen dituen robotaren aldaera da honakoa: txalo jo bakoitzean atzera egin eta norabidez aldatuko du robotak. Soinu-sentsorea gehituko diogu 2 etiketadun portuan (talka-sentsorea bere horretan utzi, ez dugu-eta erabiliko).
Programa ‘Objektuak ekidin’ programaren berdina da kasik, 2 portuan soinu-sentsorea konektatu besterik ez dugu egin behar. Soinu-sentsoreak muga-balio bat gainditzen duenean (guk zehaztutakoa), robotak atzerantz egin eta norabidez aldatuko du.
Nola zehaztu muga-balioa? Gogoan izan soinu-sentsoreak 50-90 dB arteko soinuak detektatzen dituela, hau da, gizakiaren entzumen-gaitasunari egokitutako tartean lan egiten du. Baina balioak, 0-100 artean itzultzen ditu, 0 soinurik ez eta 100 soinu maximoa izanik.
Beraz, frogak egin beharko dituzue soinu-sentsorearekin, txalo bati dagokion muga-balioa finkatzeko.
Egin proba ea zer moduz dabilen. Robot interesgarriagoa izango genuke, soinu- eta talka-sentsoreak konbinatuz gero. Hau da, robotak atzera egin eta biratuko luke, baldin eta objekturen batekin talka egin edo txalo-hotsa entzungo balu. Zeure esku uzten dugu azken aldaera honen programazioa.
Hona txalo.nxc programa:
#define BI_MOTOR OUT_AC // Bi gurpilak
#define EZK_MOTOR OUT_C // Ezker gurpila
#define ESK_MOTOR OUT_A // Eskuin gurpila
#define SOINU S2 // Soinu sentsorea 2. portuan
#define ABD 50 // Abiadura
#define ATZERA_DENB 300 // Atzera denb.
#define BIRA_DENB 500 // Bira denb.
#define MUGA 60 // Soinu muga
task main()
{
SetSensorSound(SOINU); //Soinu sentsorea 2. sarreran
while (true) // Begizta infinitua
{
OnFwd(BI_MOTOR, ABD); // 2 motorrak aurrera
if (SENSOR_2 > MUGA) // Soinuak muga gainditu
{
OnRev(OUT_AC, ABD); // Atzera
Wait(ATZERA_DENB);
if (Random() >= 0) // ezk-esk biratu ausaz
{
OnFwd(EZK_MOTOR, ABD);
}
else
{
OnFwd(ESK_MOTOR, ABD);
}
Wait(BIRA_DENB + Random(BIRA_DENB));
}
}
}




