httpserver for Internet piano

Dependents:   Internet-Piano_WIZwiki-W7500 Internet-Piano_India_Academy

Fork of httpServer by IOP

Revision:
1:8291b3e9c064
Parent:
0:e59cc54df17c
Child:
3:4c09c3f44a8f
--- a/Handler/FsHandler.cpp	Mon Jun 29 09:03:40 2015 +0000
+++ b/Handler/FsHandler.cpp	Fri Jul 03 07:32:27 2015 +0000
@@ -4,13 +4,96 @@
 //#define DEBUG
 #include "hl_debug.h"
 
+#define Do3  131 //C octave3
+#define Do3s 139 //C#
+#define Re3  147 //D
+#define Re3s 156//D#
+#define Mi3  165 //E
+#define Fa3  175 //F
+#define Fa3s 185 //F#
+#define So3  196 //G
+#define So3s 208 //G#
+#define La3  220 //A
+#define La3s 233 //A#
+#define Ti3  247 //B
+#define Do4  262 //C octave4
+#define Do4s 277 //C#
+#define Re4  294 //D
+#define Re4s 311//D#
+#define Mi4  330 //E
+#define Fa4  349 //F
+#define Fa4s 370 //F#
+#define So4  392 //G
+#define So4s 415 //G#
+#define La4  440 //A
+#define La4s 466 //A#
+#define Ti4  494 //B
+#define Do5  523 //C octave5
+#define Do5s 554 //C#
+#define Re5  587 //D
+#define Re5s 622//D#
+#define Mi5  659 //E
+#define Fa5  699 //F
+#define Fa5s 740 //F#
+#define So5  784 //G
+#define So5s 831 //G#
+#define La5  880 //A
+#define La5s 932 //A#
+#define Ti5  988 //B
+
+PwmOut Buzzer(D5);
+
+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;
+       
+void Tune(PwmOut name, int period);
+void Auto_tunes(PwmOut name, int period);
+void Stop_tunes(PwmOut name);
+
 DigitalOut led_red(LED1);
 DigitalOut led_green(LED2);
 DigitalOut led_blue(LED3);
 
 DigitalIn  din(PC_14);
 
-
 static int matchstrings(const char* one, const char* two)
 {
     int m = 0;
@@ -145,31 +228,66 @@
 
 int HTTPFsRequestHandler::handlePostRequest()
 {
-    
+    int i = 0;
     int pin = 0;
     
-    if( std::string::npos != msg.uri.find("set_dio.cgi") )
+    if( std::string::npos != msg.uri.find("set_LED.cgi") )
     {
         pin = get_http_param_value("pin");
-        if(pin == 8)
-        {
-            led_red = get_http_param_value("val");
-        }
-        else if(pin == 9)
-        {
-            led_green = get_http_param_value("val");
-        }
-        else if(pin == 5)
-        {
-            led_blue = get_http_param_value("val");
-        }
+        if(pin==0)   Tune(Buzzer, C_4);
+        else if(pin==1) Tune(Buzzer, Cs_4);
+        else if(pin==2) Tune(Buzzer, D_4);
+        else if(pin==3) Tune(Buzzer, Ds_4);
+        else if(pin==4) Tune(Buzzer, E_4);
+        else if(pin==5) Tune(Buzzer, F_4);
+        else if(pin==6) Tune(Buzzer, Fs_4);
+        else if(pin==7) Tune(Buzzer, G_4);
+        else if(pin==8) Tune(Buzzer, Gs_4);
+        else if(pin==9) Tune(Buzzer, A_4);
+        else if(pin==10) Tune(Buzzer, As_4);
+        else if(pin==11) Tune(Buzzer, B_4);
+        else if(pin==12) Tune(Buzzer, C_5);
+        else if(pin==13) Tune(Buzzer, Cs_5);
+        else if(pin==14) Tune(Buzzer, D_5);
+        else if(pin==15) Tune(Buzzer, Ds_5);
+        else if(pin==16) Tune(Buzzer, E_5);
+        else if(pin==17) Tune(Buzzer, F_5);
+        else if(pin==18) Tune(Buzzer, Fs_5);
+        else if(pin==19) Tune(Buzzer, G_5);
+        else if(pin==20) Tune(Buzzer, Gs_5);
+        else if(pin==21) Tune(Buzzer, A_5);
+        else if(pin==22) Tune(Buzzer, As_5);
+        else if(pin==23) Tune(Buzzer, B_5);
         else
         {
             WARN("Wrong pin number");
         }   
         
         return 0;
-    }    
+    } 
+    else if( std::string::npos != msg.uri.find("set_AUTO.cgi") )
+    {
+        pin = get_http_param_value("pin");
+        if(pin==0)   
+        {
+            for(i=0; i<tones_num; i++)
+            {
+                Auto_tunes(Buzzer, tones[i]);
+                wait_ms(124);
+            }
+            Stop_tunes(Buzzer);
+        }
+        else if(pin == 99)
+        {
+            Stop_tunes(Buzzer);   
+        }    
+        else
+        {
+            WARN("Wrong pin number");
+        }   
+        
+        return 0;
+    }   
     else
     {
            return 404;
@@ -209,3 +327,34 @@
     return ret;
 }
 
+/**
+   * @brief     Tune Function
+   * @param  name : Choose the PwmOut
+                    period : this param is tune value. (C_3...B_5)
+   * @retval    None
+   */
+void Tune(PwmOut name, int period)
+{
+    name.period_us(period);
+    name.write(0.50f); // 50% duty cycle
+    wait_ms(250); // 1/4 beat
+    name.period_us(0); // Sound off
+}
+
+/**
+   * @brief     Auto tunes Function
+   * @param  name : Choose the PwmOut
+                    period : this param is tune value. (C_3...B_5)
+   * @retval    None
+   */
+void Auto_tunes(PwmOut name, int period)
+{
+    name.period_us(period);
+    name.write(0.50f); // 50% duty cycle
+    wait_ms(250); // 1/4 beat
+}
+
+void Stop_tunes(PwmOut name)
+{
+    name.period_us(0);
+}