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 23 maja 2025, o 02:10


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
    Autor Wiadomość
    PostNapisane: 3 gru 2014, o 19:33 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 76
    Pomógł: 0

    witam,
    do mojego projektu na arduino użyłem dwóch transmiterów rf, tych tanich z ebaya,
    i wszystko działa, dane są wysyłane i odbierane, tylko że można prze niego
    wysyłać tylko dane String lub Char,

    czy ktoś wie jak zamienić zmienną String spowrotem na float?
    lub float na char - potem to wysłać przez transmiter i w odbiorniku
    zamienić char na float?
    przesyłam informacje o napięciu z wejść analogowych z jednego arduino
    do drugiego, mój układ z transmiterem będzie miał zasilanie bateryjne,
    bez połączenia kablem,

    będę wdzięczny za pomoc



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 gru 2014, o 19:41 
    Offline
    Użytkownik

    Dołączył(a): 19 cze 2014
    Posty: 247
    Pomógł: 15

    Nie używałem tej funkcji, ale służy do tego funkcja atof(). Tu masz jak ją obsługiwać: http://msdn.microsoft.com/pl-pl/library/hc25t012.aspx

    _________________
    http://elektropanel.pl



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 gru 2014, o 22:04 
    Offline
    Użytkownik

    Dołączył(a): 11 maja 2014
    Posty: 59
    Pomógł: 3

    Napięcie mierzysz za pomocą ADC ?

    Jeśli tak to wyślij wartość adc przez rf i zamień na napięcie dopiero w odbiorniku.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 gru 2014, o 14:20 
    Offline
    Użytkownik

    Dołączył(a): 18 paź 2012
    Posty: 244
    Pomógł: 2

    Z tego co pamiętam to strtof, wyczaj działanie na http://www.cplusplus.com/reference/cstdlib/strtof/



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 gru 2014, o 12:34 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 76
    Pomógł: 0

    michal98 napisał(a):
    Napięcie mierzysz za pomocą ADC ?
    tak, tak je mierzę

    Jeśli tak to wyślij wartość adc przez rf i zamień na napięcie dopiero w odbiorniku.

    nie da rady, ten string nie chce się zamienić na float w odbiorniku,
    poza tym po przesłaniu danych ADC na odbiorniku widnieją one nie w pełnym zakresie,
    zaczynają się od około 100 do 999, wyżej nic nie widać a poniżej 100 wyświetlają się cyfry
    i litery

    ------------------------ [ Dodano po: kilkunastu sekundach ]

    leonos2000 napisał(a):
    Nie używałem tej funkcji, ale służy do tego funkcja atof(). Tu masz jak ją obsługiwać: http://msdn.microsoft.com/pl-pl/library/hc25t012.aspx

    próbowałem atof(), nie działa mi w arduino IDE

    ------------------------ [ Dodano po: 1 minucie ]

    kiclaw napisał(a):
    Z tego co pamiętam to strtof, wyczaj działanie na http://www.cplusplus.com/reference/cstdlib/strtof/

    strtof() też nie działa, też próbowałem

    pomyślałem więc, żeby przesłać te dane z ADC w innej postaci, a więc podzielić kazdy wynik na 2,
    wynik, który mnie interesuje jest napięciem z ADC więc analogRead()*(5.0/1023.0) i mam napięcie,
    teraz wystarczy podzielić daną liczbę na 2 części, tą przed przecinkiem/kropką i dwucyfrową po,
    mój pomiar nigdy nie będzie miał wyniku dwucyfrowego przed kropką, zresztę nie pozwala na to arduino
    bo mierzy do 5.0, ale też nie mam takiej potrzeby, napięcie będę mierzył do 1.6-2.0V,
    użyłem takiego rozwiązania żeby wyciągnąć dwie liczby z pomiaru napięcia

    //************************to jest kod od strony transmitera
    void loop(){
    int sensorValue = analogRead(A0);
    float voltage = sensorValue * (5.0 / 1023.0);

    //*****************************tutaj jest wyciąganie 2 liczb z wyniku napięcia float
    if(voltage <= 0.99){firstnumber = 0;}
    else if(voltage >= 1.00){firstnumber = 1;}
    delay(50);
    if(firstnumber == 0){secondnumber = voltage*100;}
    else if(firstnumber == 1){secondnumber = (voltage-1.00)*100;}

    //*********************************a tutaj podstawianie ich do stringa
    int napięcie;

    int a = firstnumber;
    String napięcieA = napięcie + a;
    Serial.println (napięcie1);

    int b = secondnumber;
    String napięcieB = napięcie + b;
    Serial.println(napięcieB);

    String calosc = napięcieA + napięcieB;
    //Serial.println(calosc);


    calosc.toCharArray(Msg,(calosc.length()+1));
    for (int i = 0; i <= calosc.length(); i++) {
    Serial.print(Msg[i]);


    vw_send((uint8_t *)Msg, strlen(Msg));
    vw_wait_tx();
    }
    //********************************

    kiedy wysyłam te 2 liczby (będące odzwierciedleniem mojego wyniku napięcia) są one odczytywane przez odbiornik
    i drugie arduino, i odpowiadają pomiarowi napięcie, a więc jak napięcie jest 0.98 to wynik tych dwóch liczb mam
    0 i 98 a jak wynik napięcie jest 1.23 to liczby są 1 i 23 czyli działa,
    jednakże powstają dwa problemy,
    jeden taki, że liczby widać, jednak są one otoczone przez jakieś dodatkowe 'ogonki', inne znaki bliżej lub dalej od wyniku, który mnie
    interesuje, próbowałem to wyczyścić, ale jak to robię od strony odbiornika to nawet jak proszę o wyświetlenie
    w Serial.print jednej zmiennej to i tak podaje cały ciąg, a jak czyszczę kod od nadajnika, to dostaję
    jakieś dziwne nie odpowiadające pomiarowi cyfry na odbiorniku,
    a ja chcę wyświetlić tylko te dwie liczby w Serial.print (jednocyfrową z przodu, potem kropkę i liczbę dwucyfrową po kropce)

    any idea?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 gru 2014, o 15:02 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 maja 2013
    Posty: 568
    Zbananowany użytkownik

    Pomógł: 31

    Jakiego kodowania używasz do transmisji?

    Proponuję abyś przesyłał wartość sensorValue i po strone odbiornika dokonywał konwersji.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    _________________
    Und schreien

    Spring
    Erlöse mich
    Spring
    ...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 gru 2014, o 11:01 
    Offline
    Użytkownik

    Dołączył(a): 12 lis 2014
    Posty: 76
    Pomógł: 0

    Próbowałem po stronie odbiornika dokonywać konwersji ale nie działało, nie bardzo wiem o jakie kodowanie pytasz?

    Skorzystałem z porad z filmiku rosyjskiego programisty z YT a właściwie prawie gotowej recepty i dziala



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 gru 2014, o 18:20 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 12 maja 2013
    Posty: 568
    Zbananowany użytkownik

    Pomógł: 31

    bigplik napisał(a):
    ... jednakże powstają dwa problemy,
    jeden taki, że liczby widać, jednak są one otoczone przez jakieś dodatkowe 'ogonki', inne znaki bliżej lub dalej od wyniku, który mnie
    interesuje, próbowałem to wyczyścić, ale jak to robię od strony odbiornika to nawet jak proszę o wyświetlenie
    w Serial.print jednej zmiennej to i tak podaje cały ciąg, a jak czyszczę kod od nadajnika, to dostaję
    jakieś dziwne nie odpowiadające pomiarowi cyfry na odbiorniku,
    a ja chcę wyświetlić tylko te dwie liczby w Serial.print (jednocyfrową z przodu, potem kropkę i liczbę dwucyfrową po kropce)

    any idea?


    Wydaje mi się ża masz problem z kodowaniem danych do transmisji, najpierw musisz wysłać jakiś ciąg znaków aby dostosował się odbiornik do nadajnika, (chodzi o ARW w odbiorniku). Następnie nadajesz identyfikator, interesujące cię dane i dodajesz jakąś sumę kontrolną.
    Po stronie odbiornika po odczytaniu identyfikatora i zweryfikowaniu jego poprawności, odczytujesz właściwe dane i sprawdzasz czy są poprawne.

    Zamiast przesyłać liczbę ułamkową, np 22,51 pomnóż ją przez 100 i prześlij 2251, po stronie odbiornika podziel ją przez 100.

    _________________
    Und schreien

    Spring
    Erlöse mich
    Spring
    ...



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

    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