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 w 2025? 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 4 maja 2025, o 17:13


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
    Autor Wiadomość
    PostNapisane: 24 cze 2017, o 21:54 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 sie 2015
    Posty: 205
    Lokalizacja: UK
    Pomógł: 10

    Witam szanownych użytkowników forum, :)
    Po wielu godzinach pracy poddałem się i postanowiłem zasięgnąć pomocy osób bardziej doświadczonych w Delphi ode mnie. Jestem praktycznie początkujący jeżeli chodzi o aplikacje na Windowsa.
    Wszystko na PC zrobione jest na podstawie poradników Mirka natomiast po stronie uC zastosowałem komunikację AT z Greenbooka.

    Za pomocą aplikacji na PC wysłam prostą komendę do uC, następnie urządzenie przechodzi w stan badania 2 przycisków i zależnie od wciśnięcia wysyłana jest odpowiedź jako string "TRUE" lub "FALSE" z powrotem do aplikacji. Do tej pory wszystko jest ok. Nastepnie string jest parsowany w programie i label obok przycisku zmienia się na TRUE lub FALSE (zdjęcie poniżej).

    Obrazek

    Niestety działa to tylko raz po nawiązaniu połączenia. Aby jeszcze raz sprawdzić stan przycisków, muszę zamknąć i otworzyć comport. Dane na 100% są wysyłane poprawnie. Potwierdzają to diody na ATB i terminal. Po prostu DataPacket analizuje je tylko za pierwszym razem.

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


    Obsługa komendy AT ze strony ATmegi:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Z góry dziękuję za odpowiedź.

    Pozdrawiam, ;)
    Michał

    _________________
    MMT Technologies



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 cze 2017, o 00:36 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27378
    Lokalizacja: Szczecin
    Pomógł: 1043

    Makowka napisał(a):
    if tab[0] = 'ans_tf' then begin

    Zastanów się i spróbuj sam wyjaśnić sobie i nam - np co to oznacza wg ciebie ?

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 cze 2017, o 07:59 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 sie 2015
    Posty: 205
    Lokalizacja: UK
    Pomógł: 10

    Dziękuję za szybką odpowiedź. :)

    mirekk36 napisał(a):
    Makowka napisał(a):
    if tab[0] = 'ans_tf' then begin

    Zastanów się i spróbuj sam wyjaśnić sobie i nam - np co to oznacza wg ciebie ?


    Chciałem sprawdzić, czy pierwszy element tablicy (czyli pierwsza część stringu do znaku "+") jest równa "ans_tf". Chodziło o prosty sposób analizowania jaki rodzaj odpowiedzi przysłało urządzenie.

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


    Jak rozumiem tab[0] powinien się równać "ans_tf", natomiast tab[1] - "TRUE".
    Chociaż z tego co widzę to chyba nie jest najlepszy sposób.

    Pozdrawiam,
    Michał

    _________________
    MMT Technologies



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 cze 2017, o 13:06 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27378
    Lokalizacja: Szczecin
    Pomógł: 1043

    Makowka napisał(a):
    Chciałem sprawdzić, czy pierwszy element tablicy (czyli pierwsza część stringu do znaku "+") jest równa "ans_tf".

    Powiedz mi jak pierwszy (JEDEN ELEMENT) tablicy może być równy jakiemuś całemu stringowi hmmm?

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



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

    Dołączył(a): 09 lut 2017
    Posty: 75
    Lokalizacja: 51°03′22″N 15°45′48″E
    Pomógł: 18

    Przecież to jest tablica stringów - tab: TArray<String>; Ja tu błędu nie widzę. Ta procedura działa poprawnie jeśli się jej podstawia pod Str stringi takie jakie są wysyłane z ATmegi. W linii 8 buf.Split dzieli wg "+" i w tab[0] jest np. "ans_tf", nie może być inaczej. Pytanie co Ci się wyświetla w Memo2, bo widzę, że masz podgląd zawartości buf? Jeśli już tu jest błąd to znaczy, że DataPacket złego stringa podstawia.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 cze 2017, o 17:14 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27378
    Lokalizacja: Szczecin
    Pomógł: 1043

    Adam12 napisał(a):
    Przecież to jest tablica stringów - tab: TArray<String>;

    Ach to przepraszam - mi się coś pomieszało .... sorki

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 cze 2017, o 20:59 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 sie 2015
    Posty: 205
    Lokalizacja: UK
    Pomógł: 10

    Dziękuję Panowie za cenne wskazówki. :)
    Udało mi się dojść do bardzo dziwnej rzeczy.

    Oczyściłem główną pętlę while(1) w ATmedze (jest tam teraz tylko event rs232) i teraz sytuacja wygląda tak:
    1. Po zmianie podświetlenia LCD (on/off) działa poprawnie (w polu memo aplikacji ładnie widać odpowiedzi AT)
    2. TRUE/FALSE już również działa prawidłowo (dowolną ilość razy - w memo również mamy podgląd)
    3. Wysyłanie tekstu do LCD działa, ale po wysłaniu czegokolwiek na wyświetlacz blokuje mi się na amen odbiór danych (tzn. wysyłanie z apki chodzi bez zarzutu, ale nie mogę już nic odebrać - memo milczy chociaż dane są odbierane...)

    Wrzucam poniżej kod z ATmegi z funkcjami do obsługi wszystkich komend:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Wstawiam filmik z działania aplikacji. W momencie wysyłania do LCD i zmiany tekstu na ATB wszystko działa (oczywiście poza T/F). Tak jak pisałem nie przychodzą powiadomienia.
    Jest dobrze dopiero po "resecie" comportu.

    https://youtu.be/TlCtnwmxrjc

    Pozdrawiam,
    Michał

    _________________
    MMT Technologies



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 cze 2017, o 12:44 
    Offline
    Użytkownik

    Dołączył(a): 09 lut 2017
    Posty: 75
    Lokalizacja: 51°03′22″N 15°45′48″E
    Pomógł: 18

    Ale skąd wiesz, że po wysłaniu czegoś na LCD, dane są prawidłowo odbierane? Musiałbyś może podpiąć się bezpośrednio pod ComPort i podglądać to co do niego dochodzi z pominięciem DataPacket. Spróbuj podzielić aplikację na mniejsze części, wykastruj do testów z obsługi grafiki itp., zostaw tylko samą komunikację i wtedy szukaj przyczyny. Posprawdzaj dokładnie ustawienia ComPort'a, może następuje np. przepełnienie bufora. Przede wszystkim musisz się upewnić czy ATmega po odbiorze danych do LCD odpowiada prawidłowo, a jeśli tak to czy to może w aplikacji coś się blokuje po wysłaniu tych danych.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 cze 2017, o 14:15 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 sie 2015
    Posty: 205
    Lokalizacja: UK
    Pomógł: 10

    Testowałem wszystkie funkcjonalności manualnie z terminala. Za każdym razem polecenie jest wykonywane prawidłowo i dostaję odpowiedź od ATmegi w puttym. Problem musi leżeć w aplikacji.

    Sprawdzę jeszcze wieczorem ustawienia datapacket i comportu. Bo najprawdopodobniej tam musi leżeć problem.

    _________________
    MMT Technologies



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 lip 2017, o 22:08 
    Offline
    Użytkownik

    Dołączył(a): 25 mar 2014
    Posty: 84
    Pomógł: 0

    Podepnę si e pod temat, bo zdaje się, że kolega Makowka ma ten sam problem co ja.
    Zacznę od kodu:

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


    Problem jest taki: podczas pierwszego wywołania procedury ComDataPacket1Packet zmienna ( globalna ) FlagaCom1 przyjmuje wartość True, a po drugim wywołaniu ( pomimo, iż nadaję str = 'OK' ) zmienna FlagaCom1 przyjmuje już zawsze wartość False. Dlaczego ?

    Sprawdzam w Memo1 i str powinna mieć wartość 'OK' czyli FlagaCom1 powinna być równa True.

    Procedurę tą chcę wykorzystać w taki sposób, że co 3 sekundy wywołuje zdarzenie Timer1 z zapytaniem "AT", w odpowiedzi dostaje "OK" lub jeśli urządzenie nie odpowiada to nic i dlatego chce aby FlagaCom1 odpowiednio się ustawiała.

    --------
    Problem rozwiązałem - błąd w kodzie i to banalny, bo nie zerowałem flagi.
    ...



    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: 10 ] 

    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:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO