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



Teraz jest 13 mar 2025, o 10:24


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 
Autor Wiadomość
PostNapisane: 21 lut 2015, o 10:07 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Witajcie.
Dopiero zaczynam i jestem całowicie początkujący. Kupiłem ksiązke BB i po przeczytaniu teorii doszedłem do praktyki. Chciałem sobie poćwiczyć jak to bywa na początku z diodami i ze składnią programu. Na początku napisałem taki program:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Działa on tak jak chciałem. Ale pomyślałem sobie, żeby przetestować funkcje if. W związku z tym chciałem wstawić warunek
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Ale nie wiem gdzie jest bład bo program zachowuje się tak jakby nie widział tego warunku. Program wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pomożecie mi zrozumieć co jest nie tak ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2015, o 10:19 
Offline
Użytkownik

Dołączył(a): 11 wrz 2013
Posty: 709
Zbananowany użytkownik

Pomógł: 23

Odpowiedz najpierw sobie co chciałeś osiągnąć i czy to na pewno nie działa?
Pomyśl czy gołym okiem zauważysz różnicę świecenia diody przez 1s, a 1,1 s.

--
Grzegorz...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2015, o 10:21 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Yyyy 1000ms to jest jedna sekunda, a 100ms to 0,1 sekundy więc wydaje mi się, że zauważę tą różnice :)

Tak to chciałem napisać, że po 32 kroku prędkość świecenia i gaszenia diód wzrośnie 10 razy. Chyba, że jak sugerujesz to jest dodawane 1 + 0,1 sek , wtedy faktycznie nie zauważe.

Rzeczywiście zamieniłem delay'e miejscami i program działa, ale nie tak jak ja chciałem .. Te wartości sie dodają a ja chciałem zeby sie tylko zmieniły.



Ostatnio edytowano 21 lut 2015, o 10:35 przez aren, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2015, o 10:31 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Może tak

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

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2015, o 10:32 
Offline
Użytkownik

Dołączył(a): 11 wrz 2013
Posty: 709
Zbananowany użytkownik

Pomógł: 23

aren napisał(a):
Yyyy 1000ms to jest jedna sekunda, a 100ms to 0,1 sekundy więc wydaje mi się, że zauważę tą różnice :)

Tak to chciałem napisać, że po 32 kroku prędkość świecenia i gaszenia diód wzrośnie 10 razy. Chyba, że jak sugerujesz to jest dodawane 1 + 0,1 sek , wtedy faktycznie nie zauważe.

Rzeczywiście zamieniłem delay'e miejscami i program działa, ale nie tak jak ja chciałem .. Te wartości sie dodają a ja chciałem zeby sie tylko zmieniły.


Poczytaj o konstrukcji if...else.

Zauważ, że ja Ci będę podsuwał tylko sugestie bez "gotowców" :).

--
Pozdrawiam.
Grzegorz...

------------------------ [ Dodano po: 2 minutach ]

Marcin_G napisał(a):
Może tak

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


Ojjj no to kolego grubo "pojechałeś".
Skompiluj to i sam zobacz ile taki mały programik zajmie Ci pamięci.
Temat _delay_ms(x) poruszany był tu już dziesiątki jak nie setki razy.

--
Grzegorz...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2015, o 10:35 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Wybrnąłem z tego tak: ale nie wiem czy to dobry tok myślenia ...

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: 21 lut 2015, o 10:41 
Offline
Użytkownik

Dołączył(a): 11 wrz 2013
Posty: 709
Zbananowany użytkownik

Pomógł: 23

aren napisał(a):
Wybrnąłem z tego tak: ale nie wiem czy to dobry tok myślenia ...

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


No i proszę prosta konstrukcja zrozumiana, ale ja bym jeszcze coś zmienił:

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


I już masz krótszy kod wynikowy.

-------------------------------------------------------------------------------------------------------- EDIT
Sorki z tym krótszym wynikowym to chyba przesadziłem, ale po prostu masz krótszy kod źródłowy.
--------------------------------------------------------------------------------------------------------------

Dodatkowo zobacz jak można zapisać jeśli w if wykonujesz tylko jedną instrukcję.

--
Grzegorz...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2015, o 14:07 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Grzegorz... napisał(a):
... Ojjj no to kolego grubo "pojechałeś".
Skompiluj to i sam zobacz ile taki mały programik zajmie Ci pamięci.
Temat _delay_ms(x) poruszany był tu już dziesiątki jak nie setki razy.


Może i grubo. Pytanie jednak, nie było o zoptymalizowanie kodu, ale o warunek "if" . Rozwiązanie które ja podałem jest jednym z możliwych do wprowadzenia od tak na szybko. Oczywiście Twoja odpowiedź z punktu widzenia zajętości pamięci jest o wiele rozsądniejsza, a i przy okazji kolega aren poznał do czego służy "else".
Zresztą, jak jeszcze trochę poczyta BB to za chwilę odpuści sobie te "delaye" i zacznie używać timerów programowych :)

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2015, o 18:06 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

A możecie mi wytłumacyć czym się różni zapis:
DDRD |= (1<<PD5);
od
DDRD = (1<<PD5);

Nie mogę zrozumieć działania tej "pionowej kreski". Przecież sam znak równa się to też jest ustawienie bitu do DDRD ...

Coś narazie cięzko mi idzie. Chyba na trzeźwo tego nie ogarne :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2015, o 18:26 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Dzięki - już rozumiem. A przecież czytałem o tym w książce ... Chyba za dużo chce na jeden raz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2015, o 18:31 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Jak już całą raz przeczytałeś, to proponuję przeczytać ją powtórnie :) Z własnego doświadczenia wiem że po drugim, a potem trzecim, czwartym ;) razie, wszystko staje się coraz bardziej zrozumiałe :)

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2015, o 00:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

ta jedna pionowa kreska wypadałoby dodać, że jest to po prostu bitowe LUB (OR). Dlatego nie taki zapis nie wpływa na inne bity. Proponuje poczytać o tym w BB lub tutaj http://arduino.cc/en/Reference/BitwiseAnd i obejrzeć jeden z poradników Mirka, w którym ponoć Mirek pokazuje jak to działa!

I jeszcze zapamiętaj jedno
a+=1 jest równoznaczne z a=a+1
zatem
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

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

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

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2015, o 18:18 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Witajcie ponownie.
Chyba jestem całkowity betonik z tego programowania. Przeczytałem książkę ksiązkę 1,5 razy. Doczytałem drugi raz do zajęć proaktycznych z diodami i przyciskiem. Przyszła pora poćwiczyć. Wymyśliłem sobie że:
mam 8 diod i jeden przycisk. Chcę naciskając przycisk raz zapalić pierwszą diode.
Naciskając drugi raz zapalić do pierwszej - drugą diodę (czyli świeci się pierwsza i druga).
Naciskając trzeci raz zapalić do pierwszej i drugiej diody trzecią (czyli świeci się pierwsza i druga i trzecia) i tak aż do ośmiu.

No i beton :( Nie mam pomysłu a może logicznego myślenia jak się za to zabrac ...



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

Dołączył(a): 11 wrz 2013
Posty: 709
Zbananowany użytkownik

Pomógł: 23

A czego nie rozumiesz?
Jeśli jak zapalac kolejne diody to zainteresuj się tym tematem: http://mirekk36.blogspot.com/2012/10/ro ... skowa.html
Do tego przeczytaj w BB jeszcze raz rozdział o operatorach bitowych.

--
Grzegorz...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2015, o 19:17 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Właśnie chyba niczego nie rozumiem i przez to się zniechęcam :(
Napisałem takie coś, żeby chociaż zmienić stan jednej diody po naciśnięciu przycisku. Niestety to też nie działa ...
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: 11 mar 2015, o 19:50 
Offline
Użytkownik

Dołączył(a): 11 wrz 2013
Posty: 709
Zbananowany użytkownik

Pomógł: 23

No a przecież w rozdziale "Obsługa klawiszy typu micro-switch" w BB masz tak wszystko pięknie opisane.
1. W swoim programie nie podciągasz wejścia klawisza do VCC wewnętrznym rezystorem.
2. Nie masz żadnej eliminacji drgań styków - nawet opartej o delay-e.

--
Grzegorz...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2015, o 19:52 
Offline
Moderator
Avatar użytkownika

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

aren napisał(a):
Napisałem takie coś, żeby chociaż zmienić stan jednej diody po naciśnięciu przycisku. Niestety to też nie działa ...

Napisałeś też w pierwszym poście że masz Bluebooka - ale powiedz ty panie kochany - czy ty czytałeś tę książkę w ogóle? czy rzuciłeś ją w kąt ... i tworzysz na zasadzie - wyjdzie coś albo nie wyjdzie ?

_________________
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: 11 mar 2015, o 19:57 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

aren napisał(a):
Witajcie ponownie.
Chyba jestem całkowity betonik z tego programowania. Przeczytałem ksiązkę 1,5 razy. Doczytałem drugi raz do zajęć proaktycznych z diodami i przyciskiem.



Panie Mirek to nie jest tak hop siup wszystko na raz zapamiętać. Dodam jeszcze, że oprócz książki oglądam też videoporadniki godzinami... ale jak widać na razie beton jestem

Grzegorz...
Dodałem te dwa puknty, które napisałeś, ale teraz nie wiem dlaczego świecą się dwie diody (PD0 i PD1), a klawisz nadal jest martwy ..

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: 11 mar 2015, o 20:26 
Offline
Użytkownik

Dołączył(a): 11 wrz 2013
Posty: 709
Zbananowany użytkownik

Pomógł: 23

Aż postanowiłem sprawdzić na podstawie kodu z książki

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


I działa.
Ale poczytaj też to, bo jak przytrzymasz palucha za długo na klawiszu to zobaczysz ciekawy efekt :) : http://mirekk36.blogspot.com/2012/10/dr ... ak-to.html

--
Grzegorz...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2015, o 21:05 
Offline
Moderator
Avatar użytkownika

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

aren napisał(a):
Panie Mirek to nie jest tak hop siup wszystko na raz zapamiętać.

Panie, ... a ty myślisz że ja albo ktoś to na pamięć wkuwa tego typu książki ? ;) ... to chyba tylko gieniusze co niektórzy z ele...

Ale za to masz wyraźny ROZDZIAŁ w książce, no i pierwsze przykłady na DVD dołączonym do książki - gdzie w tytule jak BYK masz o obsłudze przycisków/klawiszy - to powiedz mi czy ktoś tu wymaga od ciebie "na pamięć" ? ... żebyś chociaż na przykładzie tych kodów albo te kody DOKŁADNIE spróbował i coś ci nie wychodziło - to wtedy - no można zrozumieć bo początkujący jesteś ....

ale ty - piszesz kod w oderwaniu w ogóle od jakiegokolwiek przykładu nie tylko z książki ale z jakichkolwiek nawet kodów z netu .... Więc zrozum - nikt ci tu nie zarzuca niczego - KAŻDY rozumie właśnie że jesteś początkujący - ale na Zeusa .... no jak mówię otwórz właściwy rozdział albo otwórz pierwsze ćwiczenie z DVD i zacznij je przerabiać - a jak czegoś nie rozumiesz to zadaj pytania - OK ?

i podobnie z kolejnymi ćwiczeniami - bo wtedy będzie o wiele łatwiej ci pomóc czy na coś naprowadzić - gdy będzie widać że idziemy tym samym tokiem rozumowania ... o to chodzi ;)

------------------------ [ Dodano po: 2 minutach ]

aren napisał(a):
ale jak widać na razie beton jestem

Beton to jest ten kto może NIC nie robi - ty coś robisz - może trochę nieudolnie no ale cię naprowadzamy ;) .....

tylko tak się zastanawiam - przyznaj się bez bicia - zaglądałeś do przykładów na DVD ? albo do przykładu obsługi klawisza w książce ? ale w takim sensie - że

1. napisałeś swój kod tu na forum
2. zajrzałeś do książki czy ew jest co najmniej podobnie jak w niej
3. albo zajrzałeś do przykładu na DVD

??? zrobiłeś tak czy nie ? ;)

_________________
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: 12 mar 2015, o 18:26 
Offline
Nowy

Dołączył(a): 26 maja 2014
Posty: 18
Pomógł: 0

Od wczoraj nastąpił mały progres. Napisałem coś takiego ale nie rozumiem dlaczego to działa inaczej niż sobie założyłem...
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Myślałem, że pętla pierwsza pętla for zostanie wykonana jak nacisnę raz przycisk i zaświeci się pierwsza dioda. Jeśli puszcze przycisk to pętla zostaje przerwana i czeka na naciśnięcie przycisku. Gdy nacisnę drugi raz powinna się zaświecić pierwsza i druga dioda i czekać na kolejne moje naciśnięcie.

Tymczasem . Jak tak naciskam to cuda wianki się dzieją z diodami. Raz świeci 7 diód, potem jedna, potem wszystkie (jakiś random się robi). Ale jeśli trzymam wciśnięty klawisz to diody zapalają się jedna po drugiej

Wytłumaczy mi to ktoś. Proszę ...



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

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