テスト

Dependencies:   C12832 USBHost mbed MMA7660 wave_player

Fork of app-board-Speaker by Ryohei Funakoshi

Revision:
15:46ca600425fc
Parent:
14:3b123bcdd79c
Child:
16:12f30425ba88
--- a/main.cpp	Mon Dec 12 12:10:51 2016 +0000
+++ b/main.cpp	Tue Dec 13 08:02:54 2016 +0000
@@ -10,6 +10,9 @@
 #define THRESH 80
 #define COUNT_MAX 15
 #define DIM 3
+#define NUM_OF_NOTES 21
+#define NUM_OF_SCALE 2
+
 #include "C12832.h"
 #include "mbed.h"
 #include "rtos.h"
@@ -29,7 +32,7 @@
 PwmOut led3(p25);
 Semaphore three_slots(1);
 Timer for_chat;
-AnalogIn mypotentiometer(p19);
+
 
 //for acceleration sonsor
 MMA7660 acc(p28, p27);
@@ -38,13 +41,24 @@
 //for music
 AnalogOut DACout (p18);
 wave_player waver(&DACout);
+AnalogIn volumeMeter(p19);
+AnalogIn musicSwitch(p20);
+InterruptIn push(p14);
+InterruptIn right(p16);
+InterruptIn left(p13);
 
 int i=0;
 int count = 0;
+bool pushed = false;
+int i_for20mm;
+int i_for20mm_old = 0;
+int scale = 0;
 
 float mm[]={mC,mD,mE,mF,mG,mA,mB,mC*2,mD*2,mE*2,mF*2,mG*2,mA*2,mB*2,mC*4};
 
-float mmm[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//has 21
+float mmm[]={mC,mD,mE,mF,mG,mA,mB,mC*2,mD*2,mE*2,mF*2,mG*2,mA*2,mB*2,mC*4, mD*4,mE*4,mF*4,mG*4,mA*4,mB*4};//has 21
+float notes[NUM_OF_SCALE][NUM_OF_NOTES] = {  {mC,mD,mE,mF,mG,mA,mB,mC*2,mD*2,mE*2,mF*2,mG*2,mA*2,mB*2,mC*4, mD*4,mE*4,mF*4,mG*4,mA*4,mB*4},
+                                             {mC,mC,mC,mC,mC,mC,mC,mC,mC,mC,mF*2,mG*2,mA*2,mB*2,mC*4, mD*4,mE*4,mF*4,mG*4,mA*4,mB*4}};
 void intRise(void) 
 {    
     if(for_chat.read_ms()>THRESH);
@@ -73,6 +87,50 @@
     }        
 }
 
+void On(void)
+{
+    pushed = true;
+}
+
+void Off(void)
+{
+    pushed = false;
+}
+
+void scaleUp(void)
+{
+    if(for_chat.read_ms()>THRESH) ;
+    {
+        if (scale == NUM_OF_SCALE - 1)
+        {
+            scale = 0;
+        } else
+        {
+            scale++;
+        }
+        //lcd.locate(10,10);
+        //lcd.printf("scale %d", scale);
+    }
+    for_chat.reset();
+}
+
+void scaleDown(void)
+{
+    if(for_chat.read_ms()>THRESH) ;
+    {
+        if (scale == 0)
+        {
+            scale = NUM_OF_SCALE - 1;
+        } else 
+        {
+            scale--;
+        }
+        //lcd.locate(10,10);
+        //lcd.printf("scale %d", scale);
+    }
+    for_chat.reset();
+}
+
 
 void r_thread(void const *argument) 
 {
@@ -293,12 +351,14 @@
 
 void disp_thread(void const *argument) 
 {
-    float mpmeter;
-    int i_for20mm;
+    float volume;
+    float mswitch;
+    
     while (true) 
     {
-        mpmeter = mypotentiometer.read();
-        i_for20mm = (int)(mpmeter*20);//change 20 param
+        volume = volumeMeter.read();
+        mswitch = musicSwitch.read();
+        i_for20mm = (int)(mswitch*20);//change 20 param
         //wait(mpmeter);
         //lcd.locate(0,10);
         //lcd.printf("mpmeter = %f", mpmeter);
@@ -307,13 +367,29 @@
         //lcd.locate(0,10);
         //lcd.printf("i = %d  ", i_for20mm);
         
-        // example sound (odd sound)
-        mmm[i_for20mm] = mpmeter*100; // mmm[0-20] <- any param
-        sp1.period(1.0/(mmm[i_for20mm]));
-        sp1.write(0.5f);
+        if (i_for20mm != i_for20mm_old)
+        {
+            sp1.period(1.0/(notes[scale][i_for20mm]));
+        }
+        i_for20mm_old = i_for20mm;
+        
+        if(pushed)
+        {
+            sp1.write(volume);
+        }
+        else
+        {
+            sp1.write(0.0f);
+        }   
+        
+        for_chat.reset();
         /////////////////////////////
+        
+        //for debug
+        //lcd.locate(0,0);
+        //lcd.printf("volume = %f", volume);
         //wait(mpmeter);
-        Thread::wait(2);
+        Thread::wait(50);
     }
 } 
 
@@ -324,6 +400,12 @@
     for_chat.start();
     myup.fall(&intRise);
     mydown.fall(&intFall);
+    push.rise(&On);
+    push.fall(&Off);
+    right.rise(&scaleUp);
+    left.rise(&scaleDown);
+    
+    
     //Thread thread1(r_thread,(void *)"Th 1");
     //Thread thread2(g_thread,(void *)"Th 2");
     //Thread thread3(b_thread,(void *)"Th 3");
@@ -342,7 +424,7 @@
     //for music file
     FILE *wave_file;
     //sp1.period(1.0 / 16000.0);
-    wave_file = fopen("/usb/music/BGMforMBED2-lowQ.wav", "r");
+    wave_file = fopen("/usb/music/BGMforMBED2.wav", "r");
     waver.play(wave_file);
     fclose(wave_file);