
ece 4180 project 2019
Dependencies: mbed wave_player mbed-rtos 4DGL-uLCD-SE SDFileSystem FATFileSystem
Diff: main.cpp
- Revision:
- 1:549f56cb4740
- Parent:
- 0:567492543056
- Child:
- 2:270569d33ef1
--- a/main.cpp Fri Apr 12 01:18:47 2019 +0000 +++ b/main.cpp Mon Apr 15 20:17:08 2019 +0000 @@ -7,6 +7,37 @@ #include "wave_player.h" #include <stdio.h> #include "Speaker.h" +#include "rtos.h" + +//Class to control an RGB LED using three PWM pins +class RGBLed +{ +public: + RGBLed(PinName redpin, PinName greenpin, PinName bluepin); + void write(float red,float green, float blue); +private: + PwmOut _redpin; + PwmOut _greenpin; + PwmOut _bluepin; +}; + +RGBLed::RGBLed (PinName redpin, PinName greenpin, PinName bluepin) + : _redpin(redpin), _greenpin(greenpin), _bluepin(bluepin) +{ + //50Hz PWM clock default a bit too low, go to 2000Hz (less flicker) + _redpin.period(0.0005); +} + +void RGBLed::write(float red,float green, float blue) +{ + _redpin = red; + _greenpin = green; + _bluepin = blue; +} + +//Setup RGB led using PWM pins and class +RGBLed myRGBled(p21,p22,p23); //RGB PWM pins + DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); @@ -19,18 +50,17 @@ // constructor(i2c object, i2c address of the mpr121) Mpr121 mpr121(&i2c, Mpr121::ADD_VSS); -SDFileSystem sd(p5, p6, p7, p8, "sd"); - -AnalogOut DACout(p18); -wave_player waver(&DACout); -FILE *wave_file; +//SDFileSystem sd(p5, p6, p7, p8, "sd"); +uLCD_4DGL uLCD(p13,p14,p11); - -// Key hit/release interrupt routine +//AnalogOut DACout(p18); +//wave_player waver(&DACout); +//FILE *wave_file; -int key_code; + int key_code; +// Key hit/release interrupt routine void fallInterrupt() { - key_code = 0; + key_code=0; int i=0; int value=mpr121.read(0x00); value +=mpr121.read(0x01)<<8; @@ -38,122 +68,206 @@ i=0; // puts key number out to LEDs for demo for (i=0; i<12; i++) { - if (((value>>i)&0x01)==1) { - key_code=i+1; - - } + if (((value>>i)&0x01)==1) key_code=i+1; } -// wave_file=fopen("/sd/piano/a1.wav","r"); -// if(wave_file==NULL) printf("file open error!\n\n\r"); -// printf("test"); -// waver.play(wave_file); -// fclose(wave_file); -printf("%d", key_code); led4=key_code & 0x01; led3=(key_code>>1) & 0x01; led2=(key_code>>2) & 0x01; led1=(key_code>>3) & 0x01; } - + +void song1(void const *args) { + +} + int main() { - // Speaker mySpeaker(p18); +// SongPlayer mySpeaker(p25); +Speaker mySpeaker(p25); interrupt.fall(&fallInterrupt); interrupt.mode(PullUp); -// while(1){ + +uLCD.printf("welcome :)"); +wait(2.0); +//uLCD.locate(3,3); +//uLCD.text_width(4); +//uLCD.text_height(4); +int song[14] = {1, 1,8,8,10,10,8,6,6,5,5,3,3,1}; +char note[14] = {'C','C','G','G','A','A','G','F','F','E','E','D','D','C'}; +int i= 0; + while (1) { + + if(true) { + //uLCD.printf("starting song"); + wait(1.0); + while(i <14) { + // uLCD.cls(); + uLCD.locate(3,3); + uLCD.text_width(4); + uLCD.text_height(4); + uLCD.printf("%s",note[i]); + + switch(key_code) //uses a case statement for each individual touch sensor + { + case 1: + mySpeaker.PlayNote(261.6256, 0.5, 0.5); + break; + case 2: + mySpeaker.PlayNote(277.1826, 0.5, 0.5); + break; + case 3: + mySpeaker.PlayNote(293.6648, 0.5, 0.5); + break; + case 4: + mySpeaker.PlayNote(311.1270, 0.5, 0.5); + break; + case 5: + mySpeaker.PlayNote(329.6276, 0.5, 0.5); + break; + case 6: + mySpeaker.PlayNote(349.2282, 0.5, 0.5); + break; + case 7: + mySpeaker.PlayNote(369.9944, 0.5, 0.5); + break; + case 8: + mySpeaker.PlayNote(391.9954, 0.5, 0.5); + break; + case 9: + mySpeaker.PlayNote(415.3047, 0.5, 0.5); + break; + case 10: + mySpeaker.PlayNote(440.0, 0.5, 0.5); + break; + case 11: + mySpeaker.PlayNote(466.1638, 0.5, 0.5); + break; + case 12: + mySpeaker.PlayNote(493.8833, 0.5, 0.5); + break; + } + + if(song[i]==key_code){ + myRGBled.write(0.0,1.0,0.0 ); + i++; + } else if (song[i] != key_code) { + myRGBled.write(1.0,0.0,0.0 ); + } else if (key_code == 0) { + myRGBled.write(0.0,1.0,0.0 ); + } -//} - while (1) { + } + i = 0; + + } else { + switch(key_code) //uses a case statement for each individual touch sensor + { + case 1: + uLCD.cls(); + uLCD.locate(6,6); + uLCD.text_width(5); + uLCD.text_height(5); + uLCD.printf("C"); + //printf("%d", key_code); + myRGBled.write(0.0,0.0,1.0 ); +// wave_file=fopen("/sd/wavfiles/imperial_march.wav","r"); +// waver.play(wave_file); +// fclose(wave_file); + mySpeaker.PlayNote(261.6256, 0.5, 0.5); + break; + case 2: + uLCD.cls(); + uLCD.locate(6,6); + uLCD.text_width(5); + uLCD.text_height(5); + uLCD.printf("CS"); + myRGBled.write(1.0,0.0,0.0 ); + mySpeaker.PlayNote(277.1826, 0.5, 0.5); + break; + case 3: + uLCD.cls(); + uLCD.locate(6,6); + uLCD.text_width(5); + uLCD.text_height(5); + uLCD.printf("D"); + myRGBled.write(0.0,1.0,0.0 ); + mySpeaker.PlayNote(293.6648, 0.5, 0.5); + break; + case 4: + uLCD.cls(); + uLCD.locate(6,6); + uLCD.text_width(5); + uLCD.text_height(5); + uLCD.printf("DS"); + mySpeaker.PlayNote(311.1270, 0.5, 0.5); + break; + case 5: + uLCD.cls(); + uLCD.locate(6,6); + uLCD.text_width(5); + uLCD.text_height(5); + uLCD.printf("E"); + mySpeaker.PlayNote(329.6276, 0.5, 0.5); + break; + case 6: + uLCD.cls(); + uLCD.locate(6,6); + uLCD.text_width(5); + uLCD.text_height(5); + uLCD.printf("F"); + mySpeaker.PlayNote(349.2282, 0.5, 0.5); + break; + case 7: + uLCD.cls(); + uLCD.locate(6,6); + uLCD.text_width(5); + uLCD.text_height(5); + uLCD.printf("FS"); + mySpeaker.PlayNote(369.9944, 0.5, 0.5); + break; + case 8: + uLCD.cls(); + uLCD.locate(6,6); + uLCD.text_width(5); + uLCD.text_height(5); + uLCD.printf("G"); + mySpeaker.PlayNote(391.9954, 0.5, 0.5); + break; + case 9: + uLCD.cls(); + uLCD.locate(6,6); + uLCD.text_width(5); + uLCD.text_height(5); + uLCD.printf("GS"); + mySpeaker.PlayNote(415.3047, 0.5, 0.5); + break; + case 10: + uLCD.cls(); + uLCD.locate(6,6); + uLCD.text_width(5); + uLCD.text_height(5); + uLCD.printf("A"); + mySpeaker.PlayNote(440.0, 0.5, 0.5); + break; + case 11: + uLCD.cls(); + uLCD.locate(6,6); + uLCD.text_width(5); + uLCD.text_height(5); + uLCD.printf("AS"); + mySpeaker.PlayNote(466.1638, 0.5, 0.5); + break; + case 12: + uLCD.cls(); + uLCD.locate(6,6); + uLCD.text_width(5); + uLCD.text_height(5); + uLCD.printf("B"); + mySpeaker.PlayNote(493.8833, 0.5, 0.5); + break; + } + } + } +} - switch(key_code) //uses a case statement for each individual touch sensor - { - case 1: - wave_file = fopen("/sd/piano/a12.wav","r"); - waver.play(wave_file); - fclose(wave_file); - // mySpeaker.PlayNote(969.0, 0.5, 1.0); - // mySpeaker.PlayNote(200.0, 0.1, 0.1); - // mySpeaker.PlayNote(200.0, 0.1, 0.1); - // led1 = 1; - break; - case 2: - - wave_file = fopen("/sd/piano/c12.wav","r"); - waver.play(wave_file); - fclose(wave_file); - //mySpeaker.PlayNote(300.0, 0.1, 0.1); -// wave_file = fopen("/sd/piano_B.wav","r"); -// waver.play(wave_file, &PlayPtr); -// fclose(wave_file); - break; - case 3: - // mySpeaker.PlayNote(500.0, 0.15, 0.1); -// wave_file = fopen("/sd/piano_A_sharp.wav","r"); -// waver.play(wave_file, &PlayPtr); -// fclose(wave_file); - break; - case 4: - // mySpeaker.PlayNote(700.0, 0.15, 0.1); -// wave_file = fopen("/sd/Gb3.wav","r"); -// waver.play(wave_file, &PlayPtr); -// fclose(wave_file); - break; - case 5: - // mySpeaker.PlayNote(600.0, 0.15, 0.1); -// wave_file = fopen("/sd/G3.wav","r"); -// waver.play(wave_file, &PlayPtr); -// fclose(wave_file); - break; - case 6: - // mySpeaker.PlayNote(969.0, 0.5, 0.5); -// wave_file = fopen("/sd/F3.wav","r"); -// waver.play(wave_file, &PlayPtr); -// fclose(wave_file); - break; - case 7: - // mySpeaker.PlayNote(161.0, 0.25, 0.01); -// wave_file = fopen("/sd/Eb4.wav","r"); -// waver.play(wave_file, &PlayPtr); -// fclose(wave_file); - break; - case 8: - // mySpeaker.PlayNote(869.0, 0.5, 0.5); -// wave_file = fopen("/sd/Eb3.wav","r"); -// waver.play(wave_file, &PlayPtr); -// fclose(wave_file); - break; - case 9: - // mySpeaker.PlayNote(769.0, 0.5, 0.5); -// wave_file = fopen("/sd/E3.wav","r"); -// waver.play(wave_file, &PlayPtr); -// fclose(wave_file); - break; - case 10: - // mySpeaker.PlayNote(669.0, 0.5, 0.5); -// wave_file = fopen("/sd/Db4.wav","r"); -// waver.play(wave_file, &PlayPtr); -// fclose(wave_file); - break; - case 11: - // mySpeaker.PlayNote(469.0, 0.5, 0.5); -// wave_file = fopen("/sd/Db3.wav","r"); -// waver.play(wave_file, &PlayPtr); -// fclose(wave_file); - break; - case 12: - // mySpeaker.PlayNote(969.0, 0.5, 0.5); -// wave_file = fopen("/sd/D4.wav","r"); -// waver.play(wave_file, &PlayPtr); -// fclose(wave_file); - break; - default: -// wave_file = fopen("/sd/piano/a12.wav","r"); -// waver.play(wave_file); -// fclose(wave_file); - // mySpeaker.PlayNote(969.0, 0, 0); - break; - } -} -} -