This shows you the differences between two versions of the page.
pm:prj2024:avaduva:andrei.serban1608 [2024/05/24 16:05] 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: |
- | TODO: exemple cod | + | <file ino demo.ino> |
+ | #include "DaisyDuino.h" | ||
- | ===== Rezultate Obţinute ===== | + | DaisyHardware hw; |
+ | static Oscillator osc; | ||
- | <note tip> | + | size_t num_channels; |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | const int trigPin = D4; |
+ | const int echoPin = D3; | ||
+ | const int baud = 9600; | ||
+ | |||
+ | int distance; | ||
+ | |||
+ | float pitch, amp = 100; | ||
+ | |||
+ | Switch pwrButton, effectButton; | ||
+ | |||
+ | int on = 0, effect = 0; | ||
+ | |||
+ | void MyCallback(float **in, float **out, size_t size) { | ||
+ | float sine_signal; | ||
+ | |||
+ | pwrButton.Debounce(); | ||
+ | effectButton.Debounce(); | ||
+ | |||
+ | osc.SetFreq(pitch); | ||
+ | osc.SetAmp(amp * on); | ||
+ | for (size_t i = 0; i < size; i++) { | ||
+ | sine_signal = osc.Process(); | ||
+ | out[0][i] = sine_signal; | ||
+ | out[1][i] = sine_signal; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void setup() { | ||
+ | |||
+ | pwrButton.Init(1000, true, 26, INPUT_PULLUP); | ||
+ | effectButton.Init(1000, true, 27, INPUT_PULLUP); | ||
+ | |||
+ | pinMode(trigPin, OUTPUT); | ||
+ | pinMode(echoPin, INPUT); | ||
+ | Serial.begin(baud); | ||
+ | |||
+ | float sample_rate; | ||
+ | |||
+ | hw = DAISY.init(DAISY_SEED, AUDIO_SR_48K); | ||
+ | num_channels = hw.num_channels; | ||
+ | sample_rate = DAISY.get_samplerate(); | ||
+ | osc.Init(sample_rate); | ||
+ | |||
+ | osc.SetWaveform(osc.WAVE_SIN); | ||
+ | osc.SetFreq(440); | ||
+ | osc.SetAmp(1); | ||
+ | |||
+ | DAISY.begin(MyCallback); | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | pwrButton.Debounce(); | ||
+ | effectButton.Debounce(); | ||
+ | |||
+ | digitalWrite(trigPin, LOW); | ||
+ | delayMicroseconds(2); | ||
+ | |||
+ | digitalWrite(trigPin, HIGH); | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(trigPin, LOW); | ||
+ | |||
+ | distance = pulseIn(echoPin, HIGH); | ||
+ | delay(50); | ||
+ | |||
+ | 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); | ||
+ | } | ||
+ | |||
+ | if (pwrButton.Pressed()) { | ||
+ | on = !on; | ||
+ | Serial.println(on ? "Power: ON" : "Power: OFF"); | ||
+ | } | ||
+ | if (effectButton.Pressed()) { | ||
+ | effect = !effect; | ||
+ | Serial.print("Effect: "); | ||
+ | Serial.println((!effect) ? "Pitch" : "Amp"); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | </file> | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | Am rămas cu două mari lecții după finalizarea proiectului: |
- | <note warning> | + | - 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. |
- | 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ă ;-). | + | - 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. |
+ | |||
+ | ===== Download ===== | ||
- | 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**. | + | * {{:pm:prj2024:avaduva:theremini.zip| There-Mini}} |
- | </note> | + | |
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 99: | 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> | ||