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 10 lip 2025, o 02:27


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
    Autor Wiadomość
    PostNapisane: 8 maja 2021, o 20:04 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 06 kwi 2021
    Posty: 15
    Pomógł: 0

    Witam Was.

    Szczerze mówiąc, to przypuszczam, że odpowiedź na moje pytanie gdzieś na forum jest, tylko że ja nie wiem jak to pytanie dobrze zadać. Zaczynam z językiem C, uczę się programować na Atmedze i nie umiem jeszcze nazwać niektórych rzeczy "po imieniu".

    Mam taki mały kod, ale ugrzęzłem na takim czymś:

    Chciałbym w main.c użyć funkcji np. led_on(x); gdzie (x) ma oczywiście oznaczać nr diody (ale nie nr pinu!). W tej chwili mam to zrobione tak, że funkcja sprawdza to na zasadzie:

    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.



    To na pewno da się zrobić jakoś mądrzej, żeby w przypadku konieczności użycia np. czwartej diody nie musieć dopisywać do każdej funkcji kolejnego "else if", dyrektyw preprocesora (wiem, że one akurat nie są konieczne) itd.

    Kombinowałem z jakimiś składniami typu: zamiast LED1 to LED(x), próbowałem użyć tych makr dostępu do portów, kombinowałem jak użyć tablic... nie umiem nic mądrego wymyślić... :oops:
    Naprowadzi mnie ktoś na jakiś azymut?

    Tylko bardzo proszę, jak najprostszym, lub chociaż w miarę prostym językiem... Dziękuję za wyrozumiałość... :)

    Bartek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 maja 2021, o 21:04 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    Jeśli chcesz mieć zupełną niezależność od pinu to tylko zabawa z else if w takim przypadku

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 maja 2021, o 21:37 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 lis 2019
    Posty: 145
    Pomógł: 37

    Zależy czy chcesz by numer diody był kolejną liczbą czy też wystarczy odwoływanie się przez nazwę symboliczną. W pierwszym przypadku można zastosować tablicę "tłumaczącą" nr na konkretny pin i port. W drugim przypadku można zrobić zwykłą operację na porcie. W najbardziej podstawowym rozwiązaniu jest ograniczenie, że LEDy muszą się znajdować na jednym porcie. Po pewnej rozbudowie można to obejść.

    przypadek 1.

    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.



    Przypadek drugi

    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.

    _________________
    Think for yourself and question authority.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 maja 2021, o 22:23 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 06 kwi 2021
    Posty: 15
    Pomógł: 0

    :shock: Ło Matko...

    Na pierwszy rzut oka nic z tego nie rozumiem, ale jest późno i może dlatego... Jutro ze świeżą głową się temu przyjrzę... ale najpierw muszę zgłębić jeszcze raz tematy struktur i typów wyliczeniowych...

    Dziękuję!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 maja 2021, o 08:52 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 lis 2019
    Posty: 145
    Pomógł: 37

    To tylko przykład. Nie ma obowiązku stosowania ani struktur ani typów wyliczeniowych. Chodzi o ideę - pozbycie się kłopotliwych ifów prostymi technikami. W pierwszym przypadku numer LEDa traktujemy jako indeks do tablicy, która zawiera paskudną część kodu i co najważniejsze skupia ją w jednym miejscu. W razie modyfikacji robi się to nie w n funkcjach tylko w jednej tablicy. Przypadek drugi podobnie tyle że obrzydliwości ukrywamy pod stałą symboliczną.

    _________________
    Think for yourself and question authority.



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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