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

Kraj

Cilj

Cilj vježbe je programski prekinuti izvršavanje programa.

Arduino setup()-loop()

Već smo naučili da je "setup()" funkcija koja se izvrši jednom, a "loop()" se izvršava opetovano.

Mogli bismo pisati program korištenjeme te 2 funkcije, pišući cijeli program u "MRMS_ESP32.ino" datoteci. Na neki način bi ovo bilo jednostavnije i koristio bi se način uobičajen za Arduino.

Ako ste prije programirali u Arduinu i želite tako nastaviti, to će biti potpuno u redu.

Ipak, mi ćemo dalje u ovim vježbama koristiti malo drugačiji način, novu "loop()" funkciju, koja se ne nalazi u "MRMS_ESP32.ino", nego u "mrm-robot-line.cpp" datoteci, koju ste već koristili, ako ste mijenjali smjer rotacije motora.

Novi je "loop()" vrlo sličan starom, u smislu da se stalno ponavlja, ali ima neke prednosti, koje ćemo uočiti kasnije.

Petlja

void RobotLine::loop() {
	//Write Your program here
}
Kao što smo vidjeli u vježbi "Prvi program", program pišemo u funkciji "loop".

Često ćemo u vježbama preskakati potanje objašnjavanje težih pojmova kako bismo brže dolazili do rezultata. Zato nećemo sad detaljno objašnjavati zašto naš dio za upis programa izgleda ovako.

Ukratko, funkcija je logički dio programa. Ima svoje ime ("loop") i instrukcije (programske linije), koje se upisuju unutar vitičastih zagrada. Instrukcije su dijelovi koda koji se ne mogu dijeliti na manje, a da program ostane ispravan.

Kraj

void RobotLine::loop() {
	end();
}
Važno je uočiti da se naša funkcija ne izvršava jednom, neko non-stop, tisuće ili milijune puta, sve dok joj ne naredimo da stane.

Jedan od načina za zaustavljanje ponavljanja funkcije je naredba (sinonim za instrukciju) end(). Dodajmo crveni dio koda. Sad se više naša funkcija neće ponavljati beskonačno, nego će se izvršiti samo jednom.

Drugi je način izdavanje naredbe "x" iz menija PCja ili mobitela.

Program

void RobotLine::loop() {
	static int counter; 
	static uint32_t startMs; 

	if (setup()) { 
		counter = 0; 
		startMs = millis(); 
		print("Početak: %d ms\n", startMs); 
	} 

	++counter; 

	if (counter == 1000) { 
		uint32_t endMs = millis(); 
		print("Završetak: %d ms\n", endMs); 
		print("Razlika iznosi %lu ms.\n", endMs - startMs); 
		end(); 
	} 
}
Evo primjera programa koji opisuje kako radi paradigma setup - loop.

Na početku je "if" koji inicijalizira varijable.

U svakom se prolasku kroz funkciju poveća brojač "counter".

Nakon 1000 prolaza se ispiše rezultat.

Zadatak

Pokrenite motore.

Promijenite funkciju "loop" tako da pokrene robota naprijed i da odmah nakon toga prestane ponavljati svoje izvršavanje.

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.