for Airio-Base. PWM port out sample/test program.

Dependencies:   mbed

Airio-Baseで PWMポート出力し、圧電ブザーを鳴らすサンプルコードです。

準備

SWスイッチ動作

SWを押すと、LED1が点灯しドレミ…の音階が流れます。

ISPスイッチ動作

ISPを押すと、LED2が点灯し「ピポッ」と効果音が流れます。

PWMポート

PWM出力できるポートはP0_8に加え、P0_9、P0_18、P0_19でも可能です。ただし、PWM出力設定は全ポートで1つの設定を共有しているため、同時にPWMポートを使用しても最後に設定した値がすべてのポートに反映されます。

main.cpp

Committer:
mbed_crane_elec
Date:
2018-10-26
Revision:
0:d5af51ac8126

File content as of revision 0:d5af51ac8126:

#include "mbed.h"
//-------------------------------------------------------------------------------
//Port Settings
DigitalOut led1(LED1);
DigitalOut led2(P1_13,1);

DigitalIn sw(P1_20);
DigitalIn isp(P0_1);

//These ports can be PWM port
PwmOut bz(P0_8);
//PwmOut bz(P0_9);
//PwmOut bz(P0_18);
//PwmOut bz(P0_19);

volatile float Hz[] = {
    220.000,//A3
    246.942,//B3
    261.626,//C4
    293.665,//D4
    329.628,//E4
    349.228,//F4
    391.995,//G4
    440.000,//A4
    493.883,//B4
    523.251,//C5
    587.330,//D5
    659.255,//E5
    698.456,//F5
    783.991,//G5
    880.000//A5
};
    
//-------------------------------------------------------------------------------
//Program
int main()
{

    while(1)
    {
        // Button "SW" function
        if(sw == 0)
        {
            led1 = 0;//LED1 turn ON
            
            //PWM output
            for (int i = 0;i < 14;i++)
            {
                bz.period(1.0 / Hz[i]);// set to pulse period : (1.0 / xxx[Hz]) = T[sec]
                bz.write(0.5);// set to pulse L/H duty : ex. (0.8) = 80% High
                wait(0.3);// wait for 0.3 sec
                bz.write(0.0);//PWM stop : pulse 0% (100% Low)
            }
        }    
        else
        {
            led1 = 1;//LED1 turn OFF
        }
        
        // Button "ISP" function
        if(isp == 0)
        {
            led2 = 0;//LED2 turn ON
            //PWM output
            bz.period(1.0 / 2000);// set to 2000[Hz]
            bz.write(0.5);// set to pulse L/H duty : ex. (0.8) = 80% High
            wait(0.15);// wait for 0.15 sec
            bz.period(1.0 / 1000);// set to 1000[Hz]
            bz.write(0.5);// set to pulse L/H duty : ex. (0.8) = 80% High
            wait(0.15);// wait for 0.15 sec
            
            bz.write(0.0);//PWM stop : pulse 0% (100% Low)
        }    
        else
        {
            led2 = 1;//LED2 turn OFF
        }
    }
}