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> | ||