Piezo buzzer -kirjaston asennus mbed:issä |
Jotta tämän saa toimimaan micro:bit:in kanssa, projektiin pitää kopioida myös MicroBit - kirjasto (sen voi hakea jostain vanhasta projektista copy-paste:lla).
Projektissa pitää olla microbit, mbed ja PWM_Tone_Library |
Malliohjelmaa pitää muokata kahdesta kohtaa:
- lisää MicroBit - kirjasto #include "MicroBit.h"
- Vaihda "D5":n (pinnin nimi) tilalle käyttämäsi analogiapinni esim. MICROBIT_PIN_P1
Ja sitten vain kiinnittämään summeria pinnin P1 ja GND:n väliin ja lataamaan ohjelmaa micro:bit:iin. Jos haluaa samalla tutkia ledinäytöllä missä mennään lisäsin tähän koodiin pieniä tulosteita (jotka asynkronisen toiminnan ansiosta toimivat samaan aikaan kuin melodia):
#include "mbed.h"
#include "MicroBit.h"
#include "pwm_tone.h"
MicroBit uBit;
PwmOut Buzzer(MICROBIT_PIN_P1);
float C_3 = 1000000/Do3,
Cs_3 = 1000000/Do3s,
D_3 = 1000000/Re3,
Ds_3 = 1000000/Re3s,
E_3 = 1000000/Mi3,
F_3 = 1000000/Fa3,
Fs_3 = 1000000/Fa3s,
G_3 = 1000000/So3,
Gs_3 = 1000000/So3s,
A_3 = 1000000/La3,
As_3 = 1000000/La3s,
B_3 = 1000000/Ti3,
C_4 = 1000000/Do4,
Cs_4 = 1000000/Do4s,
D_4 = 1000000/Re4,
Ds_4 = 1000000/Re4s,
E_4 = 1000000/Mi4,
F_4 = 1000000/Fa4,
Fs_4 = 1000000/Fa4s,
G_4 = 1000000/So4,
Gs_4 = 1000000/So4s,
A_4 = 1000000/La4,
As_4 = 1000000/La4s,
B_4 = 1000000/Ti4,
C_5 = 1000000/Do5,
Cs_5 = 1000000/Do5s,
D_5 = 1000000/Re5,
Ds_5 = 1000000/Re5s,
E_5 = 1000000/Mi5,
F_5 = 1000000/Fa5,
Fs_5 = 1000000/Fa5s,
G_5 = 1000000/So5,
Gs_5 = 1000000/So5s,
A_5 = 1000000/La5,
As_5 = 1000000/La5s,
B_5 = 1000000/Ti5;
int tones[] = {E_4, D_4, C_4, D_4, E_4, E_4, E_4, 0, D_4, D_4, D_4, 0, E_4, G_4, G_4, 0,
E_4, D_4, C_4, D_4, E_4, E_4, E_4, 0, D_4, D_4, E_4, D_4, C_4, 0, 0, 0};
int tones_num = 32;
int main(void)
{
uBit.init();
uBit.display.printAsync('C');
Tune(Buzzer, C_4, 4); //4 Octave C beat 4/16
wait_ms(250);
uBit.display.printAsync('D');
Tune(Buzzer, D_4, 4); //4 Octave D beat 4/16
wait_ms(250);
uBit.display.printAsync('E');
Tune(Buzzer, E_4, 4); //4 Octave E beat 4/16
wait_ms(250);
int i;
uBit.display.scrollAsync("melody");
for(i=0; i<tones_num; i++)
{
Auto_tunes(Buzzer, tones[i], 4); // Auto performance
Stop_tunes(Buzzer);
}
}
Eihän tämä lopulta vaikeaa ollut mutta sitäkin palkitsevampaa kun tuo pieni melodia lopulta tuli ulos :-) Se mitä tässä tarvittiin oli kirjasto, joka osaa tehdä PWM:ää (Pulse Width Modulation) analogiapinnille (PwmOut-rajapinta mbed-kirjastossa), tietoa eri sävelten taajuuksista (pwm_tone.h-tiedostossa). Esimerkkikoodissa muunnettiin sävelen taajuus värähdysajaksi (värähdysaika on taajuuden käänteisluku) mikrosekunneissa (µs). Esim. PWM värähdysaika 440Hz sävelelle on 1000000/440. Ja tuolla jaksonajalla vaihteleva jännite saa pietsoelementin sisällä olevan metallilevyn tuottamaan jotakuinkin yksiviivaista a:ta vastaavaa ääntä. Kaikkea sitä oppii kun näiden kanssa pelaa...
Ja tilanne mbed-ArduinoCC micro:bit:in osalta on nyt virallisesti 2-0.
Ja tilanne mbed-ArduinoCC micro:bit:in osalta on nyt virallisesti 2-0.
Ei kommentteja:
Lähetä kommentti