Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2022:cristip:deadlinesalarm [2022/05/29 14:49]
cosmin.culea [Logica implementarii]
pm:prj2022:cristip:deadlinesalarm [2022/06/01 16:59] (current)
cosmin.culea [Concluzii]
Line 1: Line 1:
-====== 💤 Deadlines Alarm Clock 💤 ======+====== 💤 Deadlines Alarm Clock 💤 - Culea Cosmin - 331CA ======
  
-   Culea Cosmin 331CA 
 ===== Introducere ===== ===== Introducere =====
  
Line 42: Line 41:
  
 Codul este organizat in mai multe fisiere .cpp, fiecare cu headerul aferent: Codul este organizat in mai multe fisiere .cpp, fiecare cu headerul aferent:
-  * utils.cpp ​utils.h contin define-urile pentru maparea pinilor si multe altele ajutatoare, majoritatea structurilor de date folosite pentru stocarea deadline-urilor,​ numele materiilor, flaguri de intarziere pentru momentele cand senzorul nu detecteaza miscare, lcd, rtc, dar si array-uri constante de mapare ​ numarul lunii  -> numele acesteia, numarul zilei din saptamana -> numele zilei din saptamana, numarul lunii -> numarul de zile a lunii respective  ​+  ​* **utils.cpp/utils.h** contin define-urile pentru maparea pinilor si multe altele ajutatoare, majoritatea structurilor de date folosite pentru stocarea deadline-urilor,​ numele materiilor, flaguri de intarziere pentru momentele cand senzorul nu detecteaza miscare, lcd, rtc, dar si array-uri constante de mapare ​ numarul lunii  -> numele acesteia, numarul zilei din saptamana -> numele zilei din saptamana, numarul lunii -> numarul de zile a lunii respective  ​
  
 <code c> <code c>
 +/* Face deep copy pe cele doua structuri (din source in destination) */
 +int copy_dt(Ds1302::​DateTime *destination,​ Ds1302::​DateTime *source);
 +
 /* Functie care invalideaza data primita, dandu-i valori invalide pentru fiecare camp. */  /* Functie care invalideaza data primita, dandu-i valori invalide pentru fiecare camp. */ 
 int invalid_dt(Ds1302::​DateTime *dt); int invalid_dt(Ds1302::​DateTime *dt);
Line 58: Line 60:
  
 /* Functie care primeste 2 date, si verifica dt1 == dt2 || dt1 + o zi == dt2 || dt1 + 2 zile == dt2  /* Functie care primeste 2 date, si verifica dt1 == dt2 || dt1 + o zi == dt2 || dt1 + 2 zile == dt2 
- * || dt1 + 3 zile == dt si intoarce un define corespunzator in functie de cum ar trebui sa sune alarma + * || dt1 + 3 zile == dt si intoarce un define corespunzator in functie de cum ar trebui sa sune  
- * sau nu (NOT_NOW, NOW, ONE_DAY, TWO_DAYS, THREE_DAYS).+ ​* ​alarma ​sau nu (NOT_NOW, NOW, ONE_DAY, TWO_DAYS, THREE_DAYS).
  */  */
 int is_deadline_due(Ds1302::​DateTime &dt1, Ds1302::​DateTime &dt2); int is_deadline_due(Ds1302::​DateTime &dt1, Ds1302::​DateTime &dt2);
 </​code>​ </​code>​
  
-  * introuduce_to_lcd.cpp introduce_to_lcd.h contin functii care permit interfatarea cu lcd-ul pentru introducerea fiecarui camp dintr-o structura de tip date si numele materiei. Parametrul next_op este folosit pentru stocarea urmatoarei operatii care trebuie realizata dupa operatia curenta in functie de ce buton a fost apasat, pentru a fi mai departe procesata de functia introduce_date_to_lcd. Valori posibile pentru next_op sunt NEXT_YEAR, NEXT_MONTH, NEXT_DAY, NEXT_HOUR, NEXT_MINUTES,​ NEXT_SECONDS,​ NEXT_SELECT.+  * **introduce_to_lcd.cpp/introduce_to_lcd.h** contin functii care permit interfatarea cu lcd-ul pentru introducerea fiecarui camp dintr-o structura de tip date si numele materiei. Parametrul next_op este folosit pentru stocarea urmatoarei operatii care trebuie realizata dupa operatia curenta in functie de ce buton a fost apasat, pentru a fi mai departe procesata de functia introduce_date_to_lcd. Valori posibile pentru next_op sunt NEXT_YEAR, NEXT_MONTH, NEXT_DAY, NEXT_HOUR, NEXT_MINUTES,​ NEXT_SECONDS,​ NEXT_SELECT.
  
 <code c> <code c>
Line 84: Line 86:
 </​code>​ </​code>​
  
-  * commands.cpp ​command.h contin functiile cu implementarea pentru afisare a meniului, dar si de interfatare a utilizatorului cu meniul prin intermediului lcd-ului (se foloseste de asemenea de functiile din introduce_to_lcd.h).+  ​* **commands.cpp/command.h** contin functiile cu implementarea pentru afisare a meniului, dar si de interfatare a utilizatorului cu meniul prin intermediului lcd-ului (se foloseste de asemenea de functiile din introduce_to_lcd.h).
  
 <code c> <code c>
Line 119: Line 121:
  
 /* Functie care afiseaza meniul cu comenzile ADD si LIST si asteapta input din partea utilizatorului. /* Functie care afiseaza meniul cu comenzile ADD si LIST si asteapta input din partea utilizatorului.
- * Prin apasarea butonul NEXT se apeleaza functia list(), iar prin apasarea butonului PREV se apeleaza + * Prin apasarea butonul NEXT se apeleaza functia list(), iar prin apasarea butonului PREV se  
- * functia add(). Se iese din functie la apasarea butonului MENU.+ ​* ​apeleaza ​functia add(). Se iese din functie la apasarea butonului MENU.
  */  */
 void display_menu();​ void display_menu();​
 </​code>​ </​code>​
  
-  * song.cpp ​song.h contin functia de activare a alarmei. Contine de asemenea si 2 array-uri care contin frecventele si duratele notelor. Pentru generarea melodiei am downloadat fisierul .mid [[https://​musescore.com/​user/​35272338/​scores/​6415296|de aici]] si am convertit fisierul in cod arduino prin aplicatia [[https://​arduinomidi.netlify.app/​|asta]]. Valorile frecventelor si ale duratelor le-am extras cu un script creat de mine.+  ​* **song.cpp/song.h** contin functia de activare a alarmei. Contine de asemenea si 2 array-uri care contin frecventele si duratele notelor. Pentru generarea melodiei am downloadat fisierul .mid [[https://​musescore.com/​user/​35272338/​scores/​6415296|de aici]] si am convertit fisierul in cod arduino prin aplicatia [[https://​arduinomidi.netlify.app/​|asta]]. Valorile frecventelor si ale duratelor le-am extras cu un script creat de mine.
  
 <code c> <code c>
Line 139: Line 141:
 ==== Logica implementarii ==== ==== Logica implementarii ====
  
-  ​*  Functia de setup initializeaza pinii butoanelor, al buzerului si senzorului. De asemenea, initializeaza structura specifica RTC-ului, si celelalte structuri pentru stocarea deadlinepurilor. De asemenea, codul comentat din cadrul functiei se poate decomenta pentru a reinitializa valorile de data si ora din modulul RTC, prin introducerea interactiva cu ajutorul LCD-ului.+Logica implementarii se afla in fisierul **deadlines_alarm.ino** care contin functiile **setup()**,​ **loop()** si includ toate fisierele header anterior mentionate. 
 + 
 +  ​*  Functia de **setup()** initializeaza pinii butoanelor, al buzerului si senzorului. De asemenea, initializeaza structura specifica RTC-ului, si celelalte structuri pentru stocarea deadlinepurilor. De asemenea, codul comentat din cadrul functiei se poate decomenta pentru a reinitializa valorile de data si ora din modulul RTC, prin introducerea interactiva cu ajutorul LCD-ului.
  
 <code c> <code c>
Line 170: Line 174:
 </​code>​ </​code>​
  
-  *  In cadrul functiei loop, se va afisa de fiecare data data si ora curenta extrasa din RTC intr-un mod eficient (se face comparatia cu valorile datei si orei extrase anterior si se va modifica pe LCD doar campul care este diferit). Acest lucru este necesar pentru a putea creste vizibilitatea pe LCD, intrucat am observat ca daca afisez de fiecare data toate campurile, LCD-ul va avea un comportament ciudat. Mai apoi se itereaza prin toate deadline-urile stocate, iar daca sensorul detecteaza miscare si starea deadline-ului indica sunarea alarmei sau alarma a fost amanata, atunci se va apela functia corespunzatoare de sunare a alarmei. Daca sensorul insa nu detecteaza miscare si starea deadline-ului indica sunarea alarmei atunci starea sa va fi stocata in array-ul de flaguri. Dupa ce se proceseaza toate deadline-urile,​ se verifica si starea butonului de MENU si se apeleaza in cazul in care este activata aceasta functionalitate functia diplay_menu care se ocupa mai departe de toate functionalitatile puse la dispozitie de commands.cpp si commands.h.+  *  In cadrul functiei ​**loop()**, se va afisa de fiecare data data si ora curenta extrasa din RTC intr-un mod eficient (se face comparatia cu valorile datei si orei extrase anterior si se va modifica pe LCD doar campul care este diferit). Acest lucru este necesar pentru a putea creste vizibilitatea pe LCD, intrucat am observat ca daca afisez de fiecare data toate campurile, LCD-ul va avea un comportament ciudat. Mai apoi se itereaza prin toate deadline-urile stocate, iar daca sensorul detecteaza miscare si starea deadline-ului indica sunarea alarmei sau alarma a fost amanata, atunci se va apela functia corespunzatoare de sunare a alarmei. Daca sensorul insa nu detecteaza miscare si starea deadline-ului indica sunarea alarmei atunci starea sa va fi stocata in array-ul de flaguri. Dupa ce se proceseaza toate deadline-urile,​ se verifica si starea butonului de MENU si se apeleaza in cazul in care este activata aceasta functionalitate functia diplay_menu care se ocupa mai departe de toate functionalitatile puse la dispozitie de commands.cpp si commands.h.
 <code c> <code c>
 void loop() { void loop() {
Line 252: Line 256:
   * Arduino IDE   * Arduino IDE
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
 +Proiectul final contine toate functionalitatile mentionate in descriere. Pentru mai multe detalii despre cum se poate folosi puteti accesa sectiunea Videos de [[https://​drive.google.com/​drive/​folders/​152E0j7yRZQvhC2hqWntqw_iniHv0Y3KW?​usp=sharing|aici]]. \\
 +{{:​pm:​prj2022:​cristip:​cc-photo1.jpeg?​600x800|}}
  
-<note tip> +{{:​pm:​prj2022:​cristip:​cc-photo2.jpeg?​800x600|}} 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+ 
-</​note>​+{{:​pm:​prj2022:​cristip:​cc-photo3.jpeg?​800x600|}}
  
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+Desi la inceput am fost foarte speriat de acest proiect, intrucat nu aveam experienta mai deloc sa lucrez cu componente hardware (in afara laboratoarelor de pm), nu stiam cat de mult timp ar lua sa il finalizez si nu stiam la ce probleme ar trebui sa ma astept, pot spune ca a fost o experienta foarte placuta. Totul a fost mai greu pana mi-au venit piesele, tocmai pentru ca nu stiam la ce sa ma astept. Apoi am incercat usor usor sa pun toate pisele cap la cap, sa le testez, sa caut tutoriale pe youtube si am realizat cat de multe resurse utile exista. \\
  
-<note warning>​ +Implementarea software mi-a placut cel mai multdar a fost si destul de challengingintrucat desi poate nu pare foarte complicata ideea proiectului in sine, a fost destul de dificil si extrem de mult cod de scris ca sa pot implementa toate functionalitatile asa cum mi le doreamAm avut parte de foarte multe buguri evidentmai ales la implementarea logicii butoanelor, pe care am reusit sa le rezolv pe parcurs prin testarea continua (+ printf-uri cat cuprinde pe interfata seriala ^_^ ). \\
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surseschemeetcUn fişier READMEun ChangeLogun 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 Alin331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +Din punct de vedere hardware, spre bucuria mea, nu am intampinat foarte multe dificultati,​ asa cum am zis am gasit foarte multe materiale ​care m-au ajutat sa inteleg principiile ​de functionare ale componentelor. Singurul meu regret ​este ca nu mi-am cumparat un buzzer sau un difuzor mai performant, intrucat nu sunt destul de multumit de cum se audea alarmaAm incercat sa convertesc niste melodiidar nu se aud asa cum m-as fi asteptat.
-</​note>​+
  
 +====== Download =====
 +
 +
 +Arhiva cu fisierele sursa .cpp .h si .ino se pot gasi {{:​pm:​prj2022:​cristip:​deadlines_alarm.zip| aici}}.
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +  *     ​**10.05.2022** Alegere tema proiect 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +  ​* ​    ​**15.05.2022** Milestone 1: Introducere,​ Descriere, Schema Bloc și Componente 
-</​note>​+  *     ​**29.05.2022** Milestone 2: Schema electrică, Software Design, Rezultatele Obținute, Arhivă 
 + 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +  * https://​github.com/​Treboada/​Ds1302 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  * https://​www.robofun.ro/​componente/​mini-difuzor-brick.html 
-</note>+  ​https://​electropeak.com/​learn/​interfacing-ds1302-real-time-clock-rtc-module-with-arduino/​ 
 +  * https://​www.youtube.com/​watch?​v=FxaTDvs34mM 
  
 <​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>​
  
  
pm/prj2022/cristip/deadlinesalarm.1653824958.txt.gz · Last modified: 2022/05/29 14:49 by cosmin.culea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0