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 25 maja 2025, o 22:12


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
    Autor Wiadomość
    PostNapisane: 14 sty 2018, o 19:41 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    Cześć. Napisałem prostą funkcję ze zmienną globalną, którą przekazuję jako argument do funkcji. Argument ma wartość początkową =2.
    Po obliczeniach funkcji powinna przyjąć wartość =4 i powinna być zwrócona na PORTC. Jednak tak się nie dzieje. Pojawiły się krzaczki w linijce 10 pętli głównej. Możecie mi podpowiedzieć dlaczego tak się dzieje? Wiem,że to są podstawy, ale męczę się z tym od rana z przerwami na obiad ;)
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 19:44 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 gru 2014
    Posty: 1540
    Pomógł: 269

    Funkcja ta wymaga argumentu typu uint8_t, a Ty wywołujesz ją bez:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Zrób na przykład tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    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: 14 sty 2018, o 19:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 19 lis 2015
    Posty: 219
    Pomógł: 20

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

    do funkcji nie przekazujesz żadnego argumentu



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 19:50 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    ok, ale chciałbym uzyskać efekt taki,że nie będę ręcznie wpisywać tej dwójeczki do linijki nr 10. tylko,żeby się to samo wpisywało w zależności jaką wartość przypiszę zmiennej a. Jak to zrobić? Byłem przekonany,że ta dwójka automatycznie po obliczeniach w funkcji wstawi się w miejsce nazwy funkcji w linijce 10

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 19:51 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 gru 2014
    Posty: 1540
    Pomógł: 269

    Możesz napisać tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    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: 14 sty 2018, o 19:54 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    wojciechgorzolka napisał(a):
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    Co to ta Matylda? :)
    jeżeli chcesz zwrócić pole kwadratu to trzeba wpisać w nawiasach funkcji, pole kwadratu ale jakiej wartości.
    może być przecież pole kwadratu z argumentem 2 albo 3 albo 10 albo max 16. bo wynik nie może przekroczyć uint8_t.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 19:57 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    Ja tu chyba źle rozumuję Drodzy koledzy. Poprawcie mnie jeśli źle to rozumiem. Mam funkcję jak w przykładzie o nazwie pole kwadratu(). I uwaga, takie jest moje myślenie:
    1. Do funkcji przekazuję argument - czyli przed obliczeniami procesor przekazuje zmienną 'a' do funkcji 'uint8_t pole_kwadratu(uint8_t a)' w miejsce gdzie w nawiasie jest napisane '(uint8_t)' i to jest właśnie ten argument. Mam zdeklarowaną zmienną a=2 i tą dwójkę tak wrzuca. Następnie oblicza i w miejsce nazwy funkcji ' pole kwadratu' wrzuca wynik. Następnie ja przypisuję ten wynik do PORC w postaci takiej jaka jest w linijce nr 10.

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 20:00 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 gru 2014
    Posty: 1540
    Pomógł: 269

    Jeżeli powołałeś funkcję z argumentem to w momencie jej wywołania musisz podać argument.
    Ta zmienna globalna uint8_t a = 2; nie ma nic wspólnego z argumentem w Twojej funkcji, bo musi on być przekazany jako parametr.
    Poczytaj w BB o funkcjach, przekazywaniu argumentów przez wartość, argumentach funkcji, formalnych i aktualnych, strona 116.
    Powinno Ci się rozjaśnić. ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 20:04 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    ok, już się zabieram. skupiłem się na stronie 110 :) i z informacjami z innej książki. pewnie wrócę za chwilę do pytań do Was :)

    Bo tak naprawdę ,że by zapalić diodę numer dwa na ATB nie musiałbym pisać żadnej funkcji, tylko mogę przypisać do PORTC cyfrę 2 i wyszło by na to samo, tylko że bez funkcji, a nie o to mi chodzi. Ale zerkam na stronę 116

    _________________
    Nikt nie mówił,że będzie łatwo...



    Ostatnio edytowano 14 sty 2018, o 20:06 przez wojciechgorzolka, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 20:05 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 gru 2014
    Posty: 1540
    Pomógł: 269

    Masz rację Daro69, ale tutaj chyba nie chodzi o pole kwadratu tylko o funkcję, która ustawi coś na porcie PORTC.

    wojciechgorzolka przanalizuj sobie taki przykład, z Twojego poprzedniego postu ;) :
    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: 14 sty 2018, o 20:17 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    zobrazuję na przykładzie sokowirówki o co mi chodzi. owoce to są jakieś zdeklarowane liczby, sokowirówka to jest moja funkcja. Mam też PORTC jako kubek. I teraz wrzucam dwa różne owoce , jabłko =2 i banan =2, w sokowirówce pięknie się to miksuje (dodaje), aż ślinka cieknie i zmiksowany soczek wlewam do kubka czyli na PORTC i zapala mi się dioda nr 3 :):):):) Czyli wynik automatycznie przypisze mi się w linijce nr 10 mojego przykładu.

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 20:39 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

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

    :)


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 20:40 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 gru 2014
    Posty: 1540
    Pomógł: 269

    Jest tak jak mówisz tylko, że dajesz gościowi (Twojej funkcji) jabłko i banana, on Ci je oddaje i tworzy sobie ich kopie, to je sobie miksuje i powstaje soczek. :D
    To się nazywa przekazywanie argumentów przez wartość. Przekazujesz oryginalne argumenty do funkcji, które nazywamy argumentami aktualnymi czyli Twoje owoce. Następnie funkcja tworzy sobie w pamięci ich kopie i powstają argumenty formalne. Na nich właśnie wykonywane są wszystkie operacje wewnątrz funkcji. Po wykonaniu tej funkcji są one tracone, to znaczy kopie tych Twoich owoców. Prawdziwe owoce istnieją nadal, nawet nie nadgryzione. :D Str 117 w BB

    Aby nie kopiować danych wystarczy zastosować referencję. O tym też jest mowa w BB. ;)
    Wtedy Twoje owoce faktycznie już będą w postaci płynnej po przemieleniu przez sokowirówkę i to nieodwracalnie.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 20:49 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    oo super. Dzięki za pomoc, o to mi właśnie chodziło . przykład ze strony 119 jest tym czego szukałem. Teraz go muszę poprzerabiać mod moje upodobania smakowe i chyba będzie gitarka. Dziękuje za cierpliwość i wyrozumiałość dla mnie :) Jak tylko to przećwiczę, to dopytam o jeszcze jedną rzecz nad którą się męczę, ale to już w następnym owocowym odcinku :) ps. jak się czyta BB to często coś umyka z nadmiaru informacji, a w tej magicznej księdze jest wszystko :)

    ------------------------ [ Dodano po: 45 minutach ]

    Super wszystko działa i zrozumiałem Wasze tłumaczenie. Ale teraz jeszcze chciałbym Aby jako bonus wyświetlana była wartość obliczonej funkcji na wyświetlaczu.
    Bazując na bibliotece Pana Mirka mam stworzoną funkcję do wyświetlania , jednak kłopot mam z wstawieniem do niej wyniku, tego który przypisuję na POTC.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Kiedyś Daro69 pokazywał mi jak się to robi, tzn wyświetlałem sobie licznik zliczający cyfry, ale nie mam już tego przykładu. A moja pamięć jest ulotna. Przyrównywałem lcd_str dofunkcji sok, niestety nie działa to rozwiązanie.

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 22:12 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

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

    ;)

    ------------------------ [ Dodano po: 4 minutach ]

    zauważ że lcd_str("jablko"); wysyła napis "jablko"
    a funkcja lcd_int(jablko); wysle wartość tego jabłka, czyli 2.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2018, o 22:34 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    dziękuję. Widzę właśnie,że te funkcje są w bibliotece LCD. jutro się tym pobawię . :):):) Uciekam spać.

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 sty 2018, o 20:56 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2595
    Pomógł: 128

    Dlatego warto miec 2 BB. Jeden do 'mazania' zakreślaczem a drugą do trzymania pod kloszem jako eksponat :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 sty 2018, o 21:17 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    ja wolę maziać i maziać. moja książka jest mocno popisana ołówkiem. ;)

    _________________
    Nikt nie mówił,że będzie łatwo...



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

    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