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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.