Differences

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

Link to this comparison view

pm:prj2024:vstoica:miruna.coman1311 [2024/05/04 13:14]
miruna.coman1311
pm:prj2024:vstoica:miruna.coman1311 [2024/05/26 22:54] (current)
miruna.coman1311 [Software Design]
Line 55: Line 55:
 {{:​pm:​prj2024:​vstoica:​diagrama_pm_proiect.png?​500|}} {{:​pm:​prj2024:​vstoica:​diagrama_pm_proiect.png?​500|}}
  
 +
 +
 +In prima faza am construit ceva de testare, din cauza ca am avut si o problema cu LCD-ul si imi doream mult sa fac ceva cat mai rapid si functional asa ca am facut un simplu AudioPlayer,​ pana am ajuns la forma finala:
 +
 +{{:​pm:​prj2024:​vstoica:​poza_intermediara.jpeg?​300|}}
  
  
Line 62: Line 67:
  
 <note tip> <note tip>
-Descrierea codului aplicaţiei (firmware)+Prezentarea stadiului actual al implementării software
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) +Codul actual implementează un sistem ​de control pentru un modul DFPlayer Mini prin intermediul unui ArduinoAcesta include:
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) +
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  * (etapa 3) surse şi funcţii implementate +
-</​note>​+
  
-===== Rezultate Obţinute =====+  * Inițializarea și configurarea unui display LCD I2C pentru afișarea informațiilor despre piesa curentă și volum. 
 +  * Configurarea și utilizarea unui SoftwareSerial pentru comunicarea cu DFPlayer Mini. 
 +  * Configurarea întreruperilor externe și a întreruperilor pe schimbarea pinilor pentru a detecta apăsările butoanelor de control (Previous, Pause, Start, Next). 
 +  * Citirea și afișarea volumului pe baza unui potențiometru conectat la pinul analogic A0.
  
-<note tip> +Motivarea alegerii bibliotecilor folosite in cadrul ​proiectului:
-Care au fost rezultatele obţinute în urma realizării ​proiectului ​vostru. +
-</​note>​+
  
-===== Concluzii =====+  * SoftwareSerial:​ Aceasta biblioteca este utilizata pentru a crea o a doua conexiune seriala software pe pini digitali (RX si TX) pentru a comunica cu DFPlayer Mini. Este esentiala deoarece majoritatea placilor Arduino au doar un port serial hardware, iar acest port este folosit de obicei pentru comunicarea cu computerul.
  
-===== Download =====+  * DFRobotDFPlayerMini:​ Aceasta biblioteca ofera functii specifice pentru controlul DFPlayer Mini, facilitand comenzile pentru redarea, pauzarea si schimbarea pieselor, precum si ajustarea volumului. Este special conceputa pentru acest modul audio, simplificand integrarea si utilizarea acestuia.
  
-<note warning>​ +  * LiquidCrystal_I2C:​ Biblioteca pentru controlul unui display LCD cu interfata I2C. Este folosita pentru a afisa informatiile necesare utilizatorului intr-un mod usor de citit, reducand numarul de pini necesari pentru conectarea unui display LCD standard. 
-O arhivă (sau mai multe dacă este cazul) ​cu fişierele obţinute în urma realizării ​proiectului: ​surseschemeetcUn fişier README, ​un ChangeLogun script ​de compilare şi copiere automată ​pe uC crează întotdeauna o impresie bună ;-).+ 
 +Explicatii legate de scheletul ​proiectului ​si interactiunea dintre functionalitati: 
 + 
 +Scheletul proiectului:​ 
 +1.Setup: 
 + 
 +  * Configurarea comunicarii seriale si initializarea componentelor hardware (LCDDFPlayer Minipini de butoane). 
 +  * Setarea intreruperilor externe pentru butoanele Previous si Pause. 
 +  * Setarea intreruperilor pe schimbarea pinilor pentru butoanele Start si Next. 
 + 
 +2.Loop: 
 + 
 +  * Verificarea starii variabilelor de intrerupere pentru a determina daca un buton a fost apasat si executarea actiunilor corespunzatoare (schimbarea pieseipauzare, redare). 
 +  * Citirea valorii potentiometrului pentru controlul volumului si actualizarea acestei valori pe display-ul LCD. 
 +  * Afisarea numarului piesei curente si a volumului pe display-ul LCD. 
 + 
 +Interactiunea dintre functionalitati:​ 
 + 
 +  * Butoane ​de control: Apasarile butoanelor sunt detectate prin intermediul intreruperilor,​ care seteaza variabilele de stare corespunzatoare. Aceste variabile sunt verificate in bucla principala si declanseaza actiunile corespunzatoare ​pe modulul DFPlayer Mini. 
 +  * Controlul volumului: Potentiometrul conectat la pinul A0 este citit periodic pentru a ajusta volumul modulului DFPlayer Mini. Valoarea volumului este afisata pe display-ul LCD. 
 +  * Afisarea pe LCD: Display-ul LCD este utilizat pentru a oferi feedback vizual utilizatorului,​ afisand numarul piesei curente si volumul. 
 + 
 + 
 +Codul final: 
 + 
 + 
 + 
 +#include <​SoftwareSerial.h>​ 
 +#include <​DFRobotDFPlayerMini.h>​ 
 +#include <​LiquidCrystal_I2C.h>​ 
 + 
 + 
 +#define TX 2 
 +#define RX 3  
 +SoftwareSerial mySoftwareSerial(RX,​ TX)
 + 
 + 
 +DFRobotDFPlayerMini myMp3; 
 + 
 +LiquidCrystal_I2C myLcd(0x27, 16, 2); 
 + 
 +const int previousButtonPin = 2;   
 +const int pauseButtonPin = 3;      
 +const int startButtonPin = 4;      
 +const int nextButtonPin = 5;       
 + 
 +volatile bool previousButtonPressed = false; 
 +volatile bool pauseButtonPressed = false; 
 +volatile bool startButtonPressed = false; 
 +volatile bool nextButtonPressed = false; 
 + 
 +void setup() { 
 +   
 +  Serial.begin(9600);​ 
 +   
 +  mySoftwareSerial.begin(9600);​ 
 + 
 +  myLcd.init();​ 
 +  myLcd.backlight();​ 
 + 
 +  pinMode(previousButtonPin,​ INPUT_PULLUP);​ 
 +  pinMode(pauseButtonPin,​ INPUT_PULLUP);​ 
 +  pinMode(startButtonPin,​ INPUT_PULLUP);​ 
 +  pinMode(nextButtonPin,​ INPUT_PULLUP);​ 
 + 
 +   
 +  EICRA |= (1 << ISC01) | (1 << ISC00);  
 +  EICRA |= (1 << ISC11) | (1 << ISC10);  
 +  EIMSK |= (1 << INT0); ​  
 +  EIMSK |= (1 << INT1); ​  
 + 
 +   
 +  PCICR |= (1 << PCIE2);  
 +  PCMSK2 |= (1 << PCINT20);  
 +  PCMSK2 |= (1 << PCINT21);  
 + 
 +  myLcd.setCursor(0,​ 0); 
 +  myLcd.print("​TRACK"​);​ 
 +  myLcd.setCursor(10,​ 0); 
 +  myLcd.print("​PLAY "); 
 +  myLcd.setCursor(0,​ 1); 
 +  myLcd.print("​VOLUME"​);​ 
 +   
 +   
 +  if (myMp3.begin(mySoftwareSerial)) { 
 +     
 +    myMp3.play();​ 
 +    myMp3.enableLoopAll();​ 
 +  } else { 
 +    Serial.println("​Connecting to DFPlayer Mini failed!"​);​ 
 +  } 
 +  sei(); 
 +
 + 
 +void loop() { 
 +  if (previousButtonPressed) { 
 +    previousButtonPressed = false; 
 +    myMp3.previous();​ 
 +    TrackNumberClear();​ 
 +  } 
 +  if (pauseButtonPressed) { 
 +    pauseButtonPressed = false; 
 +    myMp3.pause();​ 
 +    myLcd.setCursor(10,​ 0); 
 +    myLcd.print("​PAUSE"​);​ 
 +  } 
 +  if (startButtonPressed) { 
 +    startButtonPressed = false; 
 +    myMp3.start();​ 
 +    myLcd.setCursor(10,​ 0); 
 +    myLcd.print("​PLAY "); 
 +  } 
 +  if (nextButtonPressed) { 
 +    nextButtonPressed = false; 
 +    myMp3.next();​ 
 +    TrackNumberClear();​ 
 +  } 
 + 
 +  
 +  myMp3.volume(map(analogRead(A0),​ 0, 1023, 0, 30)); 
 + 
 +  myLcd.setCursor(6,​ 0); 
 +  myLcd.print(myMp3.readCurrentFileNumber());​ 
 +   
 +  myLcd.setCursor(7,​ 1); 
 +  if (myMp3.readVolume() < 10) 
 +    myLcd.print(String("​0"​) + myMp3.readVolume());​ 
 +  else 
 +    myLcd.print(myMp3.readVolume());​ 
 +
 + 
 +void TrackNumberClear() { 
 +  delay(500);​ 
 +  myLcd.setCursor(6,​ 0); 
 +  myLcd.print(" ​  "​);​ 
 +
 + 
 + 
 +ISR(INT0_vect) { 
 +  previousButtonPressed = true; 
 +
 + 
 +ISR(INT1_vect) { 
 +  pauseButtonPressed = true; 
 +
 + 
 + 
 +ISR(PCINT2_vect) { 
 +  if (digitalRead(startButtonPin) == LOW) { 
 +    startButtonPressed = true; 
 +  } 
 +  if (digitalRead(nextButtonPin) == LOW) { 
 +    nextButtonPressed = true; 
 +  } 
 +}
  
-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**. 
 </​note>​ </​note>​
 +
 +
 +
 +
 +
  
 ===== Jurnal ===== ===== Jurnal =====
  
 <note tip> <note tip>
-Puteți avea și o secțiune ​de jurnal în care să poată urmări asistentul ​de proiect ​progresul proiectului.+De-a lungul proiectului am intampinat niste momente mai ghinioniste in legatura cu partea ​de hardware, cum ar fi am cumparat un LCD gresit si a trebuit sa recumpar unul nou, pentru ca aveam nevoie de I2C, am avut probleme cu placa arduino, nu facea bine contact cu firele tata-tata si a trebuit sa fac rost de una noua, apoi mi s-a ars DFPlayerul din cauza ca nu am pus rezistenta intr-un mod corect, insa am reusit sa invat din aceste greseli si sa fiu mai atenta pe viitor. La partea de Soft n-as putea spune ca am intampinat prea multe probleme pentru ca m-au ajutat destul de mult cunostintele de la laborator. In concluzie mi-a placut tare mult sa implementez un astfel ​de proiect ​de la 0, faptul ca am reusit sa fac toate astea cu mana mea si sa nu fie strict un cod scris, sa vad si ceva materializat care sa functioneze a fost foarte enjoyable pentru mine
 </​note>​ </​note>​
  
-===== Bibliografie/​Resurse ===== 
  
-<​note>​ 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. 
-</​note>​ 
  
 <​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/prj2024/vstoica/miruna.coman1311.1714817678.txt.gz · Last modified: 2024/05/04 13:14 by miruna.coman1311
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