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 8 kwi 2025, o 21:26


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 25 lis 2016, o 20:19 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 19 lis 2016
    Posty: 21
    Pomógł: 0

    Witam wszystkich
    Jestem nowy i prosił bym o wyrozumiałość ponieważ dopiero zaczynam z arduino jak i z C++ .
    Używam eclipse neon arduino ( 2 dni walki z instalkami) dla czego ? orginalne ide Arduino potrafiło wywalić błąd gdy za komentowałem linie delay(100); w ogóle zaczęło żyć własnym życiem i było nie do zniesienia
    Za radą Pana Mirka postanowiłem przesiąść się na eclipsa ale do rzeczy...

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


    Opis programu :
    program po inicjacji pobiera liczbę z zmiennej float "liczba" następnie wyświetla ja na wyświetlaczu i poddaje rozkładowi (void liczbaToCyfry) na int cyfra1-5
    żeby na końcu wysłać te dane serialem

    problem :
    problem jest w poprawności rozkładu liczby.Wszystko pięknie działa od 0 do liczby 40000 gdy licznik "liczba" przekręca się na 40000 w zmiennych int cyfra2,3,4 pojawiaja sie liczby dwu , 3 cyfrowe
    i nie potrafię już drugi dzień dojść do źródła problemu
    Był bym bardzo wdzęczny za oświecenie mej ułomności :)

    Dopisze jeszcze wynik działania
    40000.00
    0
    3
    9
    9
    9
    9
    0
    0
    40001.00
    0
    4
    65
    660
    6560
    8
    0
    0
    Pozdrawiam



    Ostatnio edytowano 26 lis 2016, o 13:44 przez tommot, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 lis 2016, o 22:20 
    Offline
    Nowy

    Dołączył(a): 23 gru 2014
    Posty: 13
    Pomógł: 0

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


    Popatrz 40000/100000 daje 0.4
    Wydaje mi się że masz za dużo o jedno 0, analogicznie dalej w kodzie przewija się ten sam błą


    Jeśli chodzi o dzieleni, spróbuj z modulo i dzieleniem przez 10 (myślę że tak jest prościej, a i o pętelkę można się pokusić), np tak :

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


    Pamiętaj, jednak że liczba musi być typem int.
    Jakbyś nie wiedział za co odpowiedzialne jest modulo zapraszam do jednego z ostatnich poradników p. Mirka



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 lis 2016, o 23:05 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 19 lis 2016
    Posty: 21
    Pomógł: 0

    evill napisał(a):
    Popatrz 40000/100000 daje 0.4
    Wydaje mi się że masz za dużo o jedno 0, analogicznie dalej w kodzie przewija się ten sam błą


    Wydaje mi się że tak być powinno 0.4 ma wychodzić bo jest to 6 miejsce które 040000 ma być jeszcze zerem w zmiennej int cyfra0 zostanie umieszczone 0 a nie 0.4 czyli poprawnie
    Gdy liczba będzie 100000 w tedy zmienna cyfra0 wypełni 1
    Problem myślę jest bardziej złożony bo jak pisałem wcześniej każda liczba od 0 do 39999 wyświetla się poprawnie

    Przepraszam ale nie umiem zastosować twojego przykładu



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 lis 2016, o 23:21 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 28 wrz 2014
    Posty: 1530
    Lokalizacja: Warszawa
    Pomógł: 55

    Nie używamy float w mikrokontrolerach. Dlatego nie ma jak pomóc :(
    Wyskakujesz działaniem poza zakresy liczb int chyba na moje oko...

    _________________
    --... ...-- - --- -- . -.-



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 lis 2016, o 01:48 
    Offline
    Użytkownik

    Dołączył(a): 28 wrz 2016
    Posty: 215
    Pomógł: 14

    Problem jest w działaniu (cyfra1 * 10000). Ponieważ cyfra1 jest typu int, to całe wyrażenie też jest typu int. Gdy cyfra1=3, nie ma problemu, bo wartość wyrażenia (cyfra1 * 10000) wynosi 30000 i miesci sie w zakresie int, tzn od -32,768 to 32,767. Ale gdy cyfra1=4, to wyrażenie (cyfra1 * 10000) ma wartość 40000 i jest poza zakresem.
    A dokładnie, to wyrażenie jest obliczane i ma wartość 40000, ale jest konwertowane do typu int i ma wartość ujemną (-25536).
    Zmiana typu z int cyfra1 = 0; na unsigned int cyfra1 = 0; rozwiązuje problem (przynajmniej dla 40000).
    Poza tym ten algorytm jest mało efektywny, bo wielokrotnie powtarza te same operacje. Propozycja kolegi evill jest dużo lepsza. Mogłoby wyglądać to tak
    Składnia: [ Pobierz ] [ Ukryj ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    sq5rix napisał(a):
    Nie używamy float w mikrokontrolerach. Wyskakujesz działaniem poza zakresy liczb int chyba na moje oko...

    Słuszna uwaga i dobre oko.


    Autor postu otrzymał pochwałę

    _________________
    de gustibus non est disputandum



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 lis 2016, o 07:02 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 19 lis 2016
    Posty: 21
    Pomógł: 0

    Rewelacyjne opisanie problemu ... właśnie tego mi brakowało
    Dziękuje Panowie za wyczerpujące rozwiązanie problemu
    Pozdrawiam :)



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

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

    Niech kolega rewelacyjnie poprawi listing w 1 poście ...

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

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