adfdafa

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

Committer:
agamemaker
Date:
Mon Apr 11 16:50:37 2016 +0000
Revision:
0:5369e93c00ed
afdsad

Who changed what in which revision?

UserRevisionLine numberNew contents of line
agamemaker 0:5369e93c00ed 1 #include "mbed.h"
agamemaker 0:5369e93c00ed 2 #include "Speaker.h"
agamemaker 0:5369e93c00ed 3 #include "SDFileSystem.h"
agamemaker 0:5369e93c00ed 4 #include "TextLCD.h"
agamemaker 0:5369e93c00ed 5 #include "PinDetect.h"
agamemaker 0:5369e93c00ed 6 #include "wave_player.h"
agamemaker 0:5369e93c00ed 7 #include "uLCD_4DGL.h"
agamemaker 0:5369e93c00ed 8 #include <vector>
agamemaker 0:5369e93c00ed 9 #include <string>
agamemaker 0:5369e93c00ed 10
agamemaker 0:5369e93c00ed 11 //Pin setup
agamemaker 0:5369e93c00ed 12 DigitalOut myled(LED1);
agamemaker 0:5369e93c00ed 13 PinDetect pb1(p26);
agamemaker 0:5369e93c00ed 14 PinDetect pb2(p25);
agamemaker 0:5369e93c00ed 15 PinDetect pb3(p24);
agamemaker 0:5369e93c00ed 16 PinDetect pb4(p23);
agamemaker 0:5369e93c00ed 17 DigitalIn sdd(p12);
agamemaker 0:5369e93c00ed 18 DigitalOut myLED1(LED1);
agamemaker 0:5369e93c00ed 19 DigitalOut myLED2(LED2);
agamemaker 0:5369e93c00ed 20 DigitalOut myLED3(LED3);
agamemaker 0:5369e93c00ed 21 DigitalOut myLED4(LED4);
agamemaker 0:5369e93c00ed 22 TextLCD panel(p14, p15, p16, p17, p19, p20);
agamemaker 0:5369e93c00ed 23 uLCD_4DGL lcd(p28,p27,p29);
agamemaker 0:5369e93c00ed 24 AnalogOut DACout(p18);
agamemaker 0:5369e93c00ed 25 wave_player waver(&DACout);
agamemaker 0:5369e93c00ed 26 SDFileSystem sd(p5, p6, p7, p8, "sd");
agamemaker 0:5369e93c00ed 27
agamemaker 0:5369e93c00ed 28 //Globals
agamemaker 0:5369e93c00ed 29 vector <string> filenames;
agamemaker 0:5369e93c00ed 30 int current = 0;
agamemaker 0:5369e93c00ed 31 bool play = false, sd_insert = false;
agamemaker 0:5369e93c00ed 32 static int veclen = 5;
agamemaker 0:5369e93c00ed 33 FILE *wave_file;
agamemaker 0:5369e93c00ed 34
agamemaker 0:5369e93c00ed 35 void sd_check(){
agamemaker 0:5369e93c00ed 36 int sdPre = sdd.read();
agamemaker 0:5369e93c00ed 37 while (sdPre == 0){
agamemaker 0:5369e93c00ed 38 lcd.locate(0,0);
agamemaker 0:5369e93c00ed 39 lcd.printf("Insert SD card");
agamemaker 0:5369e93c00ed 40 sdPre = sdd.read();
agamemaker 0:5369e93c00ed 41 wait (.5);
agamemaker 0:5369e93c00ed 42 }
agamemaker 0:5369e93c00ed 43 lcd.cls();
agamemaker 0:5369e93c00ed 44 }
agamemaker 0:5369e93c00ed 45
agamemaker 0:5369e93c00ed 46 void write_screen()
agamemaker 0:5369e93c00ed 47 {
agamemaker 0:5369e93c00ed 48 lcd.locate(0,0);
agamemaker 0:5369e93c00ed 49 string name;
agamemaker 0:5369e93c00ed 50 int j = 0;
agamemaker 0:5369e93c00ed 51 vector<string>::iterator it;
agamemaker 0:5369e93c00ed 52 //lcd.cls();
agamemaker 0:5369e93c00ed 53 for(it = filenames.begin(); it < filenames.end(); it++) {
agamemaker 0:5369e93c00ed 54 name = (*it).c_str();
agamemaker 0:5369e93c00ed 55 name.erase((name.length()-4),4);
agamemaker 0:5369e93c00ed 56 if(j++ == current){
agamemaker 0:5369e93c00ed 57 lcd.printf("~");
agamemaker 0:5369e93c00ed 58 }
agamemaker 0:5369e93c00ed 59 else{
agamemaker 0:5369e93c00ed 60 lcd.printf(" ");
agamemaker 0:5369e93c00ed 61 }
agamemaker 0:5369e93c00ed 62 if(name.length() > 17){
agamemaker 0:5369e93c00ed 63 name.erase(17,(17-name.length()));
agamemaker 0:5369e93c00ed 64 lcd.printf("%s",name);
agamemaker 0:5369e93c00ed 65 }
agamemaker 0:5369e93c00ed 66 else{
agamemaker 0:5369e93c00ed 67 lcd.printf("%s\n",name);
agamemaker 0:5369e93c00ed 68 }
agamemaker 0:5369e93c00ed 69 }
agamemaker 0:5369e93c00ed 70 /*for(int j = 0; j > veclen; j++){
agamemaker 0:5369e93c00ed 71 lcd.locate(0,j);
agamemaker 0:5369e93c00ed 72 if(j == current){
agamemaker 0:5369e93c00ed 73 lcd.printf("~");
agamemaker 0:5369e93c00ed 74 }
agamemaker 0:5369e93c00ed 75 else{
agamemaker 0:5369e93c00ed 76 lcd.printf("~");
agamemaker 0:5369e93c00ed 77 }
agamemaker 0:5369e93c00ed 78 }*/
agamemaker 0:5369e93c00ed 79 }
agamemaker 0:5369e93c00ed 80
agamemaker 0:5369e93c00ed 81 void write_panel()
agamemaker 0:5369e93c00ed 82 {
agamemaker 0:5369e93c00ed 83 panel.cls();
agamemaker 0:5369e93c00ed 84 if(play == true){
agamemaker 0:5369e93c00ed 85 string name;
agamemaker 0:5369e93c00ed 86 vector<string>::iterator it;
agamemaker 0:5369e93c00ed 87 it = filenames.begin() + current;
agamemaker 0:5369e93c00ed 88 name = (*it).c_str();
agamemaker 0:5369e93c00ed 89 name.erase((name.length()-4),4);
agamemaker 0:5369e93c00ed 90 if(name.length() > 16){
agamemaker 0:5369e93c00ed 91 name.erase(16,(16-name.length()));
agamemaker 0:5369e93c00ed 92 panel.printf("%s",name);
agamemaker 0:5369e93c00ed 93 }
agamemaker 0:5369e93c00ed 94 else{
agamemaker 0:5369e93c00ed 95 panel.printf("%s\n",name);
agamemaker 0:5369e93c00ed 96 }
agamemaker 0:5369e93c00ed 97 }
agamemaker 0:5369e93c00ed 98 else{
agamemaker 0:5369e93c00ed 99 panel.printf("Stopped\n");
agamemaker 0:5369e93c00ed 100 }
agamemaker 0:5369e93c00ed 101 for(int i = 0; i < 16; i++){
agamemaker 0:5369e93c00ed 102 if(i < waver.volume){
agamemaker 0:5369e93c00ed 103 panel.printf("*");
agamemaker 0:5369e93c00ed 104 }
agamemaker 0:5369e93c00ed 105 else
agamemaker 0:5369e93c00ed 106 {
agamemaker 0:5369e93c00ed 107 panel.printf(" ");
agamemaker 0:5369e93c00ed 108 }
agamemaker 0:5369e93c00ed 109 }
agamemaker 0:5369e93c00ed 110 }
agamemaker 0:5369e93c00ed 111 void play_file()
agamemaker 0:5369e93c00ed 112 {
agamemaker 0:5369e93c00ed 113 bool* play_point = &play;
agamemaker 0:5369e93c00ed 114 string file_name("/sd/");
agamemaker 0:5369e93c00ed 115 file_name += filenames[current];
agamemaker 0:5369e93c00ed 116 wave_file = fopen(file_name.c_str(),"r");
agamemaker 0:5369e93c00ed 117 waver.play(wave_file, play_point);
agamemaker 0:5369e93c00ed 118 fclose(wave_file);
agamemaker 0:5369e93c00ed 119 play = false;
agamemaker 0:5369e93c00ed 120 write_panel();
agamemaker 0:5369e93c00ed 121 }
agamemaker 0:5369e93c00ed 122
agamemaker 0:5369e93c00ed 123 //Push buttons
agamemaker 0:5369e93c00ed 124 void pb1_hit_callback (void)
agamemaker 0:5369e93c00ed 125 {
agamemaker 0:5369e93c00ed 126 if(play == false){
agamemaker 0:5369e93c00ed 127 current = (current-1) % veclen;
agamemaker 0:5369e93c00ed 128 if(current < 0){
agamemaker 0:5369e93c00ed 129 current += veclen;
agamemaker 0:5369e93c00ed 130 }
agamemaker 0:5369e93c00ed 131 write_screen();
agamemaker 0:5369e93c00ed 132 }
agamemaker 0:5369e93c00ed 133 }
agamemaker 0:5369e93c00ed 134
agamemaker 0:5369e93c00ed 135 void pb2_hit_callback (void)
agamemaker 0:5369e93c00ed 136 {
agamemaker 0:5369e93c00ed 137 if(play == false){
agamemaker 0:5369e93c00ed 138 current = (1+current) % veclen;
agamemaker 0:5369e93c00ed 139 write_screen();
agamemaker 0:5369e93c00ed 140 }
agamemaker 0:5369e93c00ed 141 }
agamemaker 0:5369e93c00ed 142
agamemaker 0:5369e93c00ed 143 void pb3_hit_callback (void)
agamemaker 0:5369e93c00ed 144 {
agamemaker 0:5369e93c00ed 145 play = !play;
agamemaker 0:5369e93c00ed 146 write_panel();
agamemaker 0:5369e93c00ed 147 }
agamemaker 0:5369e93c00ed 148
agamemaker 0:5369e93c00ed 149 void pb4_hit_callback (void)
agamemaker 0:5369e93c00ed 150 {
agamemaker 0:5369e93c00ed 151 waver.volume--;
agamemaker 0:5369e93c00ed 152 if(waver.volume < 0){
agamemaker 0:5369e93c00ed 153 waver.volume = 16;
agamemaker 0:5369e93c00ed 154 }
agamemaker 0:5369e93c00ed 155 write_panel();
agamemaker 0:5369e93c00ed 156
agamemaker 0:5369e93c00ed 157 }
agamemaker 0:5369e93c00ed 158
agamemaker 0:5369e93c00ed 159 //Set up
agamemaker 0:5369e93c00ed 160 void push_set()
agamemaker 0:5369e93c00ed 161 {
agamemaker 0:5369e93c00ed 162 // Use internal pullups for the three pushbuttons
agamemaker 0:5369e93c00ed 163 pb1.mode(PullUp);
agamemaker 0:5369e93c00ed 164 pb2.mode(PullUp);
agamemaker 0:5369e93c00ed 165 pb3.mode(PullUp);
agamemaker 0:5369e93c00ed 166 pb4.mode(PullUp);
agamemaker 0:5369e93c00ed 167 // Delay for initial pullup to take effect
agamemaker 0:5369e93c00ed 168 wait(.01);
agamemaker 0:5369e93c00ed 169 // Setup Interrupt callback functions for a pb hit
agamemaker 0:5369e93c00ed 170 pb1.attach_deasserted(&pb1_hit_callback);
agamemaker 0:5369e93c00ed 171 pb2.attach_deasserted(&pb2_hit_callback);
agamemaker 0:5369e93c00ed 172 pb3.attach_deasserted(&pb3_hit_callback);
agamemaker 0:5369e93c00ed 173 pb4.attach_deasserted(&pb4_hit_callback);
agamemaker 0:5369e93c00ed 174 // Start sampling pb inputs using interrupts
agamemaker 0:5369e93c00ed 175 pb1.setSampleFrequency();
agamemaker 0:5369e93c00ed 176 pb2.setSampleFrequency();
agamemaker 0:5369e93c00ed 177 pb3.setSampleFrequency();
agamemaker 0:5369e93c00ed 178 pb4.setSampleFrequency();
agamemaker 0:5369e93c00ed 179 }
agamemaker 0:5369e93c00ed 180
agamemaker 0:5369e93c00ed 181 //File reads
agamemaker 0:5369e93c00ed 182 void read_file_names(char *dir)
agamemaker 0:5369e93c00ed 183 {
agamemaker 0:5369e93c00ed 184 DIR *dp;
agamemaker 0:5369e93c00ed 185 struct dirent *dirp;
agamemaker 0:5369e93c00ed 186 dp = opendir(dir);
agamemaker 0:5369e93c00ed 187 //read all directory and file names in current directory into filename vector
agamemaker 0:5369e93c00ed 188 while((dirp = readdir(dp)) != NULL) {
agamemaker 0:5369e93c00ed 189 filenames.push_back(string(dirp->d_name));
agamemaker 0:5369e93c00ed 190 }
agamemaker 0:5369e93c00ed 191 }
agamemaker 0:5369e93c00ed 192
agamemaker 0:5369e93c00ed 193 int main()
agamemaker 0:5369e93c00ed 194 {
agamemaker 0:5369e93c00ed 195 lcd.cls();
agamemaker 0:5369e93c00ed 196 panel.cls();
agamemaker 0:5369e93c00ed 197 sd_check();
agamemaker 0:5369e93c00ed 198 push_set();
agamemaker 0:5369e93c00ed 199 read_file_names("/sd/");
agamemaker 0:5369e93c00ed 200 write_screen();
agamemaker 0:5369e93c00ed 201 write_panel();
agamemaker 0:5369e93c00ed 202 while(true)
agamemaker 0:5369e93c00ed 203 {
agamemaker 0:5369e93c00ed 204 wait(.01);
agamemaker 0:5369e93c00ed 205 if(play == true)
agamemaker 0:5369e93c00ed 206 {
agamemaker 0:5369e93c00ed 207 play_file();
agamemaker 0:5369e93c00ed 208 }
agamemaker 0:5369e93c00ed 209 }
agamemaker 0:5369e93c00ed 210 }