This shows you the differences between two versions of the page.
|
pm:prj2024:avaduva:andrei.serban1608 [2024/05/24 20:46] andrei.serban1608 [Software Design] |
pm:prj2024:avaduva:andrei.serban1608 [2024/05/27 21:53] (current) andrei.serban1608 |
||
|---|---|---|---|
| Line 52: | Line 52: | ||
| ==== Montaj ==== | ==== Montaj ==== | ||
| - | |||
| - | TODO: Adaugă boost converter | ||
| Am conectat toate ground-urile între ele. | Am conectat toate ground-urile între ele. | ||
| Line 74: | Line 72: | ||
| Biblioteci 3rd party: [[https://github.com/electro-smith/DaisyDuino|DaisyDuino]] | Biblioteci 3rd party: [[https://github.com/electro-smith/DaisyDuino|DaisyDuino]] | ||
| - | Structură de date principală: Listă circulară pentru a cicla prin preset-urile/parametrii sintetizatorului | + | Sursa: |
| - | + | ||
| - | Exemplu de trimitere a datelor de la senzor la un oscilator pe sintetizator: | + | |
| <file ino demo.ino> | <file ino demo.ino> | ||
| Line 90: | Line 86: | ||
| const int baud = 9600; | const int baud = 9600; | ||
| - | long duration; | ||
| int distance; | int distance; | ||
| - | float pitch; | + | float pitch, amp = 100; |
| + | |||
| + | Switch pwrButton, effectButton; | ||
| + | |||
| + | int on = 0, effect = 0; | ||
| void MyCallback(float **in, float **out, size_t size) { | void MyCallback(float **in, float **out, size_t size) { | ||
| float sine_signal; | float sine_signal; | ||
| + | |||
| + | pwrButton.Debounce(); | ||
| + | effectButton.Debounce(); | ||
| + | |||
| osc.SetFreq(pitch); | osc.SetFreq(pitch); | ||
| - | for (size_t i = 0; i < size; i++) { | + | osc.SetAmp(amp * on); |
| - | sine_signal = osc.Process(); | + | for (size_t i = 0; i < size; i++) { |
| - | out[0][i] = sine_signal; | + | sine_signal = osc.Process(); |
| - | out[1][i] = sine_signal; | + | out[0][i] = sine_signal; |
| - | } | + | out[1][i] = sine_signal; |
| + | } | ||
| } | } | ||
| void setup() { | void setup() { | ||
| + | |||
| + | pwrButton.Init(1000, true, 26, INPUT_PULLUP); | ||
| + | effectButton.Init(1000, true, 27, INPUT_PULLUP); | ||
| + | |||
| pinMode(trigPin, OUTPUT); | pinMode(trigPin, OUTPUT); | ||
| pinMode(echoPin, INPUT); | pinMode(echoPin, INPUT); | ||
| Line 117: | Line 125: | ||
| osc.Init(sample_rate); | osc.Init(sample_rate); | ||
| - | osc.SetWaveform(osc.WAVE_SQUARE); | + | osc.SetWaveform(osc.WAVE_SIN); |
| osc.SetFreq(440); | osc.SetFreq(440); | ||
| - | osc.SetAmp(0.3); | + | osc.SetAmp(1); |
| DAISY.begin(MyCallback); | DAISY.begin(MyCallback); | ||
| Line 126: | Line 134: | ||
| void loop() | void loop() | ||
| { | { | ||
| + | pwrButton.Debounce(); | ||
| + | effectButton.Debounce(); | ||
| + | |||
| digitalWrite(trigPin, LOW); | digitalWrite(trigPin, LOW); | ||
| delayMicroseconds(2); | delayMicroseconds(2); | ||
| Line 133: | Line 144: | ||
| digitalWrite(trigPin, LOW); | digitalWrite(trigPin, LOW); | ||
| - | duration = pulseIn(echoPin, HIGH); | + | distance = pulseIn(echoPin, HIGH); |
| - | distance = duration * 0.034/2; | + | delay(50); |
| - | delay(65); | + | |
| - | pitch = min((220.0 * ((float) distance / 30)) + 220.0, 440.0); | + | if (effect == 0) { |
| + | pitch = min((220.0 * ((float) distance / 1200)) + 220.0, 440.0); | ||
| + | } else if (effect == 1) { | ||
| + | amp = min((float) distance / 1200, 100.0f); | ||
| + | } | ||
| - | Serial.print("Distance: "); | + | if (pwrButton.Pressed()) { |
| - | Serial.println(distance); | + | on = !on; |
| - | + | Serial.println(on ? "Power: ON" : "Power: OFF"); | |
| - | Serial.print("Pitch: "); | + | } |
| - | Serial.println(pitch); | + | if (effectButton.Pressed()) { |
| + | effect = !effect; | ||
| + | Serial.print("Effect: "); | ||
| + | Serial.println((!effect) ? "Pitch" : "Amp"); | ||
| + | } | ||
| } | } | ||
| + | |||
| </file> | </file> | ||
| - | TODO: exemple cod | + | ===== Concluzii ===== |
| - | ===== Rezultate Obţinute ===== | + | Am rămas cu două mari lecții după finalizarea proiectului: |
| - | <note tip> | + | - Data viitoare, pentru un proiect de genul, ar trebui să folosesc un uC cu mai multă documentație / mai multe exemple disponibile pe internet. Pe lângă că a fost imposibil să găsesc o bibliotecă pentru ecranul LCD pe I2C care să compileze pe ARM, nici nu am găsit exemple bune pentru lucruri precum întreruperi, timere sau ADC. |
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | - Trebuie să mă apuc mai din timp pentru un proiect embedded. Toate componentele hardware de care am avut nevoie le-am obținut abia vinerea dinaintea PM Fair, ceea ce a dus la un weekend plin de research / implementare software. |
| - | </note> | + | |
| - | + | ||
| - | ===== Concluzii ===== | + | |
| ===== Download ===== | ===== Download ===== | ||
| - | <note warning> | + | * {{:pm:prj2024:avaduva:theremini.zip| There-Mini}} |
| - | 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 ===== | ===== Jurnal ===== | ||
| Line 171: | Line 183: | ||
| 19.05: Am realizat că semnalul difuzat de pinul echo al lui HC-SR04 este de fapt un semnal digital, așa că nu o să am nevoie de un pin de ADC. | 19.05: Am realizat că semnalul difuzat de pinul echo al lui HC-SR04 este de fapt un semnal digital, așa că nu o să am nevoie de un pin de ADC. | ||
| - | <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 ===== | ===== Bibliografie/Resurse ===== | ||
| - | <note> | + | - [[https://github.com/electro-smith]] |
| - | 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> | ||