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



Teraz jest 12 kwi 2026, o 11:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 17 sty 2016, o 12:30 
Offline
Nowy

Dołączył(a): 20 gru 2015
Posty: 19
Pomógł: 0

Witam, realizuję takie zadanie na ATmega8:
8 diód LED wpięte są pod linie portu D od PD0...PD7, chcę aby program zapalał mi diody od PD0 do PD7 i potem od PD7 do PD0.
Najpierw ma zapalić diodę wpiętą pod PD0 odczekać 0.5sek zgasić diodę PD0 i zapalić PD7 itp. W kierunku rosnącym od PD0 do PD7, a potem w kierunku malejącym od PD7 do PD0. Nie wiem dlaczego ale po wykonaniu pętli for w kierunku rosnącym a potem malejącym program przestaje działać nie realizuje pętli nieskończonej while. Dlatego zwracam się o pomoc do kolegów gdzie popełniam błąd?

Poniżej prezentuję kod:

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



Ostatnio edytowano 17 sty 2016, o 15:50 przez ciscoc, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sty 2016, o 12:52 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

W drugiej pętli for masz zmienną typu uint8_t i dałeś jako warunek który będzie sprawdzany k>=0 i po każdym obiegu pętli odejmowanie jeden od zmiennej k, więc kiedy zmienna k jest równa zero to pętla się wykona i później od 0 odejmie 1 zmienna uint8_t nie może być ujemna więc po tej operacji k = 255 więc znowu warunek spełniony i tak w kółko, więc musisz zastosować zmienną int8_t bądź zmodyfikować lekko tą pętle for aby nie było warunku k>=0.
aha i poprawnie wstaw kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sty 2016, o 13:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

Dodatkowo daj sobie flage aby najpierw leciala pierwsza petla a po jej wykonaniu kolejna po czym znow pieresza i tak w kolo. Bo teraz z 1 obiegiem petli while wykonuja sie obie petle for.

Namazane ze smarta.

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sty 2016, o 15:54 
Offline
Nowy

Dołączył(a): 20 gru 2015
Posty: 19
Pomógł: 0

Przepraszam za format kodu mam nadzieję że już jest dobrze wyświetlany.

Mam jeszcze jedno pytanie do użytkownika 'majster' który napisał:
majster napisał(a):
Dodatkowo daj sobie flage aby najpierw leciala pierwsza petla a po jej wykonaniu kolejna po czym znow pieresza i tak w kolo. Bo teraz z 1 obiegiem petli while wykonuja sie obie petle for.

Co oznacza, na czym polega dodanie flagi do kodu programu?



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

Dołączył(a): 12 sty 2015
Posty: 80
Lokalizacja: Grudziądz
Pomógł: 2

Tworzysz sobie "uint8_t flaga = 0" i po wykonanej petli zmieniasz wartosc.



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

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

THEGITMAN napisał(a):
Tworzysz sobie "uint8_t flaga = 0" i po wykonanej petli zmieniasz wartosc.

Odpisałem na pw ale chodzi o coś takiego że w tym momencie petla while wykonuje przy jednym obiegu obie petle for a najpierw ma sie wykonac 1 for potem 2 for dlatego piszesz

If( flaga == 0 ) {

1 for gdzie po ostatnim obiegu petli for dajesz flaga == 1;

}else{

2 for gdzie po ostatnim obiegu petli for dajesz flaga == 0;

}

W ten sposob najpierw wykona soe 1 for nastepnie 2 for i tak w kolo.

Namazane ze smarta.

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sty 2016, o 17:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Dodatkowa flaga tu nie jest potrzebna. Pętle for nie będą się wykonywać jednocześnie tylko jedna za drugą. Jeśli program wejdzie w pierwszą pętlę for to będzie się w niej kręcił tak długo aż warunek tej pętli przestanie być spełniony. W tym momencie pierwsza pętla się skończy i program wejdzie w drugą pętlę i pozostanie w niej tak długo aż warunek w tej drugiej pętli przestanie być spełniony. Następnie przejdzie znów do pierwszej pętli. I tak w kółko.

Problem w tym, że druga pętla się nie skończy z powodu który podał kol. Bartek123.



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

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Może mam pomroczność, ale nie bardzo rozumiem wykonywanie pętli "for" na raz - a to nie jest tak, że jak do jednej wejdzie to nie wyjdzie aż skończy?
Kol.ciscoc w tych pętlach podał złe warunki, ot i wszystko:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sty 2016, o 18:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

Ahh racja ... tak to jest jak sie czyta i pisze z telefonu.

Nie mniej kolega ciscoc dowiedzial sie co to sa flagi :)

Namazane ze smarta.

_________________
Usługi druku przestrzennego - www.drumik.pl



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

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