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? 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 15 cze 2025, o 02:38


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
    Autor Wiadomość
    PostNapisane: 16 mar 2014, o 09:48 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 lut 2014
    Posty: 101
    Pomógł: 4

    Witam napisałem krótki programik ,który właściwie tylko wyświetla wynik pomiaru do 3 miejsc po przecinku.
    Mam jednak problem z zaokrąglaniem końcówki i obcinaniem nieznaczących zer.

    Na razie jeszcze nic nie mierzy ,ćwiczę sobie nim wpisując różne wartości zmiennej "wynik".

    Przy wartości
    wynik=2510000;

    mam na lcd 25,100 V

    ,a chciałbym mieć 25,1 V

    jak zrobić by pozostać przy precyzji do 3 miejsc po przecinku ,ale automatycznie ucinać
    nieznaczące zera z zaokrągleniem w górę?

    kod programu ćwiczebnego:
    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.




    w bascomie miałem to tak rozwiązane (akurat wersja dla 2 miejsc po przecinku):

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    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: 16 mar 2014, o 11:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 10 mar 2013
    Posty: 739
    Lokalizacja: Poznań
    Pomógł: 84

    Witam
    może spróbujesz użyć czegoś takiego

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


    Mam na myśli że po wydzieleniu części po przecinku
    jeśli liczba dzieli się przez 100 bez reszty
    to podzielić ją przez 100 aby obciąć zera na końcu



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 mar 2014, o 12:22 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 lut 2014
    Posty: 101
    Pomógł: 4

    Próbuję zacząć od podstaw. Opanować samo dzielenie, problem w tym że C wycina mi resztę.

    Odpada zmienna float ,bo nie pasuje AVR GCC ,wyskakuje jakiś konflikt.

    Jak to rozgryść, bardzo brakuje mi w tej chwili Bascomowej zmiennej przeciekowej SINGLE

    Już niebawem będzie mi to bardzo potrzebne ,gdyż robię miernik indukcyjności ,a tam dojdzie jeszcze pierwiastek ,to dopiero będzie kosmos.


    Poniżej prosty program dzielenia ,oczywiście nie działa poprawnie ,dlatego ,że urywa mi resztę z wyniku ,jak to obejść?

    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.




    Próbowałem też coś z biblioteką math ,ale też nic z tego ,ale za to ile pamięci flash zjadło :) , ma ktoś jakiś pomysł?

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 mar 2014, o 12:58 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lut 2013
    Posty: 84
    Pomógł: 8

    Zamiast cz_po_przecinku = (wynik/100) % 100; daj cz_po_przecinku = wynik % 100; ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 mar 2014, o 13:31 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 lut 2014
    Posty: 101
    Pomógł: 4

    Nie pomogło na lcd ,pojawił się wynik= 51,0

    Nadal nie wyświetla poprawnie.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 mar 2014, o 13:40 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 10 mar 2013
    Posty: 739
    Lokalizacja: Poznań
    Pomógł: 84

    Żeby korzystać z biblioteki math i zmiennych float ,bez tak dużego przyrostu kodu
    dołącz linkerem tą bibliotekę.
    Jak to zrobić przedstawia kolega @Krauser w poscie
    http://forum.atnel.pl/post71464.html?hilit=linker#p71464



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 mar 2014, o 13:56 
    Offline
    Użytkownik

    Dołączył(a): 24 sty 2012
    Posty: 1469
    Pomógł: 56

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


    Po takim dzieleniu w zmiennej wynik nie masz 51,25 tylko 51
    Jeżeli już to spróbuj tak
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    teraz powinno działać tak jak założyłeś


    Autor postu otrzymał pochwałę

    _________________
    Jestem początkujący i moje porady mogą być błędne



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 mar 2014, o 14:37 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 lut 2014
    Posty: 101
    Pomógł: 4

    Nie działa. :(

    Zaczynam juz kombinować w stronę funkcji dtostrf() z biblioteki #include <stdlib.h>

    Chcę zamienić zmienną typu float na string i wyświetlić na LCD

    Tylko jak?

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 mar 2014, o 17:47 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 lut 2014
    Posty: 101
    Pomógł: 4

    Ok już działa ,moja wina lekko się zapętliłem ,leci też pochwała dla Mirko T miałeś rację ,
    ja po prostu używam tego w pętli i ciągle mi mnożyło *100 ,że w pewnym momencie się wszystko psuło.

    Wystarczyło na końcu pętli przywrócić zmiennej a starą wartość.

    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.



    Swoją drogą trafiłem też na ciekawy przykład ,ale niestety nie rozumiem zapisu tej funkcji i jak ją tu zastosować :(

    char Temp[8];
    sprintf(Temp, "%i", Zmienna_int);

    tylko że chciałbym zamienić typ float na string i wyświetlić 6 pierwszy znaków na lcd.

    _________________
    sig off ;(



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 34 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