Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed wave_player mbed-rtos 4DGL-uLCD-SE SDFileSystem FATFileSystem
Revision 1:549f56cb4740, committed 2019-04-15
- Comitter:
- rhuang77
- Date:
- Mon Apr 15 20:17:08 2019 +0000
- Parent:
- 0:567492543056
- Child:
- 2:270569d33ef1
- Commit message:
- new and improved
Changed in this revision
--- a/SDFileSystem.lib Fri Apr 12 01:18:47 2019 +0000 +++ b/SDFileSystem.lib Mon Apr 15 20:17:08 2019 +0000 @@ -1,1 +1,1 @@ -https://os.mbed.com/users/rhuang77/code/ElectricPiano/#e4bd923fd3b8 +https://os.mbed.com/users/4180_1/code/SDFileSystem/#42e77fa78bf5
--- 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;
- }
-}
-}
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Mon Apr 15 20:17:08 2019 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/mbed_official/code/mbed-rtos/#02f5cf381388
--- a/mbed.bld Fri Apr 12 01:18:47 2019 +0000 +++ b/mbed.bld Mon Apr 15 20:17:08 2019 +0000 @@ -1,1 +1,1 @@ -https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file +http://mbed.org/users/mbed_official/code/mbed/builds/34e6b704fe68 \ No newline at end of file