Differences

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

Link to this comparison view

pm:prj2023:apredescu:sintetizator [2023/05/28 23:03]
radu_andrei.popescu [Software Design]
pm:prj2023:apredescu:sintetizator [2023/05/28 23:36] (current)
radu_andrei.popescu
Line 58: Line 58:
   * Pentru citirea input-ului MIDI:   * Pentru citirea input-ului MIDI:
 <​code>​ <​code>​
 +...
 void MIDI_poll();​ void MIDI_poll();​
  
Line 87: Line 88:
   do {   do {
     if ( (size = Midi.RecvData(outBuf)) > 0 ) {     if ( (size = Midi.RecvData(outBuf)) > 0 ) {
-      if (outBuf[0] == 144) {+      if (outBuf[0] == 144) { // 144 reprezintă codul pentru când se apasă clapa respectivă
         _MIDI_SERIAL_PORT.print(outBuf[1],​ DEC);         _MIDI_SERIAL_PORT.print(outBuf[1],​ DEC);
         _MIDI_SERIAL_PORT.println();​         _MIDI_SERIAL_PORT.println();​
Line 94: Line 95:
   } while (size > 0);   } while (size > 0);
 } }
 +...
 </​code>​ </​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 și 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 i = 0; i < 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 =====
 +
 +<note tip>
 +Care au fost rezultatele obţinute în urma realizării proiectului vostru.
 +</​note>​
 +
 +===== Concluzii =====
 +
 +===== 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**.
 +</​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 =====
 +
 +<​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>​
pm/prj2023/apredescu/sintetizator.1685304193.txt.gz · Last modified: 2023/05/28 23:03 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