This shows you the differences between two versions of the page.
pm:prj2022:cristip:fancydoorlock [2022/06/01 18:58] tprotopopescu |
pm:prj2022:cristip:fancydoorlock [2022/06/01 21:48] (current) tprotopopescu [Download] |
||
---|---|---|---|
Line 48: | Line 48: | ||
===Organizarea codului=== | ===Organizarea codului=== | ||
+ | |||
*Definirea bibliotecilor, valorilor initiale pentru parola si codul de resetare, a pinilor si variabilelor auxiliare folosite. | *Definirea bibliotecilor, valorilor initiale pentru parola si codul de resetare, a pinilor si variabilelor auxiliare folosite. | ||
<code cpp> | <code cpp> | ||
Line 77: | Line 78: | ||
</code> | </code> | ||
- | *Functia de setup, pentru pornirea LCD-ului si a serialei. | + | *Functia setup pentru pornirea LCD-ului si a serialei care va comunica cu modulul Bluetooth. |
<code cpp> | <code cpp> | ||
void setup() { | void setup() { | ||
Line 88: | Line 89: | ||
} | } | ||
</code> | </code> | ||
- | | + | |
- | *Functia loop, care asteapta introducerea parolei, fie din tastatura, fie prin modulul Bluetooth. | + | *Functia loop, care contine cazurile principale ale programului. Mai intai, determina daca parola va fi introdusa de la tastatura sau prin modulul Bluetooth. In functie de aceasta decizie, va efectua citirea parolei introduse prin modul corespunzator. In cazul in care parola introdusa este codul de resetare, se solicita introducerea parolei vechi, iar apoi setarea parolei noi. In cazul in care se introduce o parola corecta, incuietoarea se deschide. |
<code cpp> | <code cpp> | ||
+ | void loop() { | ||
+ | lcd.setCursor(0,0); | ||
+ | lcd.print("Enter pass:"); | ||
+ | |||
+ | int t = 1; | ||
+ | // Se verifica daca se transmite ceva pe seriala | ||
+ | if (Serial.available() > 0) { | ||
+ | t = 0; | ||
+ | } | ||
+ | |||
+ | // Se citeste parola introdusa de la tastatura, sau pe seriala | ||
+ | while(k < 4) { | ||
+ | if (!t) { | ||
+ | data[k] = Serial.read(); | ||
+ | } else { | ||
+ | data[k] = myKeypad.waitForKey(); | ||
+ | } | ||
+ | if(data[k]) { | ||
+ | lcd.setCursor(k,1); | ||
+ | lcd.print(data[k]); | ||
+ | delay(500); | ||
+ | k++; | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | z = 1; | ||
+ | while(z) { | ||
+ | // Se asteapta tasta '#' pentru confirmarea parolei | ||
+ | if (t) { | ||
+ | confirmButton = myKeypad.waitForKey(); | ||
+ | } else { | ||
+ | confirmButton = Serial.read(); | ||
+ | } | ||
+ | if(confirmButton == '#') { | ||
+ | z = 0; | ||
+ | // Daca parola este corecta | ||
+ | if(strncmp(data, password, 4) == 0) { | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0,0); | ||
+ | lcd.print("Correct pass"); | ||
+ | digitalWrite(LOCK, HIGH); | ||
+ | delay(3000); | ||
+ | digitalWrite(LOCK, LOW); | ||
+ | |||
+ | // Daca s-a introdus codul de resetare | ||
+ | } else if(strncmp(data, resetCode, 4) == 0){ | ||
+ | clearData(); | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0, 0); | ||
+ | lcd.print("Enter old pass:"); | ||
+ | while (k < 4) { | ||
+ | data[k] = myKeypad.waitForKey(); | ||
+ | if(data[k]) { | ||
+ | lcd.setCursor(k,1); | ||
+ | lcd.print(data[k]); | ||
+ | delay(500); | ||
+ | k++; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Daca parola veche introdusa este corecta | ||
+ | if (strncmp(data, password, 4) == 0) { | ||
+ | clearPassword(); | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0, 0); | ||
+ | lcd.print("Enter new pass:"); | ||
+ | while(k < 4) { | ||
+ | password[k] = myKeypad.waitForKey(); | ||
+ | if(password[k]) { | ||
+ | lcd.setCursor(k,1); | ||
+ | lcd.print(password[k]); | ||
+ | delay(500); | ||
+ | k++; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Daca parola veche introdusa este gresita | ||
+ | } else { | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0, 0); | ||
+ | lcd.print("Wrong old pass:"); | ||
+ | delay(1000); | ||
+ | } | ||
+ | |||
+ | // Daca parola initiala introdusa este gresita | ||
+ | } else { | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0,0); | ||
+ | lcd.print("Incorrect pass"); | ||
+ | delay(3000); | ||
+ | } | ||
+ | |||
+ | // Daca se introduce din greseala alta tasta in afara de # | ||
+ | } else { | ||
+ | lcd.clear(); | ||
+ | lcd.print("Press #"); | ||
+ | delay(1000); | ||
+ | } | ||
+ | clearData(); | ||
+ | } | ||
+ | | ||
+ | lcd.clear(); | ||
+ | } | ||
</code> | </code> | ||
- | *Functii auxiliare, clearData care elibereaza vectorul ce contine parola introdusa, si clearPassword, care elibereaza vectorul ce contine parola actuala a sistemului, in momentul in care se doreste resetarea parolei. | + | * Functii auxiliare, clearData (elibereaza vectorul in care se salveaza parola introdusa) si clearPassword (elibereaza vectorul in care este salvata parola sistemului, pentru a permite resetarea acesteia). |
<code cpp> | <code cpp> | ||
void clearData() { | void clearData() { | ||
Line 114: | Line 218: | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | In urma proiectului, am obtinut o macheta cu tastatura si afisajul LCD, cu o mica usa ce se va putea deschide la deblocarea incuietorii, care functioneaza conform ciclului descris mai sus. |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | A fost un proiect interesant, aplicat, in care am simtit ca am pus la folosinta conceptele si tehnicile dobandite in cadrul laboratoarelor, dar am avut parte si de experiente noi, utilizand anumite module unice. | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | ||
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | {{:pm:prj2022:cristip:332CB_Protopopescu_Theodor_Fancy_Door_Lock.zip|}} |
- | </note> | + | |
- | ===== Jurnal ===== | ||
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | - https://www.arduino.cc/reference/en/libraries/keypad/ |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | - https://www.arduino.cc/reference/en/libraries/liquidcrystal-i2c/ |
- | </note> | + | - https://howtomechatronics.com/tutorials/arduino/arduino-and-hc-05-bluetooth-module-tutorial/ |
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> |