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



Teraz jest 29 mar 2024, o 15:23


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 ]
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: 27212
Lokalizacja: Szczecin
Pomógł: 1041

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: 27212
Lokalizacja: Szczecin
Pomógł: 1041

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: 73
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: 27212
Lokalizacja: Szczecin
Pomógł: 1041

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