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

Signal uhvaćene lopte

Cilj

Ako je uhvaćena lopta, na displeju 8x8 želimo nacrtati loptu, a ako lopta nije u posjedu, displej treba biti prazan.

Deklaracije

void RobotSoccer::loop() {
	if (setup()){
		uint8_t red[8];
		uint8_t green[8];
	}
}
Prvo ćemo spremiti dva znaka u 8x8 displej.

Nakon toga ćemo ih ispisivati prema stanju LED barijere.

Deklarirajmo dvije varijable, koje će spremati crvene i zelene točke.

Prazan displej

void RobotSoccer::loop() {
	if (setup()){
		uint8_t red[8];
		uint8_t green[8];
		
		for (uint8_t i = 0; i < 8; i++)
			red[i] = 0, green[i] = 0;

		mrm_8x8a->bitmapCustomStore(red, green, 0);
	}
}
U "for" petlji spremimo nule u sve elemente oba polja, "red" i "green".

Nakon toga spremimo tako definirani znak u memorije 8x8 displeja na adresu 0.

Budući da su sve nule, neće svijetliti nijedna točka.

Lopta

void RobotSoccer::loop() {
	if (setup()){
		uint8_t red[8];
		uint8_t green[8];
		
		for (uint8_t i = 0; i < 8; i++)
			red[i] = 0, green[i] = 0;

		mrm_8x8a->bitmapCustomStore(red, green, 0);
		
		green[0] = 0b00000000;
		green[1] = 0b00000000;
		green[2] = 0b00011000;
		green[3] = 0b00111100;
		green[4] = 0b00111100;
		green[5] = 0b00011000;
		green[6] = 0b00000000;
		green[7] = 0b00000000;

		mrm_8x8a->bitmapCustomStore(red, green, 1);
	}
}
Spremimo u "green" jedinice na mjestima gdje želimo upaliti LEDove, u primitivnom prikazu lopte.

Opet spremimo u memoriju 8x8 LEDa, ovaj put na adresu 1.

Detekcija lopte

void RobotSoccer::loop() {
	if (setup()){
		uint8_t red[8];
		uint8_t green[8];
		
		for (uint8_t i = 0; i < 8; i++)
			red[i] = 0, green[i] = 0;

		mrm_8x8a->bitmapCustomStore(red, green, 0);
		
		green[0] = 0b00000000;
		green[1] = 0b00000000;
		green[2] = 0b00011000;
		green[3] = 0b00111100;
		green[4] = 0b00111100;
		green[5] = 0b00011000;
		green[6] = 0b00000000;
		green[7] = 0b00000000;

		mrm_8x8a->bitmapCustomStore(red, green, 1);
	}

	if (barrier())
		mrm_8x8a->bitmapCustomStoredDisplay(1);
	else
		mrm_8x8a->bitmapCustomStoredDisplay(0);
}
Napokon upišimo kod koji ispisuje uhvaćenost lopte.

"if" gleda je li lopta uhvaćena ili nije. Barijera mora biti kalibrirana prema uputama iz vježbe "Kalibracija nogometaša".

Kad je barijera prekinuta, ispisuje se bitmapa na adresi 1, znači lopta.

Ako nije, ispisuje se s adrese 0, znači da se briše ekran.

Video

Prekid barijere.

Zadatak: zadrška.

Recimo da želite bolje uhvatiti kratke prekide barijere. Promijenite program na način da je minimalna duljina prikaza lopte 0.5 sekunde.

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.