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


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
    Autor Wiadomość
    PostNapisane: 25 wrz 2014, o 13:56 
    Offline
    Nowy

    Dołączył(a): 02 lip 2013
    Posty: 19
    Pomógł: 0

    Witam!

    Buduje samochód zdalnie sterowany na pracę inżynierską i już jeździ, sterowanie przez IR oraz Bluetooth. Program napisany w C# do sterowania też mi działa natomiast chciałem jeszcze mierzyć napięcie zasilania i wyświetlać je na bieżąco w programie.
    Pomiar napięcia już mam zaprogramowany w uC i działa pozostaje pytanie jak przesyłać te wartości do C# żeby to mogło sobie przemielić i wyświetlić w labelku albo w textBoxie.

    Program w uC wygląda tak:
    main.c
    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.


    Ustawienia ADC i PWM nie są dla nas teraz istotne.

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


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


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


    Tyle z uC a teraz program napisany w C#
    Widok programu:
    Obrazek

    Mam takie zdarzenie odbioru danych z portu szeregowego:
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Potrafię odebrać jeden znak i po naciśnięciu labelka wyświetlić go ale jak zrobić żeby program C# który otrzymuje co jakiś czas dwie wartości(cz_d i cz_u) wyświetlał je automatycznie aktualizując aktualne napięcie zasilania?
    Problem też z tym że nie mogę aktualizować tego bezpośrednio w tym zdarzeniu bo jest wtedy konflikt wątków.

    Staram się coś samemu nauczyć tego programowania a ta praca miała mnie przymusić żebym posiedział przy tym :D

    Proszę o pomoc w rozwiązaniu tego problemu, ewentualnie naprowadzenie mnie na właściwy tor myślenia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2014, o 14:34 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 maja 2014
    Posty: 1089
    Pomógł: 34

    Hey ,

    Wiec ja pewnie wyslalbym wartosc pomiaru bez "obrabiania" na serial port zamieniajac to na ascii z uzyciem funkcji itoa()

    Co do wysylania nie wiem czy korzystasz z bibliotek Mirka do obslugi UART ?

    W programie C# pozniej moglbys opracowac wynik i na biezaco mozesz wyswietlac.

    Jesli natomiast chodzi o otrzymywanie danych to popatrz tutaj http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived(v=vs.110).aspx - masz tam przyklad z odczytaniem danych , a metody masz opisane tu http://msdn.microsoft.com/en-us/library/system.io.ports.serialport_methods(v=vs.110).aspx

    To powinno dac Ci cos do wyprobowania :)

    PS -> Co do watkow (bo teraz doczytalem ze zrozumieniem) to nie wiem z jakiej wersji .Net korzystasz ale musialbys albo skorzystac z np async i zrobic to w tle ... albo np zainetersowac sie delegatami :)

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2014, o 15:30 
    Offline
    Nowy

    Dołączył(a): 02 lip 2013
    Posty: 19
    Pomógł: 0

    Korzystam z Mirkowych bibliotek. Jeśli miałbym wysyłać w kodzie ASCII to muszę zapewne użyć void uart_putint(dane do wysłania, 16)? Tylko mam dwie zmienne...bo część dziesiętną i ułamkową napięcia.
    Korzystam z tych stron co mi podałeś(tyle że w wersji językowej polskiej bo jestem cienias i ciężko jest mi zrozumieć po angielsku :roll: ) i już próbowałem różnych ReadByte, ReadChar, ReadTo i udaje mi się odebrać jedną wartość ale mam problem z odebraniem dwóch zmiennych od razu. Z tym to coś pokombinuje i coś wymyśle. Powiedz mi, bo z tym mam największy problem jak zrobić żeby te dane były cały czas aktualne a labelku?
    Jeszcze jedno pytanie: Czym się różni ReadByte od ReadChar? Przecież ReadByte odczytuje jeden bajt czyli 8 bitów a ReadChar odczytuje jeden znak a char też jest 8-mio bitowy...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2014, o 16:05 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 maja 2012
    Posty: 174
    Lokalizacja: Gliwice
    Pomógł: 19

    Ja bym zrobił podobnie jak radzi kolega RafPe. Ze zmiennych które chcesz wysłać zrobiłbym prostą ramkę np "123,456\r\n" a w C# .ReadTo('\n'). Zaraz napisze przykłady jak ja to widzę.


    edit: w sumie kolega niżej już wszystko napisał



    Ostatnio edytowano 25 wrz 2014, o 16:12 przez sz4t4n, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2014, o 16:08 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 maja 2014
    Posty: 1089
    Pomógł: 34

    Martinas1324 napisał(a):
    Czym się różni ReadByte od ReadChar


    No bo albo odbierasz dane binarne albo nie :) Mirek pisze o tym w BB w rozdziale o UART.

    Martinas1324 napisał(a):
    to muszę zapewne użyć void uart_putint(dane do wysłania, 16)?


    Dokladnie! i w ten oto sposob wysles swoje dane.

    Martinas1324 napisał(a):
    Tylko mam dwie zmienne...bo część dziesiętną i ułamkową napięcia

    No ale przeciez to nie problem ... wysylasz to Mirko sposobem gdzie kiedy masz np 7,5 to mnozysz przez 10 -> czyli masz powiedzmy 75 a w Twoim docelowym programie odbierasz sobie i odpowiednio dzielisz przez 10 i sprawdzasz reszte z dzielenia ? :)

    Martinas1324 napisał(a):
    jak zrobić żeby te dane były cały czas aktualne a labelku

    No kurcze tutaj musisz pewnie troszeczke poczytac o.Net np pod tym linkiem jest ciekawy sposob http://stackoverflow.com/questions/661561/how-to-update-the-gui-from-another-thread-in-c

    No i sprawdzony u mnie na szybko na zestawie ATB + VS 2013 + win 8 dziala superniascie :)
    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.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2014, o 16:46 
    Offline
    Nowy

    Dołączył(a): 02 lip 2013
    Posty: 19
    Pomógł: 0

    Możesz mi trochę objaśnić te linijki kodu:
    Składnia: [ Pobierz ] [ Ukryj ]
    język csharp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    C# to potrafię ale takie podstawowe rzeczy i trochę się w nim gubię :(

    ------------------------ [ Dodano po: 24 minutach ]

    Ja wysyłam z uC tak:
    uart_putint(23,16);
    To wysyłam w kodzie ASCII 0x32(2) i 0x33(3)
    Ale znowu w C# odbieram data = port.ReadByte(); data musi być typu int(32bity) bo inaczej się typy nie zgadzają. Odczytując z Debugera to w data mam 49 i 55. Dlaczego tak jest? O czym ja zapomniałem?

    Wysyłanie temperatury to można prosto zrobić bo tak jak kolega RafPe słusznie zauważył wyśle z uC zmienną wynik(czyli przed podziałem na część dziesiętną i ułamkową) za pomocą uart_putint(wynik,16); Tylko dlaczego nie mogę otrzymać ten wartości w C#? :x



    Ostatnio edytowano 25 wrz 2014, o 17:21 przez Martinas1324, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2014, o 17:14 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 maja 2014
    Posty: 1089
    Pomógł: 34

    Widzisz :) ze mnie taki nauczyciel jak "projektant elektronicznych komponentow" :)

    Ogolnie jest to jeden ze sposobow w jakie mowisz w C# co ma sie stac gdy zostanie wywolany event i przekazujesz wtedy dalej obiekt oraz argumenty

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


    Mozna tez tak

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


    W obu przypadkach masz obiekt i argumenty do eventa ktory nastapil. Chcialbym Ci to bardziej dokladnie opisac ale pewnie zrobilbym magiczne spagetti z tego postu zamiast w jasny sposob cos podpowiedziec.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2014, o 17:31 
    Offline
    Nowy

    Dołączył(a): 02 lip 2013
    Posty: 19
    Pomógł: 0

    RafPe-> Dzięki wielkie, mniej więcej rozumie o co chodzi. Do dogłębnego zrozumienia to jeszcze daleko ale nie wszystko na raz. Już zastosowałem u siebie i ładnie cyka :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2014, o 17:55 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 maja 2014
    Posty: 1089
    Pomógł: 34

    To super ze Ci sie udalo to zrobic!

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2014, o 18:23 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    A ja ze swojej strony powiem fajnie , tylko tym razem przeniosę , następnym razem radzę czytać
    takie coś jak zasady działu w którym się pisze post.

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    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 1 gość


    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