Skocz do zawartości

[Bascom] ATmega16 + BTM222 + apka - problem z odbiorem danych.


aixI

Pomocna odpowiedź

Cześć, jako że ostatnio popełniłem bardzo zgrabne płytli do konwertera napięć RS232<>TTL do układu MAX232 i do modułu bluetooth BTM-222 zacząłem sobie to wszystko testować.

Na początek zabrałem się za sam RS232 i komunikację po kablu z uC. Wszystko działa, tzn. wysyłałem sobie jakąś zmienną o wartości, np. 200 i wyświetlałem ją w oknie terminala.

Później czytając "Help Bascom" zainteresowałem się instrukcją Inkey() i chciałem ją sprawdzić. Napisałem kod, żeby po naciśnięciu (na klawiaturze PC) klawisza 1 dioda się zapaliła, a po naciśnięciu 0 - zgasła. Działa.

Więc pomyślałem sobie "przejdę teraz na BTM'a", więc się zabrałem. Oglądając filmiki dotyczące modułu BTM-222 Pana Mirka, ładnie sobie go skonfigurowałem. Pomyślałem sobie, że teraz potestuje a'la start/stop do lf'a (tylko że na diodzie LED). Na telefonie mam wgraną apkę, że jak kliknę start, to wysyła liczbę "1", a jak stop "0" i jak na chwilę obecną mam problem, bo jak klikam start nic sięnie dzieje (oczywiście mam telefon sparowany z modułem BTM i podczas włączanie apki łącze się z BMT'em - dioda "CONNECT" świeci ciągle). Moduł podłączam tak:

VCC (BTM) ---> VCC(uC)

GND (BTM) ---> GND(uC)

TXD (BTM) ---> RXD(uC)

RXD (BTM) ---> TXD(uC)

Sprawdzałem też czy aby na pewno apka wysyłała 1 jak klikam start i 0 jak klikam stop - działa, tzn. jak klikam start, to jest 1, a jak stop, to 0.

Ogólnie apke brałem z artykułu: [Kurs] Tworzenie własnej aplikacji Android do sterowania przez Bluetooth.

Proszę pisać jak będzie potrzebny któryś z kodów.

Pozdrawiam.

Link do komentarza
Share on other sites

Ja się w sumie jeszcze nigdy nie bawiłem w BTM + Android, ale niewykluczone że masz jakieś problemy po stronie tej nowej aplikacji. Aby się zorientować gdzie tkwi błąd, poszukaj w Google Play jakiegoś terminala BT gdzie będziesz miał okienko i zwykłą klawiaturę, i wtedy spróbuj wysyłąć 1 i 0.

Jezeli to odniesie skutek, sprawdź czy problem nie leży w samej aplikacji stworzonej przez Ciebie.

PS. A za pomocą np. programu putty jesteś w stanie zapalać i gasić tego leda po BT?

Link do komentarza
Share on other sites

Aby się zorientować gdzie tkwi błąd, poszukaj w Google Play jakiegoś terminala BT gdzie będziesz miał okienko i zwykłą klawiaturę, i wtedy spróbuj wysyłąć 1 i 0.

Używam też BlueTerm'a - jest to apka, która pozwala łączyć się przez bluetooth'a, np. z BTM'em i ma klawiaturę.

PS. A za pomocą np. programu putty jesteś w stanie zapalać i gasić tego leda po BT?

Napisałem sobie program, żeby zapalał i gasił diodę LED jak nacisnę klawisz 1 albo 0 na klawiaturze PC po kablu. Niestety nie mam jak sprawdzić przez bluetooth'a, bo mój PC nie ma BT :/. Choć pewnie można temu zaradzić kupując jakiś mały moduł na USB 2.0, ale nigdy nie miałem z takim czymś do czynienia.

Link do komentarza
Share on other sites

Używam też BlueTerm'a - jest to apka, która pozwala łączyć się przez bluetooth'a, np. z BTM'em i ma klawiaturę.

Dobra, fajnie że masz tego BlueTerma, ale czy za jego pomocą udało Ci się zamrugać tą diodą?

Bo jeżeli tak - to wyeliminujemy dużo niewiadomych.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Sprawdzę to już jutro, bo teraz hmm... godzina 😃

[ Dodano: 17-07-2014, 14:34 ]

Edit(17.07.2014-14:34):

Sprawdziłem mój program, wgrałem do uC podłączyłem BTM'a, włączyłem BT w telefonie, włączyłem BlueTerm'a i klikałem 1 i 0 i dioda zapalała się i gasiła. Do tego w telefonie na wyświetlaczu pokazywał się napis, który miał być pomocny w debugowaniu programu. Więc program działa z apką BlueTerm.

Potem zrobiłem to samo z adapterem bluetooth do PC i modułem BTM i działa poprawnie: klikam 1 - dioda świeci, klikam 0 - dioda gaśnie.

[ Dodano: 17-07-2014, 19:40 ]

Edit(17.07.2014-19:40):

Sprawdziłem jaki "numer" wysyła klawisz 1 i 0 w programie BlueTerm (jak i na klawiaturze PC). Okazało się, że klawiszowi 1 odpowiada nr. 49, a 0 -> 48, więc zmieniłem w apce zamiast 1 dałem 49, a za 0 -> 48. Zainstalowałem apke na tele i ją przetestowałem - działa. Ale mam pewien niedosyt, czemu tamto nie działało? Czemu działało to koledze Naelektryzowanemu w jego kursie, kiedy używał 10 i 11?

Link do komentarza
Share on other sites

No bo te Twoje znaki "0" i "1" są zakodowane za pomocą kodów ASCII

Opisałem to w swoim kursie. (link do kursu w opisie do tego postu)

Możliwe że u Naelektryzowanego w kodach znajdują się jakieś funkcje do konwersji kodów ASCII na znaki takie, jakie widzimy na komputerze.

Kawałek mojego kodu, co prawda jest w C, ale łatwo go na logikę zrozumieć

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

}

co to znaczy np. "105" - w kodzie ASCII oznacza to małą literkę "i"

Spójrz do tego pliku, na pierwszą stronę, tam masz wytłumaczenie kodów ASCII od 0 do 127

https://www.forbot.pl/forum/download.php?id=2882

[ Dodano: 17-07-2014, 20:58 ]

Co do tego pliku:

Patrz na nagłówek tabeli (tak dla jasności jeszcze)

Interesuje Cię to co jest w kolumnie Dec, czyli Decimal, czyli znaki zapisane w systemie dziesiętnym

  • Lubię! 1
Link do komentarza
Share on other sites

Kawałek mojego kodu, co prawda jest w C, ale łatwo go na logikę zrozumieć

co to znaczy np. "105" - w kodzie ASCII oznacza to małą literkę "i"

No tak: 105 -> i ; 106 -> j ; 107 -> k ; 108 -> l ; 113 -> q.

Co do tego pliku:

Patrz na nagłówek tabeli (tak dla jasności jeszcze)

Interesuje Cię to co jest w kolumnie Dec, czyli Decimal, czyli znaki zapisane w systemie dziesiętnym

Tak, to wiem, że mnie interesuje zapis w systemie dziesiętnym.

No bo te Twoje znaki "0" i "1" są zakodowane za pomocą kodów ASCII

Opisałem to w swoim kursie. (link do kursu w opisie do tego postu)

Możliwe że u Naelektryzowanego w kodach znajdują się jakieś funkcje do konwersji kodów ASCII na znaki takie, jakie widzimy na komputerze.

To aby ta apka działała z 1 i 0 (i nawet z 10 i 11) to wystarczyłoby zrobić konwersję znaków ASCII na takie, jakie widzimy na komputerze?

Link do komentarza
Share on other sites

Tak, w tym PDF'ie znajdź jaki kod posiadają cyfry "0" i "1"

To aby ta apka działała z 1 i 0 (i nawet z 10 i 11) to wystarczyłoby zrobić konwersję znaków ASCII na takie, jakie widzimy na komputerze?

Nie do końca rozumiem o co Ci chodzi, w każdym razie proponuję aby komputer/telefon wysyłał do robota tylko jeden znak ASCII, w sensie jeden symbol (w języku C mówi się Char, jak to się nazywa w Bascomie, to nie wiem)

Jak już to zrobisz, i będziesz pewien że to działa, to wtedy dodasz sobie inne komendy, ale także kodowane jako jeden znak (char) ponieważ tak będzie łatwiej. Masz ok. 100 charów widzialnych na klawiaturze, a po za tym jeszcze kolejne znaki, niekoniecznie widzialne, które będziesz mógł w przyszłości wykorzystać.

Ja ostatnio robiłęm znowu coś w podobie, ale tym razem jako okienkową aplikację C#, w której wysłanie przez komputer:

'Q' zapalało leda

'q' gasiło leda

gdy wysłąłęm 'V' robot zwracał mi informację o napięciu na akumulatorach,

no i oczywiście sterowałem ruchem robota za pomocą 'i' 'j' 'k' 'l' 😉

[ Dodano: 17-07-2014, 23:01 ]

to wystarczyłoby zrobić konwersję znaków ASCII na takie, jakie widzimy na komputerze?

Możesz, ale nie musisz, jak widzisz ja działąm bez konwersji.

Ewentualnie można zrobić makra, ja ten kod w C mogę zrobić na co najmniej 3 sposoby

#1

switch(komenda)
{
case 105: set_pwm(45,45); break; // PRZOD 
}

#2

#define 105     I       //gdzieś na początku programu

switch(komenda)
{
case I : set_pwm(45,45); break; // PRZOD 
}

#3

switch(komenda)
{
case 'i': set_pwm(45,45); break; // PRZOD 
}

Jak widzisz, w żadnym wypadku nie musiałem dokonywać żadnej konwersji

Link do komentarza
Share on other sites

🙂

Ja się zabrałem za poprawę programu i działa 😉

Zainstalowałem tą standardową apkę kolegi Naelektryzowanego (z 10 i 11), napisałem odpowiednio program no i działa. Jak klikam "Start" dioda się pali, a jak "Stop" - gaśnie. Teraz tylko to wykorzystać do zdalnego start/stop do LF'a 🙂

[ Dodano: 17-07-2014, 23:08 ]

Edit: Widzę, że jeszcze coś dopisałeś. Tak, widzę, że to zrobiłeś na 3 różne sposoby i nie musiałeś robić żadnej konwersji. W moim działającym programie też nie mam konwersji tylko:

Odbior = Inkey()
    If Odbior = 10 Then
         Dioda = 1
    Elseif Odbior = 11 Then
         Dioda = 0
    End If
Link do komentarza
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!

Anonim
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.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.