This shows you the differences between two versions of the page.
|
pm:prj2023:vstoica:fire_alarm [2023/05/28 23:54] tudor.selea [Software Design] |
pm:prj2023:vstoica:fire_alarm [2023/05/29 19:06] (current) tudor.selea [Software Design] |
||
|---|---|---|---|
| Line 40: | Line 40: | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | Implementarea software a proiectului poate fi reprezentata prin urmatoarea diagrama de stari: | ||
| + | |||
| + | {{:pm:prj2023:vstoica:diagrama_de_stari_-_pm.drawio.png?700|}} | ||
| <note tip> | <note tip> | ||
| Line 246: | Line 249: | ||
| </code> | </code> | ||
| + | Daca nu exista conectivitate cu prima placuta Arduino, nu pot fi citite date pe portul serial. | ||
| + | |||
| + | Daca exista conectivate, se va citi semnalul de alarma trimis de catre prima placuta Arduino in "alarm_trigger". Daca acesta este 1, alarma a fost declansata, astfel ca poate fi introdus codul pentru dezactivarea acesteia. Fiecare tasta apasata de utilizator va fi retinuta in variabila "customKey" si va fi adaugata in array-ul "password", care reprezinta parola introdusa de utilizator. Daca dimensiunea parolei introduse de utilizator este egala cu dimensiunea parolei corecte, se vor compara cele 2 parole. In caz de egalitate (utilizatorul a introdus parola corecta), prima placuta Arduino va fi instiintata de catre a doua placuta Arduino (placuta curenta), ca poate sa dezactiveze alarma, iar keypad-ul va fi dezactivat pana la urmatoarea declansarea a alarmei. In caz contrar, se va reincerca introducerea parolei corecte. | ||
| + | <code c> | ||
| + | void loop(){ | ||
| + | |||
| + | // Daca nu exista conectivitate cu prima placuta Arduino | ||
| + | // nu pot fi citite date pe portul serial | ||
| + | if (Serial.available()) { | ||
| + | Serial.print("In serial loop..."); | ||
| + | Serial.println(); | ||
| + | |||
| + | // Variabila care semnaleaza declansarea alarmei | ||
| + | alarm_trigger = Serial.read(); | ||
| + | | ||
| + | if (alarm_trigger == 1) { | ||
| + | Serial.print("Alarm triggered..."); | ||
| + | Serial.println(); | ||
| + | |||
| + | // Daca alarma a fost declansata, se va incerca | ||
| + | // introducerea parolei pana cand este cea corecta | ||
| + | while(1) { | ||
| + | |||
| + | // Tasta apasata de utilizator va fi intoarsa in | ||
| + | // variabila "customKey" | ||
| + | char customKey = customKeypad.getKey(); | ||
| + | |||
| + | if(customKey){ | ||
| + | | ||
| + | // Caracterul corespunzator tastei apasate de | ||
| + | // utilizator va fi adaugat in parola introdusa | ||
| + | // de utilizator | ||
| + | password[count]=customKey; | ||
| + | Serial.print(password[count]); | ||
| + | count++; | ||
| + | } | ||
| + | |||
| + | // In momentul in care lungimea parolei introduse | ||
| + | // de utilizator este egala cu lungimea parolei | ||
| + | // corecte, se va verifica daca parola introdusa | ||
| + | // de utilizator este corecta | ||
| + | if(count == PASSWORD_LENGTH - 1){ | ||
| + | Serial.println(" "); | ||
| + | |||
| + | if(strcmp(password,correct_password) == 0){ | ||
| + | |||
| + | // Dupa verificarea parolei introduse de | ||
| + | // utilizator, aceasta va fi stearsa si pregatita | ||
| + | // pentru reintroducerea parolei, cand va fi cazul | ||
| + | while(count !=0) { | ||
| + | password[count]=0; | ||
| + | count--; | ||
| + | } | ||
| + | |||
| + | // Daca parola introdusa de utilizator este corecta, | ||
| + | // prima placuta Arduino va fi instiintata de catre | ||
| + | // a doua placuta Arduino (placuta curenta), ca poate | ||
| + | // sa dezactiveze alarma | ||
| + | Serial.println("Correct"); | ||
| + | alarm_trigger = 0; | ||
| + | Serial.write(alarm_trigger); | ||
| + | break; | ||
| + | |||
| + | } else{ | ||
| + | |||
| + | // Daca parola introdusa de utilizator este incorecta, | ||
| + | // se va reincerca introducerea parolei | ||
| + | Serial.println("Incorrect"); | ||
| + | alarm_trigger = 1; | ||
| + | } | ||
| + | |||
| + | while(count !=0){ | ||
| + | password[count]=0; | ||
| + | count--; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | <note> | ||
| + | Dupa introducerea unei parole de catre utilizator, aceasta va fi stearsa! | ||
| + | </note> | ||
| + | |||
| + | |||
| + | ===== Rezultate obtinute ===== | ||
| + | {{:pm:prj2023:vstoica:poza_pm1.jpg?700|}}\\ | ||
| + | {{:pm:prj2023:vstoica:poza_pm4_1.jpg?700|}}\\ | ||
| + | {{:pm:prj2023:vstoica:poza_pm3.jpg?700|}}\\ | ||
| + | {{:pm:prj2023:vstoica:poza_pm2.jpg?700|}}\\ | ||
| + | |||
| + | ===== Concluzii ===== | ||
| + | |||
| + | Mi-a placut sa lucrez la acest proiect intrucat am putut sa pun in practica notiunile invatate la laboratoare pentru a realiza un lucru cu aplicatie in viata. Mi-a placut, in special, sa lucrez cu componentele proiectului si sa observ cum se leaga si cum comunica intre ele. | ||
| + | |||
| + | ===== Download ===== | ||
| + | {{:pm:prj2023:vstoica:selea_tudor_octavian_-_332ca_-_proiect_pm.zip|}} | ||
| + | |||
| + | ===== Resurse ===== | ||
| + | * https://ocw.cs.pub.ro/courses/pm/lab/lab4-2022 | ||
| + | * https://ocw.cs.pub.ro/courses/pm/lab/lab1-2022 | ||
| + | * https://ocw.cs.pub.ro/courses/pm/lab/lab6-2022 | ||
| + | * https://www.youtube.com/watch?v=sPhcOm3FdOQ&t=254s&ab_channel=DomingoMartinez | ||
| + | * https://linuxhint.com/serial-uart-communication-between-two-arduino/ | ||
| + | * Proiect AD - Selea Tudor-Octavian (vezi sectiunea Downloads) | ||