Skocz do zawartości
Zaloguj się, aby obserwować  
sosnus

[Programowanie] Terminalowa aplikacja serwisowa do robota. Część 5 -Podsumowanie i zdalne sterowanie

Pomocna odpowiedź

Witam w ostatniej części mojego kursu. Pokażę teraz praktyczne użycie tego, co tworzyliśmy przez te cztery części kursu. Tak więc teraz pokażę i omówię program do mojego robota typu LF eLF2v2, w którym zamieściłem "terminalową aplikację serwisową".

Omówię kilka ważnych rzeczy które użyłem w tym kodzie, czyli:

funkcje o nazwie terminal_intro_***(void);

funkcję ASCII_to_int();

Wydawanie dźwięków za pomocą programu PuTTy,
Zdalne sterowanie robotem za pomocą komputera,
Menu z wyborem trybu, w jakim ma pracować nasz robot (LF czy RC)

Reszta powinna być jasna, jeżeli bacznie oglądaliście poprzednie części kursu 😉

Kody w całości znajdują się w załączniku, poniżej pokazuję tylko niektóre fragmenty kodów

Funkcja ASCII_to_int();

Dzięki tej funkcji, możemy zmienić wartości niektórych zmiennych, takich jak np. granica, która odpowiada za decydowanie, jakie wartości odczytów z czujników są uważane za linię trasy, a które za tło. Jako argument funkcji dajemy liczbę cyfr, jaką ma mieć posiadana zmienna, natomiast funkcja ta zwraca kilkucyfrową (w przypadku granicy trzycyfrową) liczbę. W przypadku wprowadzenia z komputera do robota znaku przez Bluetooth, który nie jest cyfrą, robot zignoruje znak i będzie czekał na podanie cyfry.

Funkcje terminal_intro_...();

// f-cje ponizej, sa odpowiedzialne za rysowanie "pseudookna" z tablekami
void terminal_wait(void);
void terminal_intro(void);	// gdy terminal otwarty, rysuje okno i  glowna ramke
void terminal_intro_menu(void); // po nacisnieciu przycisku naklada menu
void terminal_intro_lf(void);	// po  wyborze trybu, naklada tabelki potrzebne do trybu LF
void terminal_intro_bt(void);	// po  wyborze trybu, naklada tabelki potrzebne do trybu BT

Ten fragment kodu znajduje się w pliku kodowanieCP866+komendyVT100.h, natomiast definicje tych funkcji znajdziecie w pliku kodowanieCP866+komendyVT100.c Zachęcam Was, do tworzenia własnych funkcji rysujących tego typu. By to ułatwić, przygotowałem dla Was arkusz kalkulacyjny Excela, który pomoże Wam w łatwy i przyjemny sposób tworzyć takie funkcje, oraz co ważniejsze, fajnie je edytować.

Poniżej pokazuję 3 screeny:

Początek:→→→→→→→→→→→→→ Po użyciu f-cji terminal_intro(); →→→→ Po użyciu f-cji terminal_intro_menu();

→→→→→→→→→→

Wydawanie dźwięków za pomocą programu PuTTy

W pliku *.h znajdzieci deklarację funkcji:

void terminal_beep(void);						// ASCII: Wysyla sygnal dzwiekowy

Funkcja ta, jak sama nazwa wskazuje, rozkazuje,aby program PuTy wydał dźwięk 😋 . Możemy tego użyć np. wtedy, gdy nasz LF wyjedzie z trasy 🤣 . Lecz aby to działało, musimy pozmieniać nieco wnaszych ustawieniach programu PuTTy. W tym celu, wracamy się do 2 części artykułu , dokładniej rzecz biorąc, do końca tej części, tam, gdzie mamy napis: AKTUALIZACJA 29-09-2013. Tak więc teraz, gdy użyjesz funkcji: terminal_beep(); gdzieś w programie, PuTTy wyda dźwięk. Możesz tego użyć np. do sygnalizowania, że Linefollower wyjechał po za linię 😋 .

Zdalne sterowanie robotem za pomocą komputera

Aby sterować robotę przez bluetooth, wybieram opcję 2 z menu, która wywołuje tą funkcję:

void bluetooth_controle()
{
terminal_intro_bt();	// rysuje informacje dot. sterowania bt
while(1) // petla wlaciwa sterujaca  przez bluetooth
{
	komenda = uart_get_char(0) ;
	if (komenda == 0) komenda = komenda_old ;

	switch(komenda)
	{
		case 105:	set_pwm(45,45);	break; // PRZOD
		case 106:	set_pwm(30,58);	break; // LEWO
		case 107:	set_pwm(0,0);	break; // STOP
		case 108:	set_pwm(58,30);	break; // PRAWO
		case 113:	menu();			break; // koniec trybu bt, przescie do menu glownego
	}
	terminal_locate(28,11);
	uart_put_char(0, (komenda-32)) ; // zamiana malej litery na duza
	_delay_ms(50);
}
}

Jak widzimy, program na początku rysuje okienka przydatne do sterowania bt, a następnie wpada w pętlę gdzie:

Sprawdza, co nadeszło przez Bluetooth.

Jeżeli jest to któryś ze znaków i j k l to wykonuje instrucje, jeżeli nie, to postępuje według ostatnio naciśniętego znaku. Na koniec wypisuje na ekranie wybraną literę, uprzednio zamieniając ją na odpowiednik dużej litery.

Menu

Po pierwszym naciśnięciu przycisku na robocie, wpadamy w tą funkcję:

void menu (void)
{
set_pwm(0,0);
terminal_intro_menu();
uint8_t start = 0 , wybor = 0;
while ( start == 0 )
{
	if( przycisk ( START_PIN ) )	{ start = 1 ; }		// dzieki temu wychodiy z petli whilepryciskiem, gdy nie mamy kompap pod reka
	else
	{
		wybor = ASCII_to_int(1);	//pobieram liczbe z kompa
		switch (wybor)				//sprawdzam ktory tryb wybrano
		{
			case 1:  start = 1;	break;
			case 2:  start = 2;	break;
			default: start = 0;		//wybrana licba nie reprezentuje zadnego trybu, czekamy na 1 lub 2
		}
	}
}

switch(start) // realizujemy wybrany tryb
{
case 1: follow_the_line();		break ;
case 2: bluetooth_controle();	break ;
default: start = 0;
}
}

Jak widzimy, możemy wybrać tryb za pomocą komputera, w przypadku braku połączenia z kompem, możemy odpalić domyślnie tryb LF, za pomocą przycisku.

(PS. Przycisk podłączony jest do PINU PB3)

W załącznikach do tej części znajdziecie:

Arkusz kalkulacyjny programu MS Excel, który pomoże Ci przygotować ramki pod Twoją wersję apki,
Pełny projekt Eclipse (a zarazem kod do mojego robota), którego użyłem przy przygotowywaniu tej części kursu,
Pliki: kodowanieCP866+komendyVT100.c oraz kodowanieCP866+komendyVT100.h

Na koniec jeszcze dwie uwagi, po pierwsze, algorytm jazdy robota typu LF nie był tematem tego kursu, więc tutaj go nie znajdziecie (szczerze mówiąc, czas napisać w końcu porządnego PIDa do eLFa2 🤣 ) a po drugie, sterownik silników mojego robota opiera się na jednym tranzystorze, a nie mostku H, tak więc jeżeli chcesz używać tego kodu, musisz to uwzględnić.

Podsumowanie

Wreszcie dotarliśmy do końca tego kursu. Zachęcam do używania w swoich programach f-cji zadeklarowanych w pliku kodowanieCP866+komendyVT100.h , oraz do tworzenia własnych, przydatnych i ciekawych funkcji. Mam nadzieję, że informacje które tutaj zawarłem, przydadzą Ci się do budowy własnej wersji "Terminalowej aplikacji serwisowej". Macie jeszcze jakieś pomysły, co można by dodać do tej apki?

DO RYSOWANIA PROGRAMÓW TERMINALOWYCH.rar

693123568_Beztytuu.thumb.png.32f048e1f350e66c0c7b4d0a9504036b.png

kurs_cz5.zip

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

Zaloguj się, aby obserwować  

×
×
  • Utwórz nowe...