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 22 maja 2025, o 19:58


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
    Autor Wiadomość
    PostNapisane: 19 cze 2016, o 08:56 
    Offline
    Nowy

    Dołączył(a): 17 mar 2016
    Posty: 24
    Pomógł: 0

    Cześć!

    Potrzebuję zrobić coś podobnego do terminala (np. putty), niestety napotkałem po drodze na kilka problemów:

    Aplikację tworzę w Visual Studio C# 2015, oto kod:

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


    Problem polega na tym, że w mojej aplikacji odebrane dane są, że tak powiem, trochę rozwalone:

    Obrazek

    Wstawiam kod do mojego programu z ATmegi8:

    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.


    No i jeszcze jedna rzecz mnie dziwi, a mianowicie, procek wysyła dane jedynie wtedy, kiedy programator jest podłączony do komputera (oczywiście jest zasilany zewnętrznie).
    Liczę na waszą pomoc! :)
    Dzięki wielkie!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 cze 2016, o 10:11 
    Offline
    Użytkownik

    Dołączył(a): 08 lut 2015
    Posty: 132
    Pomógł: 4

    Są rozwalone ponieważ używasz metody ReadExisting, która wczytuje do zmiennej aktualną ramkę danych, którą wyśle sterownik. Skoro w kodzie procesora używasz znaków nowej lini i return carriage \r \n, to nie widzę sensu kolejnego używania znaku nowej lini w metodzie wyświetlającej tekst w polu tekstowym, a dokładniej:
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

    zobacz czy to pomoże.
    Dodatkowo tu masz przykładowe programy typu "Serial data logger", które robią to samo co Ty chcesz zrobić. Proponuję poczytać trochę tego kodu, który jest zawarty w tych linkach:
    http://www.codeproject.com/Articles/75770/Basic-serial-port-listening-application
    http://www.vidnis.com/2013/02/serial-data-to-text-file-using-c.html


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 cze 2016, o 11:55 
    Offline
    Nowy

    Dołączył(a): 17 mar 2016
    Posty: 24
    Pomógł: 0

    Faktycznie, głupi błąd. Natomiast nie rozumiem jednej rzeczy: dlaczego tam mi się rozjechała tylko część tych "0 i 1", a nie wszystko, w końcu dane były wystawiane co chwilę, dlatego rozumiem, że po każdych 8 bitach wysłanych danych:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

    lecz się tak nie stało.

    Chodzi o to, że bym musiał wywalić z programu z Atmegi te wszystkie "uartputc" i wystawiać jedynie dane "High" i "Low", a jeśli faktycznie próbuję kombinować z tym Rich.AppendText('\n'), to nie dodaje mi nowych linii, tak jak bym sobie tego życzył. :(
    Dodatkowo jeśli usunę '\n' wg. Twoich zaleceń to faktycznie działa prawie tak jak miało - z małym wyjątkiem - dalej pojawiają się jakieś dodatkowe, puste linie, nie wiem dlaczego:
    Obrazek

    Aczkolwiek tak jak napisałem, potrzebuję dodawać nowe linie w Visualu - te z Atmegi wyrzuciłem



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 cze 2016, o 13:04 
    Offline
    Użytkownik

    Dołączył(a): 08 lut 2015
    Posty: 132
    Pomógł: 4

    Dane przez UART nie są wysyłane w całości, tylko fragmentami, tzn. Twoja ramka danych nie jest wysyłana od A do Z ciurkiem tylko jest podzielona na części w zależności od ilości wysyłanych pakietów. Nie mam za bardzo czasu żeby to skompilować i zobaczyć czy działa, ale proponuję Ci w takim razie utworzenie Twojej ramki danych wysyłanej w takiej postaci:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Następnie w zdarzeniu odbioru zamieniasz Metodę ReadExcisting odczytującą tylko to co zostało aktualnie wysłane przez procesor na metodę ReadLine, która będzie czytała dane czekając na pojawienie się znaku nowej linii \n i dopiero przypiszę bufor to Twojego stringa DataIn:
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Wtedy możesz wyświetlać swoje dane tak jak napisałeś z wykorzystaniem znaku nowej linii:
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Możesz także spróbować zakończyć swoją ramkę danych, którą wysyłasz z procesora na znakiem nowej linii lub jakąś inną literą
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    I odbierać dane w zdarzeniu metodą ReadTo:
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Wtedy możesz wyświetlać swoje dane tak jak napisałeś z wykorzystaniem znaku nowej linii:
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Jeśli to nie zadziała to być może ktoś inny Ci pomoże, bo tak jak mówię nie mam obecnie czasu załączyć kompilatora :)



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

    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