Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 1 cze 2025, o 01:30


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 29 ] 
    Autor Wiadomość
    PostNapisane: 17 lis 2017, o 18:28 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    Witam
    Mam urządzenie które przesyła dane ja chciałby je obrobić i wyświetlić. Problem polega na tym , że buffor robi co chce z danymi i nie wiem dlaczego tzn.
    Te same urządzenie wysyła mi dane na procesor ATMEGA32,a ja sobie łapie wszystko co spadnie do UDR i przypisuje sobie do tablicy przykładowo danerx(1) itd. Wszystko działa oki i na wyświetlaczu nie ma pomyłek ani zacinek. W nieszczęsnym B4A buffor sobie łapie raz 3 bajty raz 4 raz całą ramkę np. długośći 24. Ramka wygląda mniej więcej tak. B=bajt

    B1(startowy)----------------------B2(ile_znaków ma ramka)-----------------B3(suma kontrolna)-------------------B4 (klucz kodujący)--------B5 (pierwsze dane do obrobienia)

    Napisałem sobie tak:
    Buffor(0) sprawdzamy czy jest startowy
    potem
    Buffor(1) ile znaków będzie miała ramka
    potem
    buffor(2) jaka jest suma kontrolna do sprawdzenia



    Niestety przychodzi mi do buffer.lenght=4 bajty czasami 5 a czasami jak wiatr dobrze zawieje to się zgodzi z [Buffor(1)i mam tyle ile znaków będzie miała ramka] i wszystko trybi. Myślę, że buffor ma własną strategię kiedy zamknąć buffor i ile czekać na kolejne bajty. Czy da się jakoś to zmienić timout bufora pomiędzy kolejnymi znakami np. lub wyłączenia i odbieranie po bajcie tak jak zrobiłem na ATMEGA32 za pomocą przepisywania z UDR.

    Gdyby dało się ten pi.. buffor wyłączyć lub wstawić timeout aby czekał dłużej na kolejne znaki byłoby cudnie. Od razu dodam, że przerwy pomiędzy bajtami są różne(ale bardzo króciótkie), ale android łapie najczęsciej po 4 lub 5 bajtów.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lis 2017, o 18:36 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    http://forum.atnel.pl/topic19536.html
    Może to ci w czymś pomoże.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lis 2017, o 18:48 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    Harry napisał(a):
    http://forum.atnel.pl/topic19536.html
    Może to ci w czymś pomoże.


    Niestety nie znalazłem tam odpowiedzi.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lis 2017, o 18:54 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Echhh, użyj klasy AsychStream, to rozwiąże twój problem z buforowaniem.
    A jak go użyć prawidłowo, masz w ostatnim kodzie w powyższym temacie.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lis 2017, o 19:14 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    używam :).Sub Strumien_NewData (buffer() As Byte) . Tylko chodzi o to, że buffor mnie ogranicza. Chodzi o to ze buffer zeruje się po odebraniu np. 4 bajtów zamiast odebrać np.24 bo tyle urządzenie wysłało. Aplikacja odbiera cały czas albo buffer.lenght=3 albo buffer.lenght=3 czasami wskoczy buffer.lenght=24. Jakoś na procku to było proste i bufforować nie trzeba było.
    Opiszę jeszcze raz chcę oczekiwać na bajt starowy do momentu, aż się pojawi. Jak się pojawi to czytam drugi bajt i wiem ile przyleci jeszcze bajtów wtedy jak przyleci tyle ile miałem w 2 bajcie po startowym. Sprawdzam 3 bajt, który jest sumą kontrolną i wiem czy ramka jest prawdziwa. NA ten moment mam tak, że mi buffor zbiera 4 bajty na raz a potem się zeruje i znowu 4 lub 3 bajty, które prawdopodobnie powinny być kolejnymi nie wiem dlaczego buffor się zeruje i liczy od nowa zamiast czekać do jakieś wartośći np. 128 bajtów. Ja przecież sam mogę go wyzerować jak odbiorę tyle co potrzeba.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lis 2017, o 19:25 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Po raz kolejny mówię Ci, ściągnij i zobacz jak to jest zrobione, obawiam się że nikt inny nie pomoże jeżeli nawet nie chce Ci się przeanalizować kodu.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lis 2017, o 19:47 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    Ja muszę robić to na bajtach. Na stringach będzie dużo zabawy z szyfrowaniem przewalaniem na hex i XORowaniem przez klucz. Nie mówiąc o innych problemach jakie niesie odbieranie do stringów danych. Szlak mnie trafia na procku zajęło mi to jeden dzień, a tu siędze już 3 i nie wiem co te badziewne biblioteki robią.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lis 2017, o 19:50 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    To może zacznij od wstawienia kodu.

    Wysłane ze srajfona

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lis 2017, o 20:14 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    To wolę posiedzieć jeszcze z tydzień:) za dużo mi zajęło złamanie kodowania. Jak chciałem z archaicznego procka i wyświetlacza przewalić na androida to się schody zaczęły.Tak mam w bascomie gdzie bajty wpadają do UDR.



    To wszystko potem tylko jeszcze dodatkowe rozkodowanie po kolei od rxdana(5) do rxdana(ilosc) . Flaga moja_ramka=1 oznacza , że wszystko się zgodziło i po wyjściu z przerwania obrabia po kolei dane na poprawny wynik.



    Ostatnio edytowano 22 lis 2017, o 15:43 przez fisto5885, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 lis 2017, o 20:24 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Naprawdę myślisz że tu siedzą wróżki ze szklaną kulą?
    Wstaw kod B4A z komentarzami, przykładem co wysyłasz, co trafia a co powinieneś osiągnąć.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2017, o 09:21 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    Dobra napisze obejscie najwyzej się wysypie jak zmieni się wyglad ramki.Tak czy tak widze ,ze nikt nie zna dzialania buforu i trzeba obejść jego działanie.Tak to jest z gotowymi bibliotekami zawsze coś wyskoczy i bedzie przeszkadAć.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2017, o 10:57 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    A ja mimo wszystko nie rozumiem braku kodu, nie chodzi o jego obróbkę, tylko tego co wyczynia z buforem. Jedno podstawowe pytanie, czy w danych które wysyłasz jest w jakikolwiek sposób oznaczony koniec ramki?
    Odbierasz całą ramkę, czy pojedyncze bajty obrabiasz w locie?
    Nie podałeś nawet najmniejszego punktu zaczepienia i oczekujesz że ktoś to zrobi za Ciebie?

    Zajrzałeś na forum B4x?

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Ostatnio edytowano 18 lis 2017, o 11:08 przez Harry, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2017, o 11:05 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    To moze inaczej jak moge odebrac bajty aby nie korzystać z biblioteki asyncstream i newdata,albo jak moge przerobic ta biblioteke lub edytować.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2017, o 11:10 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Najpierw odpowiedz na pytania z mojego poprzedniego posta;)

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2017, o 14:50 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    Nie ma znaku końca ramki . Tak jak pisalem po 2 bajcie dostaje info jak duzo znakow bedzie.Moze byc od 24 do 84 bajtow ramka. Na atmedze obrabiam pojedyncze na b4a wpada mi od 3 do 5 do buforra i nie moge nad tym zapanować. Wolałbym aby wpadał 1 lub np. 100.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2017, o 16:00 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Skoro nie pokażesz kodu, to może chociaż się dowiem czy dużo się różni od tego z przykładu.

    Wysłane ze srajfona

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2017, o 18:17 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    To jest to samo tylko tamto z atmegi32.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 18 lis 2017, o 20:07 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Chodzi o kod B4A, który Ci rzekomo nie działa. Sprawdzałeś w ogóle debugiem czy twoje dane dochodzą, zanim nie zacząłeś kombinować z poszczególnymi bajkami? To jest podstawą przy pisaniu softu.

    Z mojej strony tyle, bo jak widać wogóle Ci na tym nie zależy, więc po co marnować swój czas.
    Jak pokażesz że jest inaczej, to może w wolnej chwili rzucę okiem ;)

    (ująłbym to inaczej, ale wtedy to byłby mój ostatni post tutaj, a na odchodne zostałbym poczęstowany sałatką z bananów, a tego bym nie chciał)

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2017, o 08:58 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    Już w sumie nic kodu nie mam próbowałem wszystkiego i szlak mnie trafia. Chodzi mi tylko o to jak można odebrać 1 bajt i sprawdzić czy to jest to co chcę i mogę odebrać następne. To jest trochę skomplikowana transmisja nie ma znaków końca tylko znak początku. Ramka się zmienia długością w zależności co przyjdzie na 2 bajcie(wtedy wiem ile w sumie mam odebrać). Jednak bufor psuje robotę. Zawsze odbiera po 4 lub po 5 bajtów i tak mam Ramki:
    ------------Jakiś bajt------------startowy-------ilosciowy--------sumacrc------cos tam dalej.
    innym razem jest inna kolejność.

    ------------startowy------------ilosciowy--------------sumacrc---------costam dalej

    Ja chciałbym to robić w locie po jednym bajcie. -



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2017, o 10:29 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Jesteś pewny że to nie jest pakiet udp? Z czego one pochodzą, oraz jak to odbierasz - bluetooth czy WiFi?

    Wysłane ze srajfona

    ------------------------ [ Dodano po: 23 minutach ]

    fisto5885 napisał(a):
    używam :).Sub Strumien_NewData (buffer() As Byte) . Tylko chodzi o to, że buffor mnie ogranicza. Chodzi o to ze buffer zeruje się po odebraniu np. 4 bajtów zamiast odebrać np.24 bo tyle urządzenie wysłało. Aplikacja odbiera cały czas albo buffer.lenght=3 albo buffer.lenght=3 czasami wskoczy buffer.lenght=24. Jakoś na procku to było proste i bufforować nie trzeba było.

    Nie robisz czasem operacji na tablicy buffer?
    Kiedy sprawdzasz długość bufora?
    fisto5885 napisał(a):
    Już w sumie nic kodu nie mam próbowałem wszystkiego

    Powiedz po prostu - "Nie próbowałem", tak będzie prościej
    Wrzuć w końcu kod który Ci nie działa, bo moja szklana kula wciąż jest u szklarza.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2017, o 15:18 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    Podłączone przez bluetooth. To trochę inne urządzenie problem podobny.Początek ramki to 56. Oczywiście wszystko leci ciągiem bez enterów linfederów.
    Buffer.lenght czyta różnie 28,29,30,31
    Tak wygląda to co leci:
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    wrzucam też zdjęcie co mam na telefonie bufferstring to co teoretycznie wpadło w danym momencie do buffora.
    Obrazek



    Ostatnio edytowano 23 lis 2017, o 10:52 przez fisto5885, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2017, o 15:28 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Ten sub jest w Activity?
    Wklej jeszcze jak inicjalizujesz klasę asynchstream, o ile w ogóle z niej korzystasz. Najlepiej byłoby jak byś wrzucił projekt w załączniku, albo przynajmniej podał jak dochodzisz do tego suba.

    Wysłane ze srajfona

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2017, o 15:35 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    Trochę brudnopis


    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Ostatnio edytowano 23 lis 2017, o 10:51 przez fisto5885, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2017, o 15:55 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Szkoda że nie w zipie, ale już trudno. Jak wrócę na kompa to rzucę na to okiem, bo bez debugera ciężko się połapać w tak obszernym kodzie.

    Wysłane ze srajfona

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2017, o 16:02 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    Harry napisał(a):
    Szkoda że nie w zipie, ale już trudno. Jak wrócę na kompa to rzucę na to okiem, bo bez debugera ciężko się połapać w tak obszernym kodzie.

    Wysłane ze srajfona

    Dalej jest tylko gorzej, ale raczej ogarnę tu coś się dzieje po za mną i nie wiem co.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2017, o 20:38 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    To do posprzatania na pozniej na razie nie wiem co zrobić z tą transmisja.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lis 2017, o 09:07 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Spróbuj użyć
    Składnia: [ Pobierz ] [ Ukryj ]
    język vb
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    zmień co trzeba, ta funkcja odbiera tylko właściwe dane - rozmiar bufora jest już taki jak ma być z wyjątkiem 4 pierwszych bajtów, czyli właśnie bez rozmiaru. W międzyczasie popracuje nad innym sposobem.

    Wysłane ze srajfona

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lis 2017, o 10:50 
    Offline
    Nowy

    Dołączył(a): 24 paź 2017
    Posty: 15
    Pomógł: 0

    Harry napisał(a):
    Spróbuj użyć
    Składnia: [ Pobierz ] [ Ukryj ]
    język vb
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    zmień co trzeba, ta funkcja odbiera tylko właściwe dane - rozmiar bufora jest już taki jak ma być z wyjątkiem 4 pierwszych bajtów, czyli właśnie bez rozmiaru. W międzyczasie popracuje nad innym sposobem.

    Wysłane ze srajfona

    Dzięki wielkie ogarnołem na stringach i dostałem HEX. Uffff kawał roboty teraz mam problem z dekodowanie dostaję wartości bajt ujemne w procku w Bascomie jest normalnie 0-255. tutaj -128 do 128 jak to przerobić na postać. Możliwą do dekodowania muszę mieć wartości bajtowe standardowe. Oraz jak potem XOR'wać bajty przez klucz w postaci bajtowej??



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lis 2017, o 10:53 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Jak dostajesz ujemne, to spróbuj przelecieć bufor/tablice przez ByteToString(...)
    Zajrzyj TU, bo mi się nie chce kopiować ;)

    ------------------------ [ Dodano po: 49 minutach ]

    Odnośnie drugiego pytania, przekonwertuj na Int, a potem
    Składnia: [ Pobierz ] [ Ukryj ]
    język vb
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Swoją drogą niewiem czemu nieda się tak jak w klasycznym vb6 - wart1 xor wart2, pewnie nie chcieli za dużo kopiować ;)

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 29 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO