Differences

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

Link to this comparison view

pm:prj2023:apredescu:sintetizator [2023/05/07 14:36]
radu_andrei.popescu [Descriere generală]
pm:prj2023:apredescu:sintetizator [2023/05/28 23:36] (current)
radu_andrei.popescu
Line 13: Line 13:
 </​note>​ </​note>​
 ===== Descriere generală ===== ===== Descriere generală =====
-<​center>​{{:​pm:​prj2023:​apredescu:​pm.png?​500|}}</​center>​+{{:​pm:​prj2023:​apredescu:​pm.png?​600|}}
 <note tip> <note tip>
-O schemă bloc cu toate modulele proiectului vostruatât software cât şi hardware însoţită de descriere a acestora precum şa modului în care interacţionează.+Un instrument muzical portabilcare oferă o varietate de opțiuni sonore șposibilități de personalizare. Este ideal pentru utilizatorii ​care doresc să experimenteze cu sunete noi și să creeze muzică într-un mod creativ și interactiv.
  
-Exemplu ​de schemă bloc: http://www.robs-projects.com/​mp3proj/​newplayer.html+Funcționarea proiectului începe cu selectarea opțiunii ​de sunet de pe display-ul LCD prin intermediul potențiometruluiAceasta poate include selectarea unui sunet presetat sau crearea unui sunet personalizat prin ajustarea parametrilor de sunet, cum ar fi volumul, tonul. Odată selectat sunetul, semnalul audio este generat și reprodus prin difuzoarele integrate sau prin intermediul output-ului de tip Jack, care poate fi conectat la un amplificator sau alt dispozitiv audioPentru a "​cânta"​ la acest instrument, trebuie conectată o clapă MIDI externă în inputul USB pus la dispoziție
 </​note>​ </​note>​
  
Line 33: Line 33:
 </​note>​ </​note>​
  
 +<​note>​
 +{{ :​pm:​prj2023:​apredescu:​20230528_114729.jpg?​600 |}}
 +</​note>​
 +
 +<​note>​
 +{{ :​pm:​prj2023:​apredescu:​schema_completa.png?​600 |}}
 +</​note>​
 ===== Software Design ===== ===== Software Design =====
  
  
-<note tip+**Mediul de dezvoltare** 
-Descrierea codului aplicaţiei ​(firmware): +  * Arduino IDE 
-  * mediu de dezvoltare ​(if any) (e.gAVR StudioCodeVisionAVR+**Biblioteci folosite** 
-  * librării şsurse 3rd-party (e.gProcyon AVRlib+  * Arduino.h 
-  ​* algoritmi şstructuri pe care plănuiţsă le implementaţ+  * usbh_midi.h 
-  ​(etapa 3surse şi funcţii implementate +  * usbhub.h 
-</​note>​+  * SD.h 
 +  * TMRpcm.h 
 +  * SPI.h 
 +  * Wire.h 
 +  * LiquidCrystal_I2C.h 
 +  * input_converter.h (bibliotecă proprie) 
 +**Implementare** 
 +  * Pentru citirea input-ului MIDI: 
 +<code
 +... 
 +void MIDI_poll()
 + 
 +void setup() 
 +
 +  _MIDI_SERIAL_PORT.begin(31250);​ 
 + 
 +  if (Usb.Init() == -1) { 
 +    while (1); 
 +  } 
 +  delay( 200 ); 
 +
 + 
 +void loop() 
 +
 +  Usb.Task();​ 
 + 
 +  if ( Midi ) { 
 +    MIDI_poll();​ 
 +  } 
 +
 + 
 +// Poll USB MIDI Controler and send to serial MIDI 
 +void MIDI_poll() 
 +
 +  uint8_t outBuf[ 3 ]; 
 +  uint8_t size; 
 + 
 +  do { 
 +    if ( (size = Midi.RecvData(outBuf)) > 0 ) { 
 +      if (outBuf[0] == 144) { // 144 reprezintă codul pentru când se apasă clapa respectivă 
 +        _MIDI_SERIAL_PORT.print(outBuf[1],​ DEC); 
 +        _MIDI_SERIAL_PORT.println();​ 
 +      } 
 +    } 
 +  } while (size > 0); 
 +
 +... 
 +</​code>​ 
 + 
 +  * Pentru citirea input-ului ​de pe cealaltă placă Arduino: 
 +<​code>​ 
 +... 
 +if (Serial.available() > 0) { 
 +    // Read the incoming data 
 +    c = Serial.read();​ 
 +    ​if (c != '​\n'​)
 +      note[i++] = c; 
 +    } else { 
 +      note[i] = c; 
 +      i = 0; 
 +      note_int = atoi(note); 
 +      Serial.print(note_int);​ 
 +
 +... 
 +</​code>​ 
 + 
 +  * Pentru a cânta nota primită ca input: 
 +<​code>​ 
 +... 
 +if (note_int != 0){ 
 +    sprintf(file"​%s%d.wav",​ MIDI_to_note(note_int), curr_preset);​ 
 +    Serial.print(file);​ 
 +    Serial.println();​ 
 +    tmrpcm.play(file);​ 
 +
 +... 
 +</​code>​ 
 + 
 +  * Pentru a citi valoarea potențiometrului șpentru a afișa preset-ul ales: 
 +<​code>​ 
 +... 
 +void loop() { 
 +  val = analogRead(A0);​ 
 +  val = map(val, 0, 1020, 1, 6); 
 + 
 +  if (val != curr_preset && val != 6){ 
 +    curr_preset = val; 
 +    printPreset();​ 
 +  } 
 +
 +..
 +void printPreset(){ 
 +  ​clearCharacters();​ 
 +  lcd.setCursor(0,​1);​ 
 +  if (curr_preset == 5) 
 +    lcd.print("​Drums"​);​ 
 +  else lcd.print(curr_preset);​ 
 +
 +... 
 +void clearCharacters() 
 +
 +    for (int = 0; < 10; i++) 
 +    { 
 +    lcd.setCursor (i,1); //   
 +    lcd.write(254)
 +    }  
 + 
 +
 +... 
 +</code> 
 + 
 +De asemenea, pentru a converti valoarea input-ului MIDI într-o notă muzicală, am creat propria bibliotecă. 
 +**input_converter.cpp:​** 
 +<​code>​ 
 +#include "​input_converter.h"​ 
 + 
 +char* MIDI_to_note(int ​note) { 
 +    if (note == 60) 
 +        return "​C1";​ 
 +    if (note == 61) 
 +        return "​C#​1";​ 
 +    if (note == 62) 
 +        return "​D1";​ 
 +    if (note == 63) 
 +        return "​D#​1";​ 
 +    if (note == 64) 
 +        return "​E1";​ 
 +    if (note == 65) 
 +        return "​F1";​ 
 +    if (note == 66) 
 +        return "​F#​1";​ 
 +    if (note == 67) 
 +        return "​G1";​ 
 +    if (note == 68) 
 +        return "​G#​1";​ 
 +    if (note == 69) 
 +        return "​A1";​ 
 +    if (note == 70) 
 +        return "​A#​1";​ 
 +    if (note == 71) 
 +        return "​B1";​ 
 +    return "";​ 
 +
 +</code>
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
Line 73: Line 223:
  
 <​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/prj2023/apredescu/sintetizator.1683459390.txt.gz · Last modified: 2023/05/07 14:36 by radu_andrei.popescu
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