Advanced Click Buzzer example for Hexiwear featuring OLED Display and Touch

Dependencies:   Hexi_KW40Z Hexi_OLED_SSD1351 PWM_Tone_Library

This project demonstrates the use of the Mikroelektronika Click Buzzer module with hexiwear featuring Display and Touch

Plug Hexiwear into the Docking Station and the BUZZER Click to the Click Socket 1
Connect the USB cable to your computer and to the micro-USB port of the Docking Station

Compile the project and copy the binary "Hexi_Click_Buzzer_Example-v2_HEXIWEAR.bin" in the DAP-LINK drive from your computer file explorer
Press the K64F-RESET button on the docking station to start the program on your board
Touch the Hexiwear Electrode located on the right below to the start icone

The buzzer will start play a melody of 32 tones

/media/uploads/GregC/hexi_click_buzzer-v2.jpg

main.cpp

Committer:
GregC
Date:
2016-10-07
Revision:
0:ac3116125c60

File content as of revision 0:ac3116125c60:

#include "mbed.h"
#include "pwm_tone.h"
#include "Hexi_OLED_SSD1351.h"
#include "images.h"
#include "Hexi_KW40Z.h"

// Pin connections
PwmOut Buzzer(PTA10);                               // Define the Buzzer Pinout (PWM Out)
SSD1351 oled(PTB22,PTB21,PTC13,PTB20,PTE6, PTD15);  // SSD1351 OLED Driver (MOSI,SCLK,POWER,CS,RST,DC)
KW40Z kw40z_device(PTE24, PTE25);                   // Instantiate the Hexi KW40Z Driver (UART TX, UART RX)

// Variables
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; // Auto performance
int i;
const uint8_t *image1; // Pointer for the image to be displayed

void ButtonLeft(void)
{
    Tune(Buzzer, E_4, 4);  //4 Octave E beat 4/16
}

void ButtonRight(void)
{
    Tune(Buzzer, C_4, 4);  //4 Octave C beat 4/16
    wait_ms(250);
    Tune(Buzzer, D_4, 4);  //4 Octave D beat 4/16
    wait_ms(250);
    Tune(Buzzer, E_4, 4);  //4 Octave E beat 4/16
    wait_ms(250);
    
    for(i=0; i<tones_num; i++)
    {
        Auto_tunes(Buzzer, tones[i], 4); // Auto performance
        Stop_tunes(Buzzer);
    }
}



// main() runs in its own thread in the OS
// (note the calls to Thread::wait below for delays)
int main() 
{
    kw40z_device.attach_buttonLeft(&ButtonLeft);
    kw40z_device.attach_buttonRight(&ButtonRight);
    
    
    image1  = Buzzer96;            // Setting pointer location of the 96 by 96 pixel bitmap
    oled.DrawImage(image1,0,0);     // Fill 96px by 96px Screen with 96px by 96px NXP Image starting at x=0,y=0
    
    while (true) 
    {
        Thread::wait(500);
    }
}