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



Teraz jest 23 lut 2025, o 21:33


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 25 mar 2017, o 22:14 
Offline
Użytkownik

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

Witam.
Piszę sobie mały programik do obsługi klawisza i ledów z zestawu ATB i mam problem , bo nie wiem czy ja coś źle robię, czy moja funkcja jest abstrakcją jak obrazy niektórych malarzy. Czy to w ogóle ma prawo działać? Przytoczę przykład -ciało funkcji dla lepszego zobrazowania sytuacji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



wszystko jest pisane dosyć liniowo, ponieważ uczę się posługiwania funkcjami i if-ami, ale jeśli moja funkcja migacz_foor(); jest funkcją typu void i jest wpisana do funkcji, która także jest typu void, to czy to w ogóle będzie działaś? Funkcja migacz_foor() jest typowym robakiem, czyli przesuwa zapaloną diodę z lewa na prawo. w

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



Ostatnio edytowano 25 mar 2017, o 22:39 przez wojciechgorzolka, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2017, o 22:36 
Offline
Użytkownik

Dołączył(a): 04 paź 2014
Posty: 46
Lokalizacja: okolice JOWISZA czasami PL
Pomógł: 7

funkcja migacz_foor() zadziała gdy KLAWISZ_WCISNIETY da wartość prawda czyli >0, tylko pytanie kiedy się to wykona...
u ciebie jest tak :


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


nic nie piszesz o podłaczeniu hardware przyciski diody czy co tam masz dalej pomagać bedzie trudno .....
ps do umieszczenia kodów używaj znaczników syntax=c /syntax



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2017, o 22:41 
Offline
Użytkownik

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

podłączenie diod jak w zestawie ATB czyli katodą do uC, załączają się stanem niskim. kod już poprawiłem.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2017, o 22:46 
Offline
Użytkownik

Dołączył(a): 04 paź 2014
Posty: 46
Lokalizacja: okolice JOWISZA czasami PL
Pomógł: 7

OK ale podpiąć możesz do dowolnego portu ATMEGI ...
napisz proszę Ledy port B przycisk pin PC2 czy jak ?

Najlepiej daj cały kod ...

funkcja void może być wywoływana w innej funkcji.
przecież funkcja main jest typu void (na AVR oczywiście).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2017, o 23:09 
Offline
Użytkownik

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

ok, już kopiuję cały kod, chociaż nie chętnie, ponieważ nie chciał bym, aby inni mnie oskarżyli o pójście na łatwiznę :D . Nie oczekuję konkretnego rozwiązania, ponieważ w taki sposób się nie nauczę pisać kodu.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pytałem o to , czy funkcje jedna w drugiej będą działać, ponieważ chciałem sobie uprościć to co jest w pętli głównej i zastąpić większość kodu nowymi dwiema funkcjami (od pierwszego klawisza i drugiego). Ogólnie rzecz biorąc, to chcę uzyskać efekt następujący:
Gdy wcisnę klawisz pierwszy, to ma mi się wykonać robal trzy razy, to samo na drugim klawiszu. Jednak nie jest to takie proste dla mnie. Gdy napiszę instrukcję dla jednego klawisza, to działa pięknie, problem mam też z tym, aby w drugim klawiszu to samo się wykonywało.
Podaję przykład jaka jest moja koncepcja na dwa klawisze, niestety po wgraniu kodu nie działa mi to poprawnie :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Czy mogę połączyć obsługę dwóch klawiszy operatorem iloczynu && ?


Gdy klawisze nie są wciśnięte, to PORTB ma stan 0,
gdy wcisnę klawisz i osczekam 80ms , sprawdzę stan klawisza, to robal wykona się trzy razy. i koniec:) :D

Dodam jeszcze,że myślałem o koncepcji drugiej :
if.........
else if..........
else if.........

------------------------ [ Dodano po: 14 minutach ]

taka koncepcja, ale w niej działa tylko pierwszy klawisz, drugi niestety nie uruchamia robala, tylko dlaczego?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


po kompilacji błędy n ie wyskoczyły. a mimo to nie działa.

------------------------ [ Dodano po: 30 minutach ]

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


źle zdefiniowałem KLAWISZ_2. ufff:))
znów jest satysfakcja ;) zwłaszcza,że jestem bardzo zielony z programowania :mrgreen: :mrgreen: :mrgreen: :mrgreen:


Bardzo Ci dziękuję za zainteresowanie moim pytaniem :)

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2017, o 01:19 
Offline
Użytkownik
Avatar użytkownika

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

hejka, :)
brat_kamyka napisał(a):
OK ale podpiąć możesz do dowolnego portu ATMEGI ...
napisz proszę Ledy port B przycisk pin PC2 czy jak ?

Najlepiej daj cały kod ...

@brat_kamyka
Normalnie wróżka jesteś. :lol:
(bez fotki i kompletnego kodu)-...
Jakim cudem domyśliłeś się że problemem jest definicja przycisku. ?? :shock: :) :D

@Wojtek,
Widzę że zaczynasz ogarniać pisanie własnych funkcji. - super. :)
Przy najbliższej okazji proponuję zainteresować się timerami :D , bo widzę że używasz jeszcze delaye. ;)
Wbrew pozorom timery to nie straszydło - tylko tak wygląda na pierwszy rzut oka. :) a są bardzo przydatne.
Jak wejdą w krew,
to nawet mruganie jedną diodą chce się pisać z wykorzystaniem timera. :D

Pozdrawiam Darek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2017, o 07:35 
Offline
Użytkownik

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

oo cześć Darku. na timerki przyjdzie czas :)

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2017, o 10:35 
Offline
Użytkownik

Dołączył(a): 04 paź 2014
Posty: 46
Lokalizacja: okolice JOWISZA czasami PL
Pomógł: 7

Daro69 napisał(a):
@brat_kamyka
Normalnie wróżka jesteś. :lol:
(bez fotki i kompletnego kodu)-...
Jakim cudem domyśliłeś się że problemem jest definicja przycisku. ?? :shock: :) :D


bo błędów logicznych w funkcjach nie znalazłem ...
to jak nie kod ???? to co ???? HARDWARE !!!

Teraz pytanie do autora wątku po co tworzy się funkcje???
Odp. aby poprawić czytelność kodu,
funkcja to cześć kodu realizująca konkretne zadanie ( np. lcd_init(); itd....),
ja przeważnie jak pisze to bardzo podobnie do Mirka,
wpierw wszystko {co dotyczy jednego problemu} w funkcji main testuję czy działa zgodnie z założeniami,
potem przenoszę kod do osobnej funkcji ale uwaga nazwa funkcji musi mi mówić co ona robi (np: send_spi(string mojstring);)
i wszystko jasne nie.
Innymi słowy :
Programowanie to jak budowanie z klocków LEGO wpierw małe dzieci uczą składać klocki DUPLO (każdy klocek to prosta funkcja na przykład: void zapal_diode1(void);)
potem przychodzi czas na zwykłe klocki LEGO (np viod send_spi(string mojstring); która używa klocka DUPLO viod sendchar_spi(char A);)
Następnie dostajemy zestaw Lego Technic (np funkcja która ma za zadanie wysłanie napisów do wyświtlacza graficznego podpiętego po SPI ....)
a LEGO mindstorm to już wszystko (np prosty system czasu pseudo rzeczywistego -- timery programowe Mirka czy inne sposoby uruchamiania klocków lego Technic).

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


Pozdrawiam brat_kamyka.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2017, o 11:18 
Offline
Użytkownik

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

dziękuję za cenne rady

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2017, o 13:23 
Offline
Użytkownik

Dołączył(a): 04 paź 2014
Posty: 46
Lokalizacja: okolice JOWISZA czasami PL
Pomógł: 7

witaj ponownie,

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

a diodami bawisz się w kodzie bezpośrednio :( --- ciężko się to czyta,
spróbuj użyć tej samej techniki programowania ( preprocesora )

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



da to takie zalety w jednym miejscu definiujesz "hardware" w sposób bardzo przejrzysty (zwiększasz przenośność kodu na inne połączenia (poprawiasz tylko deklaracje #define )
po za tym łatwiej będzie ten kod analizować
później w kodzie używasz
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Proszę poczytaj w BB rozdział 4.4 strona 187 do 192.
tam masz wszystko jak na tacy podane ..... ( rozbuduj o inne LEDY do robala)
:)



Między wierszami czytam że diody na PORTB masz zapięte tylko pytanie co jest na PORTC pinie PC0



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2017, o 16:58 
Offline
Użytkownik

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

na C był buzer, ale go zlikwidowałem, to jest kod gdzie ćwiczę język C, więc jest trochę bałaganu. Dzisiaj bawiłem się z wyświetlaczem LCD i prawie pół dnia mi to zajęło. muszę to dokładnie rozgryźć :) to strasznie wciąga tak, tak że prawie cała niedziela przeleciała hehe. teraz chcę sobie coś wyświetlać na lcd, ale muszę jeszcze o tym poczytać. Ten kod , który jest wyżej sam sobie pisałem, więc jest w miarę czytelny, najgorsze jest to,że strasznie się męczyłem z drugim klawiszem i szukałem dlaczego nie działa, kombinowałem z kodem,a okazało się ,że miałem źle zdefiniowany pin. i na tym człowiek najwięcej traci czasu. Ale są tego plusy, ponieważ po drodze można się nauczyć czegoś innego. I tak powoli do przodu :)

_________________
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: 11 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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