Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 23 kwi 2024, o 20:18


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 ]
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: 27225
Lokalizacja: Szczecin
Pomógł: 1041

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