Hrvatsko društvo za robotiku - Uvod u robotiku - vježbe

Priprema

Cilj

Cilj je pokrenuti radnje samo prvi put u ponavljajućoj funkciji.

Statička varijabla

void RobotLine::loop() {
	static uint32_t ms = millis();
	if (millis() - ms < 10000)
		print("10 sec.");
}
Prisjetimo se vježbe "Istovremenost i varijable". Sličan kod je lijevo.

Ako se ne sjećate, pogledajte opet vježbu i podsjetite čemu služi static.

Ograničenje statičke varijable je da se njena vrijednost postavi samo kad prvi put program prođe kroz funkciju u kojoj se nalazi naredba.

Pogledajmo ograničenje u primjeru. Kod je jednostavan: počne ispisivati "10 sec." 10 sekundi nakon što smo pokrenuli funkciju "loop()". To je očekivano.

Recimo da zaustavimo "loop()" s "x" pa opet pokrenemo pomoću "loo".

Hoće li ispis krenuti nakon 10 sekundi. Neće! Zašto? Probajte sami shvatiti. Ako ne ide, čitajte dalje.

Ispis će krenuti odmah. Stvar je u tome da je varijabla "ms" poprimila neku vrijednost kad smo prvi put utipkali "loo". Nakon toga smo zaustavili program i pokrenuli opet "loo" - ali ovaj put ms više neće poprimiti vrijednost "millis()"! Zapamtite, "static" djeluje samo prvi put.

Uočite da je "setup()" moćniji od "static" jer nam omogućava da prvi put pokrenemo proizvoljne naredbe, ne samo pridruživanje vrijednosti varijabli.

Priprema točno jednom

void RobotLine::loop() {
	if (setup())
		print("Start");
}
Popravljena verzija je lijevo. Koristi funkciju setup().

Ova funkcija vraća "istinu" samo u prvom prolasku kroz funkciju "akcije".

Nismo još učili akcije, ali može se reći da vraća istinu samo u prvom prolazu kroz "loop()", nakon pokretanja putem "loo" iz menija.

Koristeći "setup()", možete više puta pokretati funkciju "loop()" putem "loo" (ili pritiska na tipku) i svaki put će se ponašati očekivano: u prvom prolazu će "setup()" vratiti "istinu", svaki sljedeći put "laž".

Potreba za ovakvom "pripremom" funkcije se javlja često.

Zadatak: udaljenost od polazišta.

Napravite program koji će izmjeriti udaljenost robota u početnom položaju i nakon toga ispisivati na ekran koliko je udaljen od početnog položaja.

Primjedbe



Projekt "Uvod u robotiku" sufinanciran je iz Europskog socijalnog fonda, poziv "Jačanje kapaciteta organizacija civilnoga društva za popularizaciju STEM-a". Relevantne stranice: Sadržaj vježbe za virtualne radionice isključiva je odgovornost Hrvatskog društva za robotiku.