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



Teraz jest 24 kwi 2024, o 04:36


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 14 lis 2017, o 00:45 
Offline
Użytkownik

Dołączył(a): 08 cze 2016
Posty: 204
Lokalizacja: Katowice
Pomógł: 0

Na początku chciałbym zaznaczyć że nie ma to być dokładny zegar tylko kolejny etap w mojej nauce teraz do rzeczy zegar działa poprawnie z pomocą na forum więc postanowiłem dodać dwa przyciski jeden do ustawienia godziny drugi minut gdy dodałem pierwszy przycisk ustawienie minut program działa poprawnie kłopoty zaczęły się po dodaniu drugiego przycisku do ustawiania godzin godziny zaczęły odliczać sekundy nie mam pojęcia w czym tkwi problem
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Poz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2017, o 01:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

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


Problem polega na tym, że w pętli głównej wykorzystujesz delay 1000ms czyli jak wciśniesz i będziesz trzymał wciśnięty klawisz godzinowy to zmiana godzin (ustawianie godzin) będzie następowała co 1 sekundę. To samo tyczy się ustawiania minut. Tak czy inaczej, godziny i minuty są ustawiane prawidłowo.
Wyżej napisałem Ci uproszczoną wersję twojego programu, zobacz, że przy takim opóźnieniu 1s nawet nie trzeba się martwić o drgania styków.
Pomyśl nad timerem programowym, który będzie inkrementował sekundy w przerwaniu. Wtedy warto wykorzystać obsługę przycisków taką jak masz w swoim kodzie. Teraz napisałeś w sposób bardzo blokujący, uC nie robi nic przez 1s. Nie tędy droga.

Dodatkowo powołałeś zmienną keylock1, której nigdzie nie używasz w kodzie, a powinieneś w obsłudze drugiego przycisku. Obecnie korzystasz z keylock dla obu.

Powołujesz zmienne, które znajdują się w funkcji int main(void), więc są to zmienne lokalne. Zmienne lokalne muszą być zainicjowane, na przykład uint8_t cy1 = 0;

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


Jak zrobisz clean projektu to zobaczysz ile masz warningów. Staraj się pisać tak, by po cleanowaniu, nie było ani jednego. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2017, o 00:10 
Offline
Użytkownik

Dołączył(a): 08 cze 2016
Posty: 204
Lokalizacja: Katowice
Pomógł: 0

Timery programowe inkrementacja sekund w przerwaniu tylko jak to zrobić przerwanie obsługuje już wyświetlacz led , co się tyczy reszty dzięki za słuszne uwagi pierwsza  keylock1 za pierwszym razem właśnie ta zrobiłem w drugim przycisku ale program nie działał więc zmieniłem na  keylock ale teraz wiem gdzie tkwi błąd  .

Poz



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

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO