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 9 lip 2025, o 12:54


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
    Autor Wiadomość
    PostNapisane: 22 sty 2021, o 17:26 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    Witam, chciałem prosić aby ktoś kto zna się trochę na języku C zweryfikował czy przedstawiona poniżej funkcja poprawnie liczy średnią wartość ADC. Dziękuję za pomoc.

    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 sty 2021, o 19:44 
    Offline
    Użytkownik

    Dołączył(a): 29 gru 2013
    Posty: 82
    Pomógł: 3

    linia 18, czym jest adc_value? bo z tego co widzę przypisujesz temu wartość średnią, ale mniejsza.

    Kod:
    sr[idx]=measurement(PA5);


    Na pewno nie chciałeś wypełnić całej tablicy tylko pierwszy jej element? :^)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 sty 2021, o 21:03 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    wonsz napisał(a):
    linia 18, czym jest adc_value? bo z tego co widzę przypisujesz temu wartość średnią, ale mniejsza.

    To zmienna globalna, której przypisuję wartość ADC, żeby móc używać jej potem w głównej pętli programu.

    wonsz napisał(a):
    Kod:
    sr[idx]=measurement(PA5);


    Na pewno nie chciałeś wypełnić całej tablicy tylko pierwszy jej element? :^)


    Ale nie rozumiem, przecie wypełniam całą tablicę, bo zmienna "idx" jest inkrementowana z każdym wywołaniem funkcji.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 sty 2021, o 19:12 
    Offline
    Użytkownik

    Dołączył(a): 06 lut 2018
    Posty: 58
    Pomógł: 0

    Moim zdaniem kod jest poprawny i zgodny z oczekiwaniami. Testowałeś?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 sty 2021, o 21:07 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    mtbchn napisał(a):
    Testowałeś?


    Tak, po testach okazuje się, że wszystko działa poprawnie. Pytałem tylko, w razie czego bo mogło się zdarzyć, że coś przegapiłem i coś może nie działać. Bardzo dziękuję za pomoc.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 sty 2021, o 23:20 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 15 wrz 2013
    Posty: 74
    Lokalizacja: Sierakowice/Gdańsk
    Pomógł: 9

    Jedną rzecz proponowałbym Ci jeszcze uwzględnić, żeby otrzymać bardziej poprawny wynik. Aktualnie twoja funkcja troszkę zaniża średnią, konkretnie o wartość 0,5. Dla przykładu co oczekiwałbyś od twojej funkcji jeżeli miałaby obliczyć średnią z następujących 8 próbek: {1, 1, 1, 1, 1, 1, 1, 0}? Twoja funkcja da wynik 0. A według mnie wypadałoby żeby uśredniła to jako 1. Jeżeli tak ma być to ok, a jeżeli nie to czytaj dalej. ;)
    Przy dzieleniu zmiennych całkowitych w języku C wynik zaokrąglany jest zawsze w dół, np. 7/8 otrzymasz w wyniku 0. Jak chcesz troszkę pogłówkować to zakończę już na tym moją podpowiedź. :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 sty 2021, o 00:10 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    Witam, bardzo dziękuję za cenną uwagę wiedziałem, że mogę coś przegapić :P. A więc do mojej funkcji dodałem 2 linie kodu. Myślę, że mój zamysł na rozwiązanie tego problemu jest poprawny, ale nie mam pewności czy dobrze wykrywam jaka liczba występuje po przecinku. Czy reszta z dzielenia danej liczby jest tożsama z liczbą, którą dostaję po przecinku?
    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 sty 2021, o 09:16 
    Offline
    Użytkownik

    Dołączył(a): 09 sty 2021
    Posty: 66
    Pomógł: 0

    Tutaj dodaję kod, który jeszcze zmodyfikowałem czy on będzie poprawnie realizował swoje zadanie?

    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 sty 2021, o 19:58 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 15 wrz 2013
    Posty: 74
    Lokalizacja: Sierakowice/Gdańsk
    Pomógł: 9

    antosV10 napisał(a):
    Czy reszta z dzielenia danej liczby jest tożsama z liczbą, którą dostaję po przecinku?
    Nie. Reszta z dzielenia liczb całkowitych (% - operacja modulo) w twoim przypadku daje w wyniku wartość z zakresu od 0 do SR-1.

    antosV10 napisał(a):
    Tutaj dodaję kod, który jeszcze zmodyfikowałem czy on będzie poprawnie realizował swoje zadanie?
    Zgubiłeś coś za ifem, jak już to zamiast "sr/SR+1;" powinno być "sr1 = sr1/SR+1;". Wydaje mi się że te obliczenia realizują zadanie. Ale można to zrobić o wiele prościej:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Czyli do sumy 8 próbek dodajesz jeszcze połowę tego przez co będziesz dzielił. :)



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