logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Pytanie o program Bluestera

pier 10 Lis 2010 22:48 3501 28
  • #1 8727804
    pier
    Poziom 24  
    Witam.
    Koledzy mam taki kawałek kodu ze sterownika bluester od AVT:
    
    Do
    K = Inkey()
    Reset Watchdog
    
    If K = 35 Then
    Do
    Reset Watchdog
    K = Inkey()
    Select Case K
    Case 37:
    Gosub Stan
    Case 48:
    Toggle Stan.0
    Case 49:
    Toggle Stan.1
    Case 50:
    Toggle Stan.2
    Case 51:
    Toggle Stan.3
    Case 52:
    Toggle Stan.4
    Case 53:
    Toggle Stan.5
    Case 54:
    Toggle Stan.6
    Case 55:
    Toggle Stan.7
    


    Wszystko jest dla mnie zrozumiałe oprócz tego: If K=35 Then...
    Po co procesor musi odebrać na początku programu ten znak 35 aby przejść do dalszego wykonywania programu?
    Czy jest to może potwierdzenie że moduł BTM-222 nawiązał połączenie z telefonem komórkowym?
  • #2 8729351
    ShEvU_elektro
    Poziom 25  
    Wygląda na to że to 35 w ascii czyli po prostu "#" jest początkiem pewnej ramki.
    Widać że w pętli potem odbiera kolejny znak i dla tego, który otrzymał wykonuje jakąś akcje.
  • #3 8730013
    pier
    Poziom 24  
    No dobrze powiedzmy że tak ma być i już.
    A czy może mi ktoś powiedzieć jak zmienić nazwę tego modułu?
    Mam oryginalny program do tego kitu AVT a w nim fragment który zmienia nazwę urządzenia:
    
    Reset Watchdog
    Print "A";
    Waitms 50
    Reset Watchdog
    Print "T";
    Waitms 50
    Print "N";
    Waitms 50
    Reset Watchdog
    Print "=";
    Waitms 50
    Print "B";
    Waitms 50
    Print "l";
    Waitms 50
    Print "u";
    Waitms 50
    Reset Watchdog
    Print "e";
    Waitms 50
    Print "s";
    Waitms 50
    Print "t";
    Waitms 50
    Print "e";
    Waitms 50
    print "r";
    waitms 200
    

    Rzekomo zmienia bo nawet moduł z kitu miał nazwę "serial adaptor".
    Próbowałem już na różne sposoby i nie mogę zmienić tej nazwy.
    Czytałem na elektrodzie że tak właśnie się to robi!!!
    W instrukcji kitu piszą że każdą komendę AT należy zakończyć enterem, a ja tu takowego nie widzę.
    Dodałem enter-a poprzez print chr(13) i tez nic nadal urządzenie ma nazwę "serial adaptor".
    Jak to zrobić??? Pomocy.
  • #4 8730216
    mirekk36
    Poziom 42  
    Posłuchaj a czy ty zamierzasz za każdym startem procka czy tam w ogóle jakoś często zmieniać tę nazwę ???? (toż to jest hmm leciutko bez sensu moim zdaniem)

    Podłącz się do modułu za pomocą komputera a nie procka (ale oczywiście poprzez nogi RxD oraz Txd modułu a nie przez Bluetooth. I w terminalu wydaj to polecenie a następnie kliknij ENTER. Znak entera MUSI BYĆ a jeśli go ktoś nie napisał to znaczy że albo uznał że nie warto pisać o tak oczywistej rzeczy albo zapomniał

    Każdy parametr, który się ustawia w BTM zapamiętuje się w jego własnej pamięci EEPROM na zawsze. Więc gdy ustawisz nazwę z terminala to już będziesz zawsze ją miał. Po co tak mieszać ???

    A jeśli się uprzesz i będziesz chciał to zrobić z procka to oczywiście że polecenie musi się kończyć znakiem ENTER (0x0d szesnastkowo albo 13 dziesiętnie)
  • #5 8730285
    pier
    Poziom 24  
    No tak czytałem Twój temat i wiem że najlepiej skonfigurować go za pomocą komputera ale nie ma jak go podłączyć.
    Dlaczego niby procesor nie może zmienić tej nazwy?
    BTM jest w zasadzie skonfigurowany bo cały czas pracuje z urządzeniem ale dlaczego jest problem ze zmiana nazwy?
    Kombinuje już od kilku godzin jak to zrobić i powiem że udało się ale moduł raz na około 10 razy reaguje na zmianę nazwy a na pozostałe 9 nie reaguje. Czasami nawet gubi ostatni znak nazwy. Co może być tego przyczyną?
  • #6 8730726
    mirekk36
    Poziom 42  
    Ależ ja nie nie pisałem że nie można zmienić nazwy za pomocą procesora. Można! tylko nie rób tego przypadkiem w jakiejś pętli Do LOOP bo BTM zwariuje w końcu
    A jeśli nie chcesz mieć gubionego ostatniego znaku to jak mówiłem wyślij na koniec znak ENTER , nie robisz tego ???? to nie dziw się że się nazwa nie zmienia. Poza tym w tym przykładowym kodzie który pokazałeś to to

    waitm 200 po ostatnim znaku "r" jest bez sensu

    daj po ostatnim znaku także to opóźnienie waitms 50

    a następnie

    PRINT Char(13);

    ale później daj

    Do

    LOOP

    żeby ta nazwa nie była zmieniana wciąż w nieskończonej pętli

    Musi się ładnie zmienić

    tylko żeby w komputerze PC była widoczna nowa nazwa trzeba moduł BTM zrestartować (tzn zasilanie OFF/ON)

    a poza tym odinstalować sterownik BT i zainstalować na nowo wykrywając nowe urządzenie w otoczeniu BT

    Zawsze to działa. (gorzej jeśli zapuszczasz tą zmianę nazwy w pętli Doo Loop) to wtedy się nie dziw dziwnym efektom
  • #7 8730862
    pier
    Poziom 24  
    Zmiana nazwy nie jest w pętli do loop.
    Moduł bluetooth po zmianie nazwy jest resetowany(ON/OFF).
    Dodałem równe czasy waitms i enter na końcu.
    Usuwam z komórki wszelkie ślady po starym połączeniu i dodaje nowe urządzenie uwierzytelnione.
    Efekt ta sama nazwa modułu bluetooth!
    Raz czy dwa nazwa się zmieniła i to podczas kombinowania z funkcją ECHO.
    Teraz moduł milczy na zmianę nazwy.
  • #8 8730998
    mirekk36
    Poziom 42  
    A no widzisz bo podstawą przy konfiguracji takiego modułu to jest po ludzku podłączyć go najpierw do PC i ustawić:

    ATE0
    ATLx (gdzie x oznacza interesującą cię prędkość)
    ATN=WLASNA_NAZWA

    i jeszcze nigdy na kilkaset które przeszły przez moje łapki nie zdażył się nawet jeden przypadek żeby nie zadziałało

    Dla mnie milion razy wygodniej jest to podłączyć przez jakąś przejściówkę USB/RS232 i do terminala ;) niż kombinować z prockiem ;)

    Co więcej można jeszcze dla totalnej przeźroczystości dać:

    ATO1 (Disable auto-connection feature, user should manually use “ATA”
    command to connect a remote device.) wtedy zamieniasz taki modłu BTM w najczystszy SZNUREK RS232 , nie pojawi się żadne przypadkowe echo , polecenia CONNECT czy DISCOONECT przy połączeniu / rozłączeniu

    Potem to już moduły BTM używa się tylko i wyłącznie do transmisji a nie jakichś ustawień z procka. (przynajmniej ja tak zawsze tzn w 90% przypadków robię)

    A te pozostałe 10% przypadków przypada na konfigurację MASTER gdzie owszem czasem jest konieczność wysyłania poleceń AT z procka (ale nie ustawiających jakieś wartości do EEPROM) tylko do sterowania modułem, np wyszukuwanie urządzeń w otoczeniu BT czy też ręczne nawiązywanie połączenia ze SLAVE (jeśli tak przewiduje projekt) choć najczęściej to bywa i w trybie MASTER wszystko w pełni automatycznie robione gdyż wcześniej w terminalu na PC przydzielam na stałe MAC Adres urządzenia SLave z któym zawsze będzie się on łączył.

    Oznacz to jedno - wysyłanie poleceń AT działa na 100000000000% gdy robimy to także z procka bo sam niejednokrotnie to robiłem.

    A jeśli tobie nie działa to niestety chciał nie chciał - coś źle robisz i nie ma wyjścia bo ja śmiem twierdzić, że nie ma uszkodzonych modułów BTM po zakupie i jestem się gotów o to założyć o skrzynkę zacnego trunku ;)

    Jeśli mówisz że ci komórka widzi starą nazwę to może to być niestety wina także oprogramowania stosu BT w komórce jeżeli w procku na 100% wszystko robiłbyś dobrze. Wystarczy spróbować rozpoznać taki moduł BT ze zmienioną przez ciebie nazwą w innym kompie. Rozumiem że nie masz takiego pod ręką. Ale i mnie się zdarzało że sterowniki w kompie PC na siłę widziały wciąż starą nazwę modułu, dopóki ich w pień "ręcznie" nie wyrżnąłem z PCta i z rejestrów Windows. Dopiero wtedy gdy wszystko wykrywało się od początku to okazywało się że nowa nazwa jest już widoczna (ale to było w dawnych czasach gdy jeszcze próbowałem bawić się badziewnymi sterownikami o nazwie BlueSoleil do kompa). Odkąd używam sterowników firmy Widcomm odtąd nigdy nie mam takich problemów.

    To tyle.
  • #9 8731796
    pier
    Poziom 24  
    Mam taką przejściówkę USB/RS232 na scalaku pl-2303. Czy się nada? I jaki później program odpalić żeby ten moduł skonfigurować?
  • #10 8731825
    mirekk36
    Poziom 42  
    każda się nada ;) ... program? dowolny terminal. Jeśli masz Win XP to masz wbudowany "Hyperterminal" jeśli jakiś Vista czy Win7 do dowoly inne zassany z netu za free. Ja najchętniej korzystam z programu "Putty" ale też bez problemu zassasz "Realterm" no i wiele wiele innych
  • #11 8731852
    pier
    Poziom 24  
    A jeszcze jedno czy potrzeba do takiej przejściówki jeszcze konwertera stanów aby podłączyć BTM-222?
  • #12 8732258
    mirekk36
    Poziom 42  
    Zależy jaka jest ta przejściówka? ;) Miernik w rękę i sprawdź, jeśli pojawiają się na Tx oraz Rx napięcia dodatnie i ujemne np +8V do +12V oraz -8 do -12V to musisz dać po drodze jeszcze MAX232.

    A jeśli masz tam standard TTL czyli tylko zakres napięć 0 do +5V to po co MAX232?

    Na twoim miejscu zaopatrzyłbym się w taką jedną porządną przejścióweczkę USB/RS232 - TTL. Ja bez czegoś takiego w swoim warsztacie nie wyobrażam sobie życia ;) toż przydaje się do wszystkiego.
  • #13 8734906
    pier
    Poziom 24  
    Podłączyłem BTM-a do mojej przejściówki zainstalowałem sterowniki i włączyłem hyperterminal.
    Zmiana nazwy idzie pięknie ale inne komendy dają w odpowiedzi ERROR.
  • #15 8734986
    pier
    Poziom 24  
    Ok wszystko działa.
    Problemem było ustawienie lokalnego echo w hyperterminal-u.
    A jak włączyć funkcję ECHO w BTM222?

    Ma ktoś może kawałek kodu do bascoma który po odebraniu jakiegoś znaku od tego modułu np. zmieni stan jakiegoś portu?
  • #17 8735199
    pier
    Poziom 24  
    Tak właśnie jest.
    Wszystko ładnie śmiga.
    Trzeba był od razu podłączać tak jak Pisałeś w poradniku.
    Dzięki.
  • #18 8735239
    mirekk36
    Poziom 42  
    A jeśli chodzi o wysyłanie i odbieranie danych przez BTM to robisz to dokładniuśko tak samo jak byś działał po zwykłym kablu RS232 - jak po swojej przejściówce itp ..... nie robiłeś tego nigdy? ;) jeśli robiłeś to po co ci jakieś kody przykładowe ?
  • #19 8735302
    pier
    Poziom 24  
    A no nigdy tego nie robiłem. A jak próbowałem z tym modułem to jakoś mi to nie wychodziło.
    Mam program na komórce który po naciśnięciu jakiegoś przycisku wysyła odpowiedni znak i chciałbym aby procesor po odebraniu go zareagował.
  • #20 8735356
    mirekk36
    Poziom 42  
    Posłuchaj - a wiesz że warto ;) .... najpierw zrób sobie komunikację RS232 pomiędzy terminalem na Windows używając nie BTM'a tylko tej swojej przejściówki i podłączonego procka AVR. Jak ci wszystko wyjdzie tak jak byś chciał to potem zamiast kabla daj BTM'a i będzie wszystko dokładnie tak samo działać tylko zmieni się numer portu COM w komputerze.

    A co do komórki to nie tak chola chola ;) żeby coś wysłać do BTM'a to trzeba też program napisać do tejże komórki a nie żeby się jakieś klawisze wysyłały ???? po naciskaniu klawiatury samoczynnie ;) No chyba że jesteś na 10000% pewien że ten program wysyła przez BTM ???? ale ciekawe co to za program ? czy masz w nim wybór połączenia itd. Będziesz się więc borykał z problemami łączy zamiast najpierw zobaczyć o co chodzi w podstawowej komunikacji po najzwyklejszym kablu RS232.

    To tak jakbyś chciał żeby z komputera coś wysłać do procka wciskając klawisze klawiatury ale bez odpalenia żadnego programu/terminala itp.
  • #21 8737217
    pier
    Poziom 24  
    Pisałem że mam program na komórkę który na 100% wysyła znaki przez BT.
    Jest to program od Bluestera:Link
    Podłączyłem BTM-a do kompa i po nawiązaniu połączenia z komórką na hyperterminal-u wyskakuje: CONNECT '0016-B8-A8E406'
    Po naciśnięciu klawisza 2 mam na terminalu #2#=.
    Teraz już wiem dokładnie co komórka wysyła do BTM-a, tylko nie wiem po co autor programu zrobił wysyłanie znaków w tych chasz-ach? I dlaczego na końcu każdego odebranego znaku jest "=" ?
  • #22 8737567
    mirekk36
    Poziom 42  
    Jak to po co dał znaczki # ??? bardzo fajnie, przecież to znacznie ułatwia ci parsowanie odebranego stringu. A znaczek = może był w planach do użycia czy są jakieś inne opcje, ale można go przecież zignorować co za problem?
  • #23 8738357
    pier
    Poziom 24  
    A co znaczy parsowanie?
  • Pomocny post
    #25 8738458
    mirekk36
    Poziom 42  
    pier napisał:
    A co znaczy parsowanie?


    Nie mylić z "prasowaniem" ;)

    A na poważnie:

    http://www.google.com/search?hl=pl&q=parsowanie

    a w uproszczeniu w naszej branży - to analiza stringów ;) (nie mylić z częścią garderoby damskiej) .... podstawowy sposób analizy przesyłanych informacji poprzez różnego rodzaju łącza szeregowe.

    Najlepiej parsuje się w oparciu o TOKEN'y ;) ... czyli jasne i wyraźne "kawałki" takaiego analizowanego stringa.

    Np łańuch znaków:

    "123,15,AF,0F,"jakiś napis",23"

    zawiera 6 tokenów oddzielonych separatorem w postaci przecinka. Oczywiście w łańuchu można stosować wiele różnych separatorów. Ważne żeby zarówno po stronie nadawczej jak i odbiorczej tak samo parsować wysłany i odebrany string, czyli wiedząc jakie separatory występują.

    1szy token: = 123 (czyli już masz przesłaną np wartość jakiejś zmiennej itd)
    2gi token = 15
    3ci token = AF
    4ty token = 0F
    5ty token = "jakiś napis" (a tu masz jakiś własny cały tekst przesłany jako jeden token)
    6ty token = 23

    Jak widzisz w takim jednym stringu można w bardzo prosty sposób przesłać wiele danych. Dlatego jak twój program BlueSter wysyła łańcuch:

    "#2#="

    to łatwo można wydzielić w nim 1 token, który ograniczony jest separatorami #
    token = 2

    Jeśli zatem jakieś inne urządzenie wysyła jakąś ramkę danych po RS232 to zwykle będzie to tak wyglądało. Oczywiście nieraz jest to tranmisja czysto binarna wtedy i analiza jest całkiem inna ;) ot trzeba znać wcześniej dokładny format ramki.

    Jednak parsowanie łańcuchów jest bardzo proste, szybkie, łatwe, wygodne i bardzo bardzo często stosowane. Co więcej dzięki temu że przesyłane są tylko znaki ASCII to każdy przesyłany łańcuch może być zakończony zawsze znakeim ENTER co już szalenie ułatwia zorganizowanie wspaniałej transmisji.

    Chociaż bardzo wielu początkujących bardziej boi się takiego właśnie przesyłania danych i zwykle pakuje się na swoje nieszczęście w transmisję binarną, która wbrew pozorom jest dla nich zabójcza i sprawia mnóstwo problemów ;)
  • #26 8982121
    XQV
    Poziom 2  
    Posiadam od niedawna zestaw AVT2890 i choć pierwszy raz widzę na oczy Bascoma to analizując pętlę główną programu:
    Main:
    Do
    K = Inkey()
    Reset Watchdog
    
    If K = 35 Then
    Do
    Reset Watchdog
    K = Inkey()
    Select Case K
    Case 37:
    Gosub Stan
    Case 48:
    Toggle Stan.0
    Case 49:
    Toggle Stan.1
    Case 50:
    Toggle Stan.2
    Case 51:
    Toggle Stan.3
    Case 52:
    Toggle Stan.4
    Case 53:
    Toggle Stan.5
    Case 54:
    Toggle Stan.6
    Case 55:
    Toggle Stan.7
    Case 56:
    Toggle Stan.8
    Case 57:
    Toggle Stan.9
    Case 100:
    Toggle Stan.14
    Case 101:
    Toggle Stan.11
    Case 102:
    Toggle Stan.13
    Case 103:
    Toggle Stan.12
    Case 104:
    Toggle Stan.10
    
    End Select
    
    Gosub Ustaw
    
    
    If K = 61 Then
    Gosub Stan_konfiguracji
    Gosub Ustaw
    Gosub Stan
    Exit Do
    End If
    
    K = 255
    Loop
    End If
    
    K = 255
    Loop
    Return

    dochodzę do wniosku, że 2 czy inna cyferka zmienia tylko odpowiedni bit zmiennej Stan a dopiero po znaku = (61 dziesiętnie) następuje sprawdzenie konfiguracji (czy wyście astabilne czy bistabilne), ustawienie odpowiednich wyjść układu a następnie przekazanie do komputera czy komórki informacji o tym ostatecznym stanie. Niestety nie posiadam komórki na której działałby BlueSter :(. Jakiego modelu używasz, pier?

    pier napisał:
    Ma ktoś może kawałek kodu do bascoma który po odebraniu jakiegoś znaku od tego modułu np. zmieni stan jakiegoś portu?


    Ten fragment ustawia wyjścia na podstawie bitów zmiennej Stan:

    Ustaw:
    
    For I = 0 To 3
    Reset Watchdog
    Temp = I + 2
    Portb.temp = Stan.i
    Next I
    
    For I = 0 To 5
    Reset Watchdog
    Temp = I + 4
    Portc.i = Stan.temp
    Next I
    
    Portd.2 = Stan.10
    Portd.5 = Stan.11
    Portd.6 = Stan.12
    Portd.7 = Stan.13
    Portb.0 = Stan.14
    Return
  • #27 8982306
    pier
    Poziom 24  
    Wcześniej używałem nokii E50 i samsunga ultra style a teraz mam do tego celu jakiegoś starego sony-ericssona.
    A jaki masz telefon że program Ci nie działa?
    Mi do tej pory tylko na nokii 5800 nie działał poprawnie no ale w niej nie ma klawiatury tylko dotyk.
  • #28 8982490
    XQV
    Poziom 2  
    Mam Nokię 5310 Express Music. Program uruchamia się, mogę wybrać urządzenie BT po czym następuje błąd i zamknięcie aplikacji. Widocznie Series 40 to za mało :( Na mojej starej Motce z Symbianem nawet nie chciał sie zainstalować. Sprawdziłem na pożyczonym Samsungu Wave i działał tylko tylko na dotyku. Od klawiatury qwerty oczywiście brak reakcji. A myślałem że będę miał taki zgrabny pilocik z tej 5310 :P
    Nie ma jakiejś aplikacji java pod Series 40 z terminalem? Widziałem klienta SSH ale żeby dało wysłać się np dowolną komendę AT z takiej komórki jak w PuTTY przez Serial.

    pier napisał:

    Po naciśnięciu klawisza 2 mam na terminalu #2#=

    Zastanawia mnie jak jest rozwiązane starowanie astabilne w tym układzie. Czy np jedne znaki zostają wysłane z chwilą przyciśnięcia przycisku a gdy zostanie on puszczony pojawiają się następne czy też ciąg znaków jest wysyłany przez cały czas gdy przytrzymywany jest przycisk?
  • #29 10352897
    slawko_k
    Poziom 35  
    Sorka za odkopanie trupa.
    Ta aplikacja na telefon bluester to na jakie telefony jest? bo sprawdziłem na noki 7230 oraz se k750 i na obu sie nie odpala
REKLAMA