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



Teraz jest 18 kwi 2024, o 15:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ] 
Autor Wiadomość
PostNapisane: 28 cze 2016, o 21:09 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 28 cze 2016
Posty: 13
Lokalizacja: Legnica
Pomógł: 0

Witam, w oparciu o artykuł "LED sterowany przez Timer" który opracował drzasiek postanowiłem spróbować napisać program sterujący sygnalizacją świetlną na skrzyżowaniu drogowym.

Jeśli chodzi o sam proces zmiany świateł to nie miałem żadnych problemów, kłopoty zaczęły się kiedy chciałem dodać przycisk dla pieszych który miał by skracać czas trwania światła zielonego dla samochodów. Całą idę oparłem na schemacie że jeżeli zmienna pomocnicza licznika przekroczy odpowiednią wartość to zostanie wykonana instrukcja zawarta w pętli if ( if(cnt>...) ), w moim przypadku zmieni się stan diod.

Kiedy umieszczam podobną instrukcję ale zawierającą obsługę przycisku lub zerowanie cnt, program zaczyna dziwnie reagować, albo nie wykonują się żadne zmiany stanu diod albo działa tylko instrukcja obsługiwana przez przycisk. Wydaje mi się, że albo wpisuje ją w złym miejscu albo ma ona złą formę. Same połączenie przycisku oraz kod który go uruchamia raczej są w porządku gdyż w innym testowym programie zapalają i gaszą diody.

Jak zapewne nie trudno wywnioskować z powyższej lektury jeśli chodzi o mikrokontrolery dopiero zaczynam swoją przygodę, chciał bym prosić o sugestie czy w oparciu o taki timer i techniki których próbuje użyć do rozwiązania tego problemu ten projekt ma rację bytu? Ewentualnie jak inaczej można by podejść do zagadnienia przycisku dla pieszych na takim domniemanym skrzyżowaniu?

Na samym dole kodu zamieściłem w komentarzach dwie pętle których próbowałem użyć, zawarte w nich instrukcje mają charakter jedynie testowy.

Kod programu:

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



Ostatnio edytowano 29 cze 2016, o 15:03 przez black_currant, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2016, o 06:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 mar 2015
Posty: 116
Pomógł: 16

Witaj,
sugeruję lekturę na temat; maszyny stanów.
Na początek np. to:
http://ep.com.pl/files/1436.pdf

Z pomocą forumowej "szukajki" znajdziesz posty odnośnie jej (maszyny stanów) implementacji na AVR.
Pozdr.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2016, o 13:04 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

Trochę trudno to analizować bo nic nie piszesz o tym gdzie masz podłączone lampki.
Ale ponieważ dopiero się uczysz, to staraj się bardziej czytelnie pisać kod. Dodawaj komentarze. Wpisywanie wartości do portu w postaci binarnej nie jest dobrym pomysłem. Nie ma potrzeby inicjalizować zerem portów mikrokontrolera bo one sa zerowane po resecie. To samo dotyczy rejestru TCNT. W tym przypadku może nie ma to dużego znaczenia , ale kod realizowany w przerwaniu powinien być jak najkrótszy. Zwróć też uwagę, że w tym kodzie dla cnt=80 wykona się tylko pierwszy warunek. Jednak im większa wartość cnt to bedą się wykonywać kolejno wszystkie warunki po kolei, a to chyba nie tak ma działać. Tu raczej bardziej pasowała by instrukcja switch().
Co do samej ideii działania takiego układu to ja zrobił bym to tak. Powołuje sobie zmienną - taką flagę w której będzie zapisana informacja czy przycisk został wciśnięty. Światła powinny normalnie się przełączać z pominieciem stanu włączenia zielonego dla pieszych. Dopiero kiedy spełniony jest warunek, że przycisk został wciśnięty powinna wykonywać sie dodatkowa sekwencja włączenia światła zielonego dla pieszych.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2016, o 14:55 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 28 cze 2016
Posty: 13
Lokalizacja: Legnica
Pomógł: 0

Jeśli chodzi o rozszycie diod to w układzie mam dwie pary świateł dla każdej z dróg (proste skrzyżowanie, dwie przecinające się drogi), dla pojazdów i pieszych.

Pierwsza z dróg: PB2,PB5-czerwone ; PB1,PB4-żółte ; PB0,PB3-zielone ; PD3,PD2-czerwone,zielone dla pieszych;

Druga z dróg: PC5,PC2-czerwone ; PC4,PC1-żółte ; PC3,PC0-zielone ; PD1,PD0-czerwone,zielone dla pieszych;

Co do komentarzy i sposobu pisania kodu to rzeczywiście jeszcze nie nabrałem nawyku, czytałem o tym że to ułatwia prace z kodem tylko kwestia żebym się przyzwyczaił.

Ogólnie wszystkie wartości zawarte w instrukcjach pętli ustawiają żądaną konfigurację diod. Co do zliczania cnt, to wydaje mi się, że kiedy dojdzie do 80 ustawia konfiguracje z tej pętli, dalej liczy i ustawia kolejną, tą ze 160. Sprawdziłem to na płytce, cały cykl przejścia świateł działa poprawnie. Chciałem aby wciśnięcie przycisku zmieniało wartość cnt, tak aby kiedy przycisk nie jest wciśnięty cykl światła czerwonego dla pojazdów trwał dwa razy dłużej (po przez ustawienie wartości cnt tak aby powtórzyć pętle), kiedy pieszy wciska przycisk krócej czeka. Kwestia czy realizacja jest możliwa.

Z flagą walczyłem dziś rano, ale muszę jeszcze zgłębić temat bo wychodziły mi dziwne rzeczy. Jeśli chodzi o switch to rzeczywiście pozwoliło by to rozpatrzenie kilku wariantów, z wciśniętym przyciskiem lub nie.

Po szybkiej lekturze artykułu na temat maszyny stanów, wydaje mi się że pasował by idealnie, tylko kwestia doboru narzędzi w postaci timerów i obsługi przycisków.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 cze 2016, o 15:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 mar 2015
Posty: 116
Pomógł: 16

black_currant napisał(a):
Co do komentarzy i sposobu pisania kodu to rzeczywiście jeszcze nie nabrałem nawyku, czytałem o tym że to ułatwia prace z kodem tylko kwestia żebym się przyzwyczaił.

Przyjmij na wiarę, warto dodawać komentarze ;) !
Zdziwisz się , jak po pewnym czasie powrócisz do własnego kodu (bez komentarzy), zaczniesz go analizować i dojdziesz do wniosku...: "co autor miał na myśli ?".
Nie komentowanie programu to bardzo pozorna oszczędność czasu.
Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 cze 2016, o 19:28 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

Cytuj:
Ogólnie wszystkie wartości zawarte w instrukcjach pętli ustawiają żądaną konfigurację diod. Co do zliczania cnt, to wydaje mi się, że kiedy dojdzie do 80 ustawia konfiguracje z tej pętli, dalej liczy i ustawia kolejną, tą ze 160. Sprawdziłem to na płytce, cały cykl przejścia świateł działa poprawnie.


Ale jeśli w if masz warunek cnt>80, to oczywiście , że dla wartości 160 wykona się kolejny if ale wczesniej na ułamek sekundy wykona się też warunek poprzedni. Dla kazdej następnej wartości cnt będą się wykonywały warunki poprzednie. Dzieje się to bardzo szybko i nawet tego nie zauważysz. W tym przypadku to zapewne nie jest problem, ale chodzi o pewne zasady w programowaniu i zrozumienie jak się to będzie wykonywać. W pewnych przypadkach to może być poważny problem, a co najgorsze bardzo trudny do wychwycenia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 06:38 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 28 cze 2016
Posty: 13
Lokalizacja: Legnica
Pomógł: 0

Rzeczywiście gołym okiem w tym przypadku nie widać tego problemu, dzięki za zwrócenie uwagi. Gdyby to rzutowało na działanie programu to może użycie _delay_ms z krótkim czasem pod koniec pętli rozwiązało by problem? Choć czytałem żeby go unikać w przerwaniach, ale w sumie i tak nie zamuli programu bo cały mój główny program to to przerwanie.

Po dłuższych próbach i konsultacjach mam wrażenie że w takiej formie ten program nie ma racji bytu, muszę albo go gruntownie przebudować albo zacząć od nowa. Obsługę przycisków prawdopodobnie muszę zawrzeć w głównej pętli, w przerwaniach się raczej nie sprawdzą.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 13:02 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

Nie no, nie jest tak źle. Powinieneś w przerwaniu tylko zwiększać wartość licznika cnt. Resztę przenieś do pętli głównej i tam sprawdzaj warunki, jaki jest stan. Jeśli zrobisz to instrukcją if to porównuj konkretną wartość np. if(cnt==160). Wtedy faktycznie wykona się tylko warunek dla tej wartości. To wystarczy bo wtedy ma się zmienić układ świateł. Potem przez chwilę nic się nie dzieje. Dopiero jak zostanie osiągnięty następny warunek nastąpi kolejna zmiana. Świetnie nadaje się do tego właśnie istrukcja switch().
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Spróbuj tylko pokombinować jak w zależności od stanu przycisku dodać wykonywanie dodatkowych pozycji wyświetlania świateł.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lip 2016, o 20:30 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 28 cze 2016
Posty: 13
Lokalizacja: Legnica
Pomógł: 0

Rzeczywiście cały trzon programu będzie się realizował w pętli głównej, cnt będzie jedynie wyznaczały takty zmian świateł. Na pewno spróbuje to wcielić w życie tylko nie fartownie zaczynam urlop więc najszybciej za około dwa tygodnie. Dam znać czy udało mi się uporać z problemem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2016, o 12:23 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 28 cze 2016
Posty: 13
Lokalizacja: Legnica
Pomógł: 0

Witam, udało się oprzeć cały schemat działania na instrukcji switch, ale mimo wielu prób nie mogę zaadoptować udziału przycisku w całej procedurze. Umieszczałem instrukcje obsługi przycisku w poszczególnych case, w pętli głównej i nijak nie chce działać. Powątpiewam już czy możliwe jest użycie w jednym programie przerwań od przepełnienia timera i przycisku w czasie realnym.

Poniżej poprawiony kod i instrukcja do przycisku w komentarzu pod nim.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2016, o 15:07 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

Ja proponuje zrobić coś takiego. W obsłudze przerwania zostaw tylko inkrementację licznika cnt. Instrukcję switch przenieś do pętli while.
W pętli while musi też być zawarta obsługa przycisku. Ale nie z jakimś delayem i sterowaniem portem, tylko z ustawieniem flagi, że przycisk został wciśnięty. Musisz powołać po prostu jeszcze jedną zmienną.
W istrukcji switch umieszczasz wszystkie możliwe stany jakie mają być wyświetlane na semaforach, czyli z sekwencjami świateł dla pieszych tak jakby był wciśnięty przycisk. W instrukcji switch dla tych pozycji, które odpowiadają za włączenie świateł zielonych dla pieszych dodajesz na początku warunek if i sprawdzasz w nim czy ustawiona jest flaga włączenia przycisku. Jeśli tak to dana sekwencja switch się wykona. Jeśli nie ustawiasz cnt na nastepną pozycję która ma być wykonana. Dodatkowo w tej sekwencji switch, w której kończy się sterowanie światłami dla pieszych trzeba będzie skasować flagę przycisku. W ten sposób jesli nie był wciśnięty przycisk zmieniać się będą tylko światła dla samochodów, dla pieszych zawsze czerwone. Jeśli przycisk wciśnięty to zostanie wykonana dodatkowa sekwencja zmiany świateł dla pieszych. Mam nadzieję, że nie napisałem tego bardzo zawile.
I jeszcze taki drobiazg na koniec, main jest typu int a nie void.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lip 2016, o 10:41 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 28 cze 2016
Posty: 13
Lokalizacja: Legnica
Pomógł: 0

Zrobiłem jak zasugerowałeś, jednak układ nie reaguje, nie wykonuje się żaden krok programu.

Poniżej kod:

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


Jednak trochę pozmieniałem wcześniejszą wersję i o dziwo działa, program się wykonuje a po naciśnięciu przycisku wykonuje się zawarta po nim pętla. Poniżej kod może się komuś przyda.

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


Co prawda całość wymaga jeszcze totalnej optymalizacji, na razie jedynie mam szkielet tego jak mogło by być. Puki co zauważyłem że jeśli umieszczę opóźnienie lub spróbuje zmienić wartość cnt w pętli zagnieżdżonej w drugiej to program się wysypuje. Szału nie ma ale jest światełko w tunelu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2016, o 14:26 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

No jak miała by działać ta pierwsza wersja skoro w pętli głównej wstawiłeś while(1); Czyli po inicjalizacji portów i timera nic się już dalej nie wykonuje oprócz oczywiście zwiększania cnt w przerwaniu. Ale jeśli usuniesz średnik za while, to zapewne i ta wersja będzie działać. A w obsłudze przerwania naprawdę wstawia się możliwie najkrótszy kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2016, o 11:31 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 28 cze 2016
Posty: 13
Lokalizacja: Legnica
Pomógł: 0

Rzeczywiście mój błąd, całość działa poprawnie aż do momentu próby dodania obsługi przycisku. Kiedy w drugim kroku dodaje instrukcje która ma się spełnić dopiero po wciśnięciu przycisku to wykonuje się ona od razu. Nie wiem czy źle interpretuje zasadę działania, sama instrukcja do obsługi przycisku działa poprawnie w innym programie.

Cały czas kłopoty napotykam przy łączeniu obsługi przycisku i przerwań. nie jestem pewien czy takie wplatanie przycisków w procedury przerwań nie jest dla nich zbyt dużym obciążeniem?

I jeszcze jedno techniczne pytanie: czy to normalne że nie zawsze wgrywa mi się program do mikrokontrolera? Naciskam upload i proces wykonuje się poprawnie ale zawartość jednostki się nie zmienia, dopiero za drugim lub trzecim razem jest ok. Na początku wprowadzało to sporo zamętu.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2016, o 13:41 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

Cytuj:
nie jestem pewien czy takie wplatanie przycisków w procedury przerwań nie jest dla nich zbyt dużym obciążeniem?

Ale w tym wariancie obsługę przycisku masz wstawioną w pętli głównej.
Mnie tu brakuje tylko zerowania flagi wciśnietego przycisku. No bo teraz jak juz raz wciśniesz przycisk to ta flaga przycisk jest ustawiana na 1 i tak trwa w nieskończoność. Trzeba by ją wyzerować w tym if sprawdzającym czy ona jest ustawiona.

Cytuj:
I jeszcze jedno techniczne pytanie: czy to normalne że nie zawsze wgrywa mi się program do mikrokontrolera? Naciskam upload i proces wykonuje się poprawnie ale zawartość jednostki się nie zmienia, dopiero za drugim lub trzecim razem jest ok. Na początku wprowadzało to sporo zamętu.

To napewno nie jest normalne. A czym wgrywasz program do procka? I jak masz wogóle ten układ zrobiony (na zestawie ATB, stykówce, płytka drukowana...)?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sie 2016, o 06:54 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 28 cze 2016
Posty: 13
Lokalizacja: Legnica
Pomógł: 0

Jeśli chodzi o zerowanie flagi to wykonuje się w kroku drugim (case 280), tylko odnoszę wrażenie, że nie do końca się to sprawdza. Czasami kiedy program zrobi jeden pełen obieg i nie zostanie wciśnięty przycisk to przy następnym obiegu reaguje jak był by wciśnięty, podejrzewam że mam jakieś błędy składniowe i staram się je namierzyć.

Program wgrywam z eclipsy za pomocą atnelowskiego ATB-USBASP, cały układ mam na stykówce. Wiem że stykówki mają opinie wysoce nie stabilnych i awaryjnych, ale moje problemy mają dość stały charakter i co jakiś czas sprawdzam sobie na przykład działanie samego przycisku na innym programie, więc fizycznie powinno być ok.

#

Poniżej program który ma za zadanie skrócić czas trwania pętli jeśli wciśnie się przycisk, dodaje do wartości zmiennej i 100. Pierwszy obieg trwa około 34 sekundy, a następny nawet jak nie jest wciśnięty przycisk już tylko 2 sekundy. Wygląda to taj jak by po wciśnięciu przycisku lub jednym obiegu głównej pętli przycisk na stałe miał wartość 1. To chyba z powodu problemu z wyzerowaniem przycisku mam kłopoty z tą sygnalizacją.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sie 2016, o 13:37 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

A ten przycisk podłaczony do pinu PD4, to masz podciągnięty rezystorem zewnętrznym do Vcc? Bo jeśli nie to pojawiają się tam przypadkowe stany i nawet nie przyciskając przycisku możesz mieć tam stan niski.
Myślę, że chciałeś raczej podciągać ten pin programowo, bo wpisujesz jedynkę do portu na samym początku przy konfiguracji portów. Ale popatrz teraz na koniec programu. Wpisujesz do portu D wartość 0 na wszystkich pinach. I tak po pierwszym obiegu pętli while, podciągania wejścia do Vcc już nie ma.
To jest właśnie przykład na to, że dobrze się nauczyć pewnych zasad poprawnego pisania kodu. Jedną z tych zasad jest to, aby nie ustawiać stanów portu przez wpisywanie konkretnej liczby. Powinno się to robić tak aby zmiany jednego czy kilku pinów nie zmieniały pozostałych.
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: 3 sie 2016, o 13:44 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 28 cze 2016
Posty: 13
Lokalizacja: Legnica
Pomógł: 0

Racja. Kilka razy o ty czytałem, oglądałem filmik o maskowaniu bitów, wydawało mi się że mnie to nie spotka. Ale chyba na tym polega nauka. Poprawiłem program , na szybko zaadaptowałem obsługę przycisku i o dziwo działa. Żadnych samoczynnych nie planowanych zmian stanów, i dziwnych zachowań programu. Zamierzam rozszerzyć całość i rozbudować, ale bazę mam już solidną.

Wielkie dzięki za pomoc i sugestie. Jeśli uda mi się domknąć całość wrzucę na forum może się komuś przyda.

Ostateczny działający program:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2016, o 02:54 
Offline
Nowy

Dołączył(a): 13 kwi 2016
Posty: 22
Pomógł: 1

Instrukcje zerujące rejestr licznika TCNT0 z linii 23 oraz 104 możesz śmiało usunąć. Stan tego rejestru po włączeniu zasilania układu oraz po resecie wynosi 0, zaś po przepełnieniu się tego rejestru licznik zaczyna zliczać od zera, gdyż jego pojemność wynosi 8 bitów.

Stosuj makra i/lub typy wyliczeniowe enum, które zwiększą czytelność programu. Obecnie można jedynie zgadywać, które światła sterowane są którymi pinami układu. Staraj się, by wiersze w edytorze nie były dłuższe niż 80 znaków. To również ułatwia czytanie kodu.

Jeden wielki switch w pętli głównej nie jest najszczęśliwszym rozwiązaniem. Owszem, działa, ale z fajnym programem ma niewiele wspólnego. Postaraj się podzielić kod na funkcje, w ten sposób ograniczysz również dublujące się instrukcje.

Pozdrawiam.

PS. Ćwicz, ćwicz... przez ćwiczenia do mistrzostwa. Zaczynałem bardzo podobnie ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sie 2016, o 08:26 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 28 cze 2016
Posty: 13
Lokalizacja: Legnica
Pomógł: 0

Dokładnie puki co pracuje nad programem co niejako jest ćwiczeniem, jak tylko rozbuduje makietę wtedy będę mógł sprawdzić na żyjącym organizmie i wtedy pewne nowe kłopoty wypłyną, czyli nowe wyzwania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 wrz 2016, o 09:02 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

Przyznam się, że ja też zawsze chciałem zrobić model takiego skrzyżowania ze światłami, ale jak zwykle brak czasu. Więc w ramach ćwiczeń w programowaniu napisałem taki program do sterowania sygnalizatorami. Może komuś się to przyda.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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  
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 0 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