NuMaker PWM0 play notes (to speaker)

Committer:
SHLIU1@OANBE02333.nuvoton.com
Date:
Thu Feb 25 14:23:47 2021 +0800
Revision:
12:c1c8ac0136ed
Parent:
10:080d4254ab42
Support the both V5.X and V6.X for mbed-os

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rkuo2000 0:c3a30c36f19d 1 //NuMaker-PFM-NUC472 PWM0 output note to a speaker
rkuo2000 0:c3a30c36f19d 2 #include "mbed.h"
rkuo2000 0:c3a30c36f19d 3
rkuo2000 0:c3a30c36f19d 4 #define _C5 523 // C5 = 523.25Hz
rkuo2000 0:c3a30c36f19d 5 #define _D5 587 // D5 = 587.33Hz
rkuo2000 0:c3a30c36f19d 6 #define _E5 659 // E5 = 659.26Hz
rkuo2000 0:c3a30c36f19d 7 #define _F5 698 // F5 = 698.46Hz
rkuo2000 0:c3a30c36f19d 8 #define _G5 784 // G5 = 783.99Hz
rkuo2000 0:c3a30c36f19d 9 #define _A5 880 // A5 = 880.00Hz
rkuo2000 0:c3a30c36f19d 10 #define _B5 988 // B5 = 987.77Hz
rkuo2000 0:c3a30c36f19d 11 #define _C6 1046 // C6 = 1046.50Hz
rkuo2000 0:c3a30c36f19d 12 #define _D6 1175 // D6 = 1174.66Hz
rkuo2000 0:c3a30c36f19d 13 #define _E6 1319 // E6 = 1318.51Hz
rkuo2000 0:c3a30c36f19d 14 #define _F6 1397 // F6 = 1396.91Hz
rkuo2000 0:c3a30c36f19d 15 #define _G6 1568 // G6 = 1567.98Hz
rkuo2000 0:c3a30c36f19d 16 #define _A6 1760 // A6 = 1760.00Hz
rkuo2000 0:c3a30c36f19d 17 #define _B6 1976 // B6 = 1975.53Hz
rkuo2000 0:c3a30c36f19d 18
ccli8 10:080d4254ab42 19 /* NOTE: Most targets has UNO D2 for PWM. Check it for supporting new targets */
ccli8 10:080d4254ab42 20 PwmOut pwm0(D2);
shliu1 5:45158b37892c 21
rkuo2000 0:c3a30c36f19d 22
rkuo2000 0:c3a30c36f19d 23 int main()
rkuo2000 0:c3a30c36f19d 24 {
rkuo2000 0:c3a30c36f19d 25 int i =0;
rkuo2000 0:c3a30c36f19d 26 int note[15] = { // array of notes
rkuo2000 0:c3a30c36f19d 27 _C5, _D5, _E5, _F5, _G5, _A5, _B5,
rkuo2000 0:c3a30c36f19d 28 _C6, _D6, _E6, _F6, _G6, _A6, _B6};
SHLIU1@OANBE02333.nuvoton.com 12:c1c8ac0136ed 29 #ifdef MBED_MAJOR_VERSION
SHLIU1@OANBE02333.nuvoton.com 12:c1c8ac0136ed 30 printf("Mbed OS version %d.%d.%d\r\n\n", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION);
SHLIU1@OANBE02333.nuvoton.com 12:c1c8ac0136ed 31 #endif
rkuo2000 0:c3a30c36f19d 32
rkuo2000 0:c3a30c36f19d 33 for (i=0; i<14; i++) {
rkuo2000 0:c3a30c36f19d 34 pwm0.period_us(1000000/note[i]); // set period per note
rkuo2000 0:c3a30c36f19d 35 pwm0.pulsewidth_us(1000000/note[i]/2); // set duty cycle to 50%
SHLIU1@OANBE02333.nuvoton.com 12:c1c8ac0136ed 36 #if MBED_MAJOR_VERSION >= 6
SHLIU1@OANBE02333.nuvoton.com 12:c1c8ac0136ed 37 ThisThread::sleep_for(100);
SHLIU1@OANBE02333.nuvoton.com 12:c1c8ac0136ed 38 #else
rkuo2000 0:c3a30c36f19d 39 Thread::wait(100);
SHLIU1@OANBE02333.nuvoton.com 12:c1c8ac0136ed 40 #endif
rkuo2000 0:c3a30c36f19d 41 }
rkuo2000 0:c3a30c36f19d 42 pwm0.pulsewidth_us(0); // set dutycycle = 0% to stop
rkuo2000 0:c3a30c36f19d 43 }