Navers Napisano Czerwiec 16, 2021 Udostępnij Napisano Czerwiec 16, 2021 (edytowany) Dzień dobry, Chciałem przetestować działanie systemu blokującego zamek do drzwi . Projekt posiada wyświetlacz LCD , klawiaturę,myservo,a całość jest sterowana na pomocą arduino . Analizując kod nie mogę zrozumieć jednej rzeczy , a mianowicie - dlaczego tablica znaków, która przechowuje hasło musi być o 1 większa ? Gdzieś wyczytałem, że jest to określona liczba miejsc na wprowadzone znaki z klawiatury + 1 extra dla wartości 0 . Czy ta wartość 0 to wartość kursora na wyświetlaczu LCD, która nie może być później porównywana z wprowadzonym hasłem ? Będę bardzo wdzięczny jeśli ktoś mi to wytłumaczy. Poniżej wklejam kod : #include <Keypad.h> #include <LiquidCrystal.h> #include <Servo.h> Servo myservo; LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); #define dlugoschasla 7 int pozycja ; char rozmiarhasla[dlugoschasla]; char prawidlowe_haslo[dlugoschasla] = "111111"; byte wpis =0; char klawisz ; const byte ROWS = 4; const byte COLS = 4; char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; bool zamek = 1 ; byte rowPins[ROWS] = {14, 15, 16, 17}; byte colPins[COLS] = {18, 19, 20, 21}; Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup() { myservo.attach(A8); ZamekZamykanie(); lcd.begin(16, 2); lcd.print(" Zamek do drzwi"); lcd.setCursor(0, 1); lcd.print("Projekt"); delay(3000); lcd.clear(); } void loop() { if (zamek == 0) { klawisz= klawiatura.getKey(); if (klawisz== '#') { lcd.clear(); ZamekZamykanie(); lcd.print("Drzwi zamkniete"); delay(3000); zamek = 1; } } else DrzwiOtwieranie(); } void ZerowanieWartosci() { while (wpis != 0) { rozmiarhasla[wpis--] = 0; } return; } void ZamekOtwieranie() { for (pozycja = 180; pozycja >= 0; pozycja -= 5) { myservo.write(pozycja); delay(15); } } void ZamekZamykanie() { for (pozycja = 0; pozycja <= 180; pozycja+= 5) { myservo.write(pozycja); delay(15); } } void DrzwiOtwieranie() { lcd.setCursor(0, 0); lcd.print(" Podaj Haslo"); klawisz = klawiatura.getKey(); if (klawisz) { rozmiarhasla[wpis] = klawisz; lcd.setCursor(wpis, 1); lcd.print(rozmiarhasla[wpis]); wpis++; } if (wpis == dlugoschasla - 1) { if (strcmp(rozmiarhasla, prawidlowe_haslo)==0) { lcd.clear(); ZamekOtwieranie(); lcd.print("Drzwi otwarte"); zamek = 0; } else { lcd.clear(); lcd.print(" Zle haslo"); delay(1000); zamek= 1; } ZerowanieWartosci(); } } Edytowano Czerwiec 17, 2021 przez Navers Cytuj Link do komentarza Share on other sites More sharing options...
deshipu Czerwiec 16, 2021 Udostępnij Czerwiec 16, 2021 To jest taka konwencja w języku C, żeby wiedzieć jak długi jest napis — zawsze się go kończy zerem, w ten sposób kod który kopiuje albo porównuje napisy wie kiedy ma skończyć. 2 Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Czerwiec 16, 2021 Udostępnij Czerwiec 16, 2021 (edytowany) 17 minut temu, Navers napisał: - dlaczego tablica znaków, która przechowuje hasło musi być o 1 większa Bo w jakiś sposób trzeba zapisać długość napisu siedzącego w tablicy. Znak o kodzie 0 oznacza po prostu "tu napis się kończy", ale gdzieś go trzeba zmieścić. Dlatego właśnie n-znakowy napis zajmuje n+1 bajtów. @deshipu szybszy byłeś 🙂 Edytowano Czerwiec 16, 2021 przez ethanak 2 Cytuj Link do komentarza Share on other sites More sharing options...
Navers Czerwiec 17, 2021 Autor tematu Udostępnij Czerwiec 17, 2021 Bardzo dziękuje za pomoc 😉 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!