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 2:270569d33ef1, committed 2019-04-20
- Comitter:
- rhuang77
- Date:
- Sat Apr 20 19:09:27 2019 +0000
- Parent:
- 1:549f56cb4740
- Child:
- 3:221fb009c1ac
- Commit message:
- added bluetooth feature
Changed in this revision
--- a/main.cpp Mon Apr 15 20:17:08 2019 +0000
+++ b/main.cpp Sat Apr 20 19:09:27 2019 +0000
@@ -20,24 +20,28 @@
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
+//Bluetooth
+Serial blue(p28,p27);
+Serial pc(USBTX, USBRX);
+
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
@@ -50,222 +54,319 @@
// constructor(i2c object, i2c address of the mpr121)
Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
-//SDFileSystem sd(p5, p6, p7, p8, "sd");
+SDFileSystem sd(p5, p6, p7, p8, "sd");
uLCD_4DGL uLCD(p13,p14,p11);
-//AnalogOut DACout(p18);
-//wave_player waver(&DACout);
-//FILE *wave_file;
+AnalogOut DACout(p18);
+wave_player waver(&DACout);
+FILE *wave_file;
- int key_code;
+Mutex stdio_mutex;
+
+int key_code;
// Key hit/release interrupt routine
-void fallInterrupt() {
- key_code=0;
- int i=0;
- int value=mpr121.read(0x00);
- value +=mpr121.read(0x01)<<8;
- // LED demo mod
- 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;
- }
- led4=key_code & 0x01;
- led3=(key_code>>1) & 0x01;
- led2=(key_code>>2) & 0x01;
- led1=(key_code>>3) & 0x01;
+void fallInterrupt()
+{
+ key_code=0;
+ int i=0;
+ int value=mpr121.read(0x00);
+ value +=mpr121.read(0x01)<<8;
+ // LED demo mod
+ 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;
+ }
+ 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 songcode = -1;
+int isplay = 0;
+int islearn = 0;
+float volume = 0.25;
+int octave = 3;
+
+
+void readblue()
+{
+ while(1) {
+
+ char bnum = 0;
+ if (blue.readable()) {
+ if (blue.getc()=='!') {
+ if (blue.getc() == 'I') {
+ bnum = blue.getc();
+ //button mode
+ if (bnum == 'B') {
+ bnum = blue.getc();
+ //play song
+ if (bnum == '0') {
+ islearn = 0;
+ isplay = 1;
+ songcode = blue.getc() - '0';
+ }
+ //learn song
+ if (bnum == '1') {
+ islearn = 1;
+ isplay = 0;
+ songcode = blue.getc() - '0';
+ }
+ }
+ //seekbar mode
+ if (bnum == 'S') {
+ islearn = 0;
+ isplay = 0;
+ bnum = blue.getc();
+ //octave change
+ if (bnum == '0') {
+ octave = blue.getc() - '0';
+ }
+ //volume change
+ if (bnum == '1') {
+ //get tens digit first
+ int actualVol = blue.getc() - '0';
+ actualVol *= 10;
+ //then get ones digit
+ actualVol += blue.getc() - '0';
+ volume = (float)actualVol/(float)100;
+ }
+ }
+ }
+ }
+ }
+ pc.printf("bye\n");
+ Thread::wait(200);
+ }
}
-int main() {
-// SongPlayer mySpeaker(p25);
-Speaker mySpeaker(p25);
- interrupt.fall(&fallInterrupt);
- interrupt.mode(PullUp);
-
-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 );
- }
+int main()
+{
+
+ Speaker mySpeaker(p25);
+ interrupt.fall(&fallInterrupt);
+ interrupt.mode(PullUp);
+ uLCD.printf("welcome :)\n");
+ wait(1.0);
+ uLCD.printf("Initializing...\n");
+ wait(1.0);
+ uLCD.cls();
+
+
+ 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;
+ Thread thread;
+ //thread.start(callback(readblue, (void *)"foo"));
+ thread.start(readblue);
+
+ while (1) {
+ // check blutooth input
+ //readblue();
+
+ //char bnum = 0;
+// char bnum1 = 0;
+// char bnum
+// bnum = blue.getc();
+ if(false) {
+ uLCD.printf("starting \nTwinkle Twinkle \nLittle Star");
+ wait(4.0);
+ uLCD.cls();
+ while(i <14) {
+ uLCD.text_width(3);
+ uLCD.text_height(3);
+ uLCD.locate(2,2);
+
+ uLCD.printf("%c",note[i]);
+
+ if(song[i]==key_code) {
+ myRGBled.write(0.0,1.0,0.0 );
+ uLCD.cls();
+ i++;
+ } else if (song[i] != key_code && key_code != 0) {
+ myRGBled.write(1.0,0.0,0.0 );
+ } else if (key_code == 0) {
+ myRGBled.write(0.0,0.0,0.0 );
+ }
+
+
+
+ switch(key_code) { //uses a case statement for each individual touch sensor
+
+
+ case 1:
+ mySpeaker.PlayNote(261.6256, 0.5, volume);
+ break;
+ case 2:
+ mySpeaker.PlayNote(277.1826, 0.5, volume);
+ break;
+ case 3:
+ mySpeaker.PlayNote(293.6648, 0.5, volume);
+ break;
+ case 4:
+ mySpeaker.PlayNote(311.1270, 0.5, volume);
+ break;
+ case 5:
+ mySpeaker.PlayNote(329.6276, 0.5, volume);
+ break;
+ case 6:
+ mySpeaker.PlayNote(349.2282, 0.5, volume);
+ break;
+ case 7:
+ mySpeaker.PlayNote(369.9944, 0.5, volume);
+ break;
+ case 8:
+ mySpeaker.PlayNote(391.9954, 0.5, volume);
+ break;
+ case 9:
+ mySpeaker.PlayNote(415.3047, 0.5, volume);
+ break;
+ case 10:
+ mySpeaker.PlayNote(440.0, 0.5, volume);
+ break;
+ case 11:
+ mySpeaker.PlayNote(466.1638, 0.5, volume);
+ break;
+ case 12:
+ mySpeaker.PlayNote(493.8833, 0.5, volume);
+ break;
+ }
+
+
+ }
+ i = 0;
+ uLCD.printf("Congratulations! \nYou learned \nTwinkle Twinkle \nLittle Star");
+ wait(4.0);
+ uLCD.cls();
+ } else if(false) {
+ uLCD.printf("Playing song");
+ wait(2.0);
+ wave_file=fopen("/sd/songs/mary.wav","r");
+ waver.play(wave_file);
+ fclose(wave_file);
+// wave_file=fopen("/sd/wavfiles/imperial_march.wav","r");
+// waver.play(wave_file);
+// fclose(wave_file);
}
- 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;
- }
- }
+
+ 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/songs/mary.wav","r");
+// if(wave_file==NULL) printf("file open error!\n\n\r");
+// printf("test");
+// waver.play(wave_file);
+// fclose(wave_file);
+ mySpeaker.PlayNote(261.6256, 0.5, volume);
+ pc.printf("hello\n");
+ 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, volume);
+ 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, volume);
+ 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, volume);
+ 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, volume);
+ 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, volume);
+ 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, volume);
+ 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, volume);
+ 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, volume);
+ 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, volume);
+ 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, volume);
+ 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, volume);
+ break;
+ }
+ }
+ Thread::wait(200);
}
}
--- a/mbed-rtos.lib Mon Apr 15 20:17:08 2019 +0000 +++ b/mbed-rtos.lib Sat Apr 20 19:09:27 2019 +0000 @@ -1,1 +1,1 @@ -http://developer.mbed.org/users/mbed_official/code/mbed-rtos/#02f5cf381388 +http://mbed.org/users/mbed_official/code/mbed-rtos/#5713cbbdb706
--- a/mbed.bld Mon Apr 15 20:17:08 2019 +0000 +++ b/mbed.bld Sat Apr 20 19:09:27 2019 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/34e6b704fe68 \ No newline at end of file +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file