Final Working Version of Songpop

Dependencies:   4DGL-uLCD-SE PinDetect SDFileSystem mbed wave_player

Revision:
0:10b73315cdb0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Mar 13 08:21:36 2015 +0000
@@ -0,0 +1,365 @@
+#include "mbed.h"
+#include <vector>
+#include "SDFileSystem.h"
+#include "uLCD_4DGL.h"
+#include <string>
+#include "PinDetect.h"
+#include "wave_player.h"
+#include "math.h"
+AnalogOut DACout(p18);
+wave_player waver(&DACout);
+DigitalOut myled(LED1);
+DigitalOut myled2(LED4);
+SDFileSystem sd(p5, p6, p7, p8,p14, "sd"); //SD card
+uLCD_4DGL lcd(p28, p27, p30);
+
+vector<string> filenames; //filenames are stored in a vector string
+vector<string> CopyMatSongs;
+string noextend; 
+int stringsize;
+void read_file_names(char *dir)
+{
+    DIR *dp;
+    struct dirent *dirp;
+    dp = opendir(dir);
+  //read all directory and file names in current directory into filename vector
+    while((dirp = readdir(dp)) != NULL) {
+        filenames.push_back(string(dirp->d_name));
+    }
+}
+int test;
+PinDetect A(p9);
+PinDetect B(p10);
+PinDetect D(p11);
+PinDetect C(p12);
+int count=0;
+int array17[100];
+int array4[100];
+string DummyMatrix[] = {"a","a","a","a"};
+int countstate = 0;
+int volatile songnum = 0 ;
+int numberofsongs;
+bool player = false;
+bool *playpoint = &player;
+string y ="";
+FILE *wave_file;
+
+ int placement = rand()%4;
+ int randsong = rand()%4;
+
+void D_callback (void)
+{   player = !player;
+    if(randsong != placement)
+{
+    myled2 = 1;
+    wait(1);
+    myled2 = 0;
+    DummyMatrix[0] = CopyMatSongs[array17[0+count]];
+    DummyMatrix[1] = CopyMatSongs[array17[1+count]];
+    DummyMatrix[2] = CopyMatSongs[array17[2+count]];
+    DummyMatrix[3] = CopyMatSongs[array17[3+count]];
+    placement = rand()%4;
+    randsong = rand()%4;
+    countstate=0;
+    count++;
+    }
+    else{
+         DummyMatrix[0] = CopyMatSongs[array17[0+count]];
+    DummyMatrix[1] = CopyMatSongs[array17[1+count]];
+    DummyMatrix[2] = CopyMatSongs[array17[2+count]];
+    DummyMatrix[3] = CopyMatSongs[array17[3+count]];
+    placement = rand()%4;
+    randsong = rand()%4;
+    countstate=0;
+    count++;
+        }
+    
+      
+}
+void A_callback (void)
+{   
+player = !player;
+
+if(randsong == 0 && placement == 0)
+{
+     myled2 = 1;
+    wait(1);
+    myled2 = 0;
+    DummyMatrix[0] = CopyMatSongs[array17[4+count]];
+    DummyMatrix[1] = CopyMatSongs[array17[5+count]];
+    DummyMatrix[2] = CopyMatSongs[array17[6+count]];
+    DummyMatrix[3] = CopyMatSongs[array17[7+count]];
+    placement = rand()%4;
+    randsong = rand()%4;
+    countstate=0;
+    count++;
+    }
+    else{
+        DummyMatrix[0] = CopyMatSongs[array17[4+count]];
+    DummyMatrix[1] = CopyMatSongs[array17[5+count]];
+    DummyMatrix[2] = CopyMatSongs[array17[6+count]];
+    DummyMatrix[3] = CopyMatSongs[array17[7+count]];
+    placement = rand()%4;
+    randsong = rand()%4;
+    countstate=0;
+    count++;
+        }
+    
+ }   
+
+
+
+void B_callback(void)
+{    player = !player;
+if(randsong ==1 &&  placement == 1)
+{
+     myled2 = 1;
+    wait(1);
+    myled2 = 0;
+    DummyMatrix[0] = CopyMatSongs[array17[8+count]];
+    DummyMatrix[1] = CopyMatSongs[array17[9+count]];
+    DummyMatrix[2] = CopyMatSongs[array17[10+count]];
+    DummyMatrix[3] = CopyMatSongs[array17[11+count]];
+    placement = rand()%4;
+    randsong = rand()%4;
+    countstate=0;
+    count++;
+    }
+    else{
+         DummyMatrix[0] = CopyMatSongs[array17[8+count]];
+    DummyMatrix[1] = CopyMatSongs[array17[9+count]];
+    DummyMatrix[2] = CopyMatSongs[array17[10+count]];
+    DummyMatrix[3] = CopyMatSongs[array17[11+count]];
+    placement = rand()%4;
+    randsong = rand()%4;
+    countstate=0;
+    count++;
+        }
+ }   
+
+
+
+
+void C_callback (void)
+{
+     player = !player;
+if(randsong == 2 &&  placement==2)
+{
+     myled2 = 1;
+    wait(1);
+    myled2 = 0;
+    DummyMatrix[0] = CopyMatSongs[array17[12+count]];
+    DummyMatrix[1] = CopyMatSongs[array17[13+count]];
+    DummyMatrix[2] = CopyMatSongs[array17[14+count]];
+    DummyMatrix[3] = CopyMatSongs[array17[15+count]];
+    placement = rand()%4;
+    randsong = rand()%4;
+    countstate=0;
+    count++;
+    }
+    else{
+        DummyMatrix[0] = CopyMatSongs[array17[12+count]];
+    DummyMatrix[1] = CopyMatSongs[array17[13+count]];
+    DummyMatrix[2] = CopyMatSongs[array17[14+count]];
+    DummyMatrix[3] = CopyMatSongs[array17[15+count]];
+    placement = rand()%4;
+    randsong = rand()%4;
+    countstate=0;
+    count++;
+        }   
+}
+
+int main()
+ 
+{
+     srand(2);
+    
+   
+     for(int i = 0; i < 100; i++)
+   {
+       
+       int x = rand()%4;
+       
+       array4[i] = x; 
+       
+       printf("%d\n\r ", array4[i]);
+       }
+     
+     for(int i = 0; i < 100; i++)
+   {
+       
+       int x = rand()%17;
+       
+       array17[i] = x; 
+       
+       printf("%d\n\r ", array17[i]);
+       }
+    while(1)
+    {
+      
+    /*if (sd.cdcheck()== false)  
+    {
+        lcd.cls();
+        lcd.printf("Please Insert SD Card\n");
+        wait(.1);
+    }
+    else 
+        {
+        lcd.cls();
+        lcd.printf("thank you");
+        lcd.locate(0,1);
+        lcd.printf("restart system");
+        wait(.1);
+        */        
+        
+    A.mode(PullUp);    
+    B.mode(PullUp);
+    D.mode(PullUp);
+    C.mode(PullUp);
+    wait(.01);
+
+    // Setup Interrupt callback functions for a pb hit
+    A.attach_deasserted(&A_callback);
+    B.attach_deasserted(&B_callback);
+    D.attach_deasserted(&D_callback);
+    C.attach_deasserted(&C_callback);
+
+    // Start sampling pb inputs using interrupts
+    A.setSampleFrequency();
+    B.setSampleFrequency();
+    D.setSampleFrequency();
+    C.setSampleFrequency();
+    
+    
+        // via interrupts that activate the callback counter function
+    
+    
+    wait(.001);
+     // read file names into vector of strings
+    read_file_names("/sd/myMusic");
+    numberofsongs= filenames.size();
+    printf("%d",numberofsongs);
+     // print filename strings from vector using an iterator
+     /*for(vector<string>::iterator it=filenames.begin(); it < filenames.end(); it++)  
+      {
+        printf("%s\n\r",(*it).c_str());
+        
+      }*/
+  
+  //this is what pulls in all file names and strips off .wav and puts it into vector
+  // name of vector is filename[index of i]
+      
+  
+      
+      //printf("%s CopyMatsongs:", CopyMatSongs);
+      for(int i=0; i < filenames.size(); i++)
+        {
+            noextend = filenames[i];
+            filenames[i] = noextend.substr(0, noextend.rfind("."));
+            printf("%s\n\r", filenames[i]);
+        }
+         CopyMatSongs = filenames;
+        //printf("%s\n\r", CopyMatSongs);
+        
+        printf("%s\n\r",DummyMatrix[0]);
+   
+       for(int aa = 0; aa <4; aa++)
+           {
+               DummyMatrix[array4[aa]] = CopyMatSongs[array17[aa]];
+               printf("%s \n\r", DummyMatrix[aa]);
+           }
+           
+            
+      
+        
+        while(1)
+        {  
+         if (countstate == 0)
+        {
+            
+            
+            lcd.cls();
+            if (placement == 0 && randsong==0)
+            {
+                test = 0;
+                lcd.locate(0,0);
+                lcd.printf("%s",DummyMatrix[randsong].substr(0, noextend.rfind(".")));
+                lcd.locate(0,1);
+                lcd.printf("%s",DummyMatrix[randsong+1].substr(0, noextend.rfind(".")));
+                lcd.locate(0,2);
+                lcd.printf("%s",DummyMatrix[randsong+2].substr(0, noextend.rfind(".")));
+                lcd.locate(0,3);
+                lcd.printf("%s",DummyMatrix[randsong+3].substr(0, noextend.rfind(".")));
+            }
+            
+            if(placement == 1 && randsong == 1)
+             {
+                test =1;
+                lcd.locate(0,0);
+                lcd.printf("%s",DummyMatrix[randsong-1].substr(0, noextend.rfind(".")));
+                lcd.locate(0,1);
+                lcd.printf("%s",DummyMatrix[randsong].substr(0, noextend.rfind(".")));
+                lcd.locate(0,2);
+                lcd.printf("%s",DummyMatrix[randsong+1].substr(0, noextend.rfind(".")));
+                lcd.locate(0,3);
+                lcd.printf("%s",DummyMatrix[randsong+2].substr(0, noextend.rfind(".")));
+            }
+            if(placement == 2 &&randsong == 2)
+             {
+                test = 2;
+                lcd.locate(0,0);
+                lcd.printf("%s",DummyMatrix[randsong-2].substr(0, noextend.rfind(".")));
+                lcd.locate(0,1);
+                lcd.printf("%s",DummyMatrix[randsong-1].substr(0, noextend.rfind(".")));
+                lcd.locate(0,2);
+                lcd.printf("%s",DummyMatrix[randsong].substr(0, noextend.rfind(".")));
+                lcd.locate(0,3);
+                lcd.printf("%s",DummyMatrix[randsong+1].substr(0, noextend.rfind(".")));
+            }
+            else
+            {
+                 {
+                     test=3;
+                lcd.locate(0,0);
+                lcd.printf("%s",DummyMatrix[0].substr(0, noextend.rfind(".")));
+                lcd.locate(0,1);
+                lcd.printf("%s",DummyMatrix[1].substr(0, noextend.rfind(".")));
+                lcd.locate(0,2);
+                lcd.printf("%s",DummyMatrix[2].substr(0, noextend.rfind(".")));
+                lcd.locate(0,3);
+                lcd.printf("%s",DummyMatrix[3].substr(0, noextend.rfind(".")));
+            }
+            }
+            player = !player;
+            countstate++;
+         }
+            if ( player == true)
+                {
+                 string xx = "/sd/myMusic/";
+                 //songnum is the index of the song being played in the array
+                 if(test == 3)
+                 { y = xx + DummyMatrix[3] + ".wav";
+                 }
+                 else{
+                  y = xx + DummyMatrix[randsong]+ ".wav";
+                 }
+                 y = y.c_str();
+                 //here is where it is actually playing the song
+                 wave_file=fopen(y.c_str(),"r");
+                 waver.play(wave_file, playpoint);
+                 fclose(wave_file);
+                 player = false;
+                }
+            myled = 1;
+            wait(.25);
+            myled=0;
+            
+            wait(.25);
+            
+          
+        }    
+    }
+}
+
+ 
+ 
\ No newline at end of file