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



Teraz jest 30 mar 2026, o 19:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
 Tytuł: Zamek na hasło
PostNapisane: 8 paź 2014, o 09:58 
Offline
Użytkownik

Dołączył(a): 23 mar 2014
Posty: 38
Pomógł: 0

Ostatnio zmagam się z problemem kodu, który będzie porównywał naciśnięte przyciski z tablicą.

Otwarcie zamku ma początkowo symbolizować zapalona dioda. Do programu wykorzystuję klawiaturę analogową z racji tego, że potrzebuje mieć do dyspozycji większą liczbę portów do czego innego.

Identyfikacja przycisków i tablica kodu wygląda następująco:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Rozumiem, że do porównania najlepiej trzeba użyć pętli for, która to będzie za każdym razem porównywać wciśnięty przycisk z tablicą. Jednak to nie za bardzo się tu sprawdza.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

jednak pętla zapali diode po naciśnięciu 2 lub 5 lub 9. Rozumiem, że brakuje mi jakiegoś znaku, który dopiero po wcisnieciu przycisku pozwalał by na rozruch pętli i przyrównywanie. Czy może ktoś jakoś na to pomóc, nakierować?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 paź 2014, o 10:15 
Offline
Użytkownik
Avatar użytkownika

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

Kolego jak na moje oko to mało kodu dałeś więc nie mogę pomóc.

Ale ale doradzić zawsze mogę.

Powiedzmy że kod ma 6 cyfr dołożyłbym zmienną która liczyła by od 0 do 6 ... dlaczego ma liczyć wciśnięć klawisza ? A no dlatego że wbojamy

123456 cyfr i na końcu zatwierdzamy # i tutaj odpowiednio zmienna biegnie ...
012345 zmiennych i na końcu mamy 6 zmienną i po osiągnięciu zmienna = 6 dopiero porównywałbym czy cyfry się zgadzają z tymi zapisanymi w pamięci eeprom

Ta linijka jest zbędna:
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 jeszcze to:

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


tutaj i jest numerem obiegu pętli for więc led zapali się zawsze i to od samego początku obiegu pętli.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 paź 2014, o 16:12 
Offline
Użytkownik

Dołączył(a): 23 mar 2014
Posty: 38
Pomógł: 0

Nic dobrego nie przychodzi mi do głowy, jakby to poprawnie rozwiązać

Próbowałem z funkcją strcmp jednak ona porównuje stringi a nie pojedyncze znaki w tabeli. Wstawiając nową zmienną która liczy ile przycisków użyłem mogę wrzucić w pętle, ale zwiększy mi to tylko raz argument.

W funkcji warunkowej if mogę porównywać tylko jeden argument z tablicy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 paź 2014, o 16:32 
Offline
Użytkownik
Avatar użytkownika

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

Kolego ale tak jak pisałem wyżej bez twojego kodu mało co pomogę ... więc tylko podpowiadam jak wyżej.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 paź 2014, o 17:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

To jak tak na dziko wskocze z NIETESTOWANYM pomyslem

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


A cos takiego ? Robisz sobie ADC a nastepnie masz tablice war z wartosciami ADC dla klawiszy. Pozniej masz klaw_war ktora ma odpowiednio wartosci char dla klawiszy.
Nastepnie entered czyli to co zostaje wprowadzone. I docelowo unlock czyli to co ma byc wprowadzone jako kod zabezpieczajacy

Po przejsciu przez tablice wartosci mozesz porownac entered oraz unlock i jesli sa takie same to cos robisz a jak nie to robisz cos innego ?!

Jesli kod zawiera jakis blad ... sory ale nie mialem czasu wrzucic na ATB :/

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 paź 2014, o 21:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 164
Pomógł: 3

Witam

Na moje oko musisz mieć co najmniej dwie pętle for.

Pierwsza - zapis klawiszy do tablicy. Druga - porównanie i dopiero wynik.

Jak pomysł Ci podejdzie to coś skrobnę.

Pomysł z ADC dobry, ale może da się to zrobić łatwiej.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2014, o 12:00 
Offline
Użytkownik

Dołączył(a): 23 mar 2014
Posty: 38
Pomógł: 0

Zasugerowałem się zrobieniem dwóch pętli, jednak teraz jeżeli nadusimy obojętnie który przycisk z tablicy haslo zapali nam się dioda, kolejność wciskania też może być obojętna.

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

Na pewno kod który tu napisałem jest zbyt posty żeby to mogło zadziałać w dany sposób. Domyślam się że brakuje to jakieś zmiennej, która mogła by trzymać w pamięci kolejne porównania przycisków. Kombinowałem, żeby program sprawdzał czy przypisany przycisk do tab[j] równał się z wartością w tablicy haslo[]

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jedank w tym przypadku pętla zapamiętuje zmienną tylko raz x,y lub z.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2014, o 12:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

fotograf9 napisał(a):
Zasugerowałem się zrobieniem dwóch pętli,


A moglbys pokazac caly kod ? Byloby na pewno latwiej cos Ci podpowiedziec :D

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2014, o 12:51 
Offline
Użytkownik

Dołączył(a): 23 mar 2014
Posty: 38
Pomógł: 0

Definicja zmiennych:

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



A tu główny program, nie przesyłam bibliotek UARTA i ADC bo w tym przypadku są kompletnie zbędne.

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

Jak w gram te program to zaświeca diodę jeżeli wciśniemy po prostu te trzy cyfyr obojetnie w jakiej kolejności i obojętnie czy naciśniemy w trakcie inny przycisk



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 paź 2014, o 13:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lut 2014
Posty: 101
Pomógł: 4

Cześć, ja miałem podobny problem przy zamku na RFID ,gdzie zapisywałem znaki kolejno do tablicy i porównywałem ze wzorcem.
Udało się rozwiązać i pięknie działa.

Tu co prawda wklepujesz cyfry ręcznie ,ale sama idea porównywania tablic może ci się przyda.

forum.atnel.pl/topic8255.html?hilit=zamek%20rfid


Autor postu otrzymał pochwałę

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 paź 2014, o 10:27 
Offline
Użytkownik

Dołączył(a): 23 mar 2014
Posty: 38
Pomógł: 0

Powalczyłem troche z tym przez sobotę i udało się. Oczywiście trzeba jeszcze kod nieco doszlifować, żeby wszystko zachowywało się tak jak potrzeba ale na tę chwilę porównanie tablic działa poprawnie i zapala diode. Poniżej fragment dotyczący samego porównywania i zapalania diody.

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



Trzeba dorobić teraz kiedy ma się kasować i dać przycisk do potwierdzenia i kasowania wpisanego hasla.



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