ece 4180 project 2019

Dependencies:   mbed wave_player mbed-rtos 4DGL-uLCD-SE SDFileSystem FATFileSystem

Committer:
rhuang77
Date:
Mon Apr 15 20:17:08 2019 +0000
Revision:
1:549f56cb4740
Parent:
0:567492543056
Child:
2:270569d33ef1
new and improved

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rhuang77 0:567492543056 1 #include <mbed.h>
rhuang77 0:567492543056 2 #include <mpr121.h>
rhuang77 0:567492543056 3 #include "mbed.h"
rhuang77 0:567492543056 4 #include "uLCD_4DGL.h"
rhuang77 0:567492543056 5 #include "SDFileSystem.h"
rhuang77 0:567492543056 6 #include "FATFileSystem.h"
rhuang77 0:567492543056 7 #include "wave_player.h"
rhuang77 0:567492543056 8 #include <stdio.h>
rhuang77 0:567492543056 9 #include "Speaker.h"
rhuang77 1:549f56cb4740 10 #include "rtos.h"
rhuang77 1:549f56cb4740 11
rhuang77 1:549f56cb4740 12 //Class to control an RGB LED using three PWM pins
rhuang77 1:549f56cb4740 13 class RGBLed
rhuang77 1:549f56cb4740 14 {
rhuang77 1:549f56cb4740 15 public:
rhuang77 1:549f56cb4740 16 RGBLed(PinName redpin, PinName greenpin, PinName bluepin);
rhuang77 1:549f56cb4740 17 void write(float red,float green, float blue);
rhuang77 1:549f56cb4740 18 private:
rhuang77 1:549f56cb4740 19 PwmOut _redpin;
rhuang77 1:549f56cb4740 20 PwmOut _greenpin;
rhuang77 1:549f56cb4740 21 PwmOut _bluepin;
rhuang77 1:549f56cb4740 22 };
rhuang77 1:549f56cb4740 23
rhuang77 1:549f56cb4740 24 RGBLed::RGBLed (PinName redpin, PinName greenpin, PinName bluepin)
rhuang77 1:549f56cb4740 25 : _redpin(redpin), _greenpin(greenpin), _bluepin(bluepin)
rhuang77 1:549f56cb4740 26 {
rhuang77 1:549f56cb4740 27 //50Hz PWM clock default a bit too low, go to 2000Hz (less flicker)
rhuang77 1:549f56cb4740 28 _redpin.period(0.0005);
rhuang77 1:549f56cb4740 29 }
rhuang77 1:549f56cb4740 30
rhuang77 1:549f56cb4740 31 void RGBLed::write(float red,float green, float blue)
rhuang77 1:549f56cb4740 32 {
rhuang77 1:549f56cb4740 33 _redpin = red;
rhuang77 1:549f56cb4740 34 _greenpin = green;
rhuang77 1:549f56cb4740 35 _bluepin = blue;
rhuang77 1:549f56cb4740 36 }
rhuang77 1:549f56cb4740 37
rhuang77 1:549f56cb4740 38 //Setup RGB led using PWM pins and class
rhuang77 1:549f56cb4740 39 RGBLed myRGBled(p21,p22,p23); //RGB PWM pins
rhuang77 1:549f56cb4740 40
rhuang77 0:567492543056 41 DigitalOut led1(LED1);
rhuang77 0:567492543056 42 DigitalOut led2(LED2);
rhuang77 0:567492543056 43 DigitalOut led3(LED3);
rhuang77 0:567492543056 44 DigitalOut led4(LED4);
rhuang77 0:567492543056 45 // Create the interrupt receiver object on pin 26
rhuang77 0:567492543056 46 InterruptIn interrupt(p26);
rhuang77 0:567492543056 47 // Setup the i2c bus on pins 9 and 10
rhuang77 0:567492543056 48 I2C i2c(p9, p10);
rhuang77 0:567492543056 49 // Setup the Mpr121:
rhuang77 0:567492543056 50 // constructor(i2c object, i2c address of the mpr121)
rhuang77 0:567492543056 51 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
rhuang77 0:567492543056 52
rhuang77 1:549f56cb4740 53 //SDFileSystem sd(p5, p6, p7, p8, "sd");
rhuang77 1:549f56cb4740 54 uLCD_4DGL uLCD(p13,p14,p11);
rhuang77 0:567492543056 55
rhuang77 1:549f56cb4740 56 //AnalogOut DACout(p18);
rhuang77 1:549f56cb4740 57 //wave_player waver(&DACout);
rhuang77 1:549f56cb4740 58 //FILE *wave_file;
rhuang77 0:567492543056 59
rhuang77 1:549f56cb4740 60 int key_code;
rhuang77 1:549f56cb4740 61 // Key hit/release interrupt routine
rhuang77 0:567492543056 62 void fallInterrupt() {
rhuang77 1:549f56cb4740 63 key_code=0;
rhuang77 0:567492543056 64 int i=0;
rhuang77 0:567492543056 65 int value=mpr121.read(0x00);
rhuang77 0:567492543056 66 value +=mpr121.read(0x01)<<8;
rhuang77 0:567492543056 67 // LED demo mod
rhuang77 0:567492543056 68 i=0;
rhuang77 0:567492543056 69 // puts key number out to LEDs for demo
rhuang77 0:567492543056 70 for (i=0; i<12; i++) {
rhuang77 1:549f56cb4740 71 if (((value>>i)&0x01)==1) key_code=i+1;
rhuang77 0:567492543056 72 }
rhuang77 0:567492543056 73 led4=key_code & 0x01;
rhuang77 0:567492543056 74 led3=(key_code>>1) & 0x01;
rhuang77 0:567492543056 75 led2=(key_code>>2) & 0x01;
rhuang77 0:567492543056 76 led1=(key_code>>3) & 0x01;
rhuang77 0:567492543056 77 }
rhuang77 1:549f56cb4740 78
rhuang77 1:549f56cb4740 79 void song1(void const *args) {
rhuang77 1:549f56cb4740 80
rhuang77 1:549f56cb4740 81 }
rhuang77 1:549f56cb4740 82
rhuang77 0:567492543056 83 int main() {
rhuang77 1:549f56cb4740 84 // SongPlayer mySpeaker(p25);
rhuang77 1:549f56cb4740 85 Speaker mySpeaker(p25);
rhuang77 0:567492543056 86 interrupt.fall(&fallInterrupt);
rhuang77 0:567492543056 87 interrupt.mode(PullUp);
rhuang77 1:549f56cb4740 88
rhuang77 1:549f56cb4740 89 uLCD.printf("welcome :)");
rhuang77 1:549f56cb4740 90 wait(2.0);
rhuang77 1:549f56cb4740 91 //uLCD.locate(3,3);
rhuang77 1:549f56cb4740 92 //uLCD.text_width(4);
rhuang77 1:549f56cb4740 93 //uLCD.text_height(4);
rhuang77 1:549f56cb4740 94 int song[14] = {1, 1,8,8,10,10,8,6,6,5,5,3,3,1};
rhuang77 1:549f56cb4740 95 char note[14] = {'C','C','G','G','A','A','G','F','F','E','E','D','D','C'};
rhuang77 1:549f56cb4740 96 int i= 0;
rhuang77 1:549f56cb4740 97 while (1) {
rhuang77 1:549f56cb4740 98
rhuang77 1:549f56cb4740 99 if(true) {
rhuang77 1:549f56cb4740 100 //uLCD.printf("starting song");
rhuang77 1:549f56cb4740 101 wait(1.0);
rhuang77 1:549f56cb4740 102 while(i <14) {
rhuang77 1:549f56cb4740 103 // uLCD.cls();
rhuang77 1:549f56cb4740 104 uLCD.locate(3,3);
rhuang77 1:549f56cb4740 105 uLCD.text_width(4);
rhuang77 1:549f56cb4740 106 uLCD.text_height(4);
rhuang77 1:549f56cb4740 107 uLCD.printf("%s",note[i]);
rhuang77 1:549f56cb4740 108
rhuang77 1:549f56cb4740 109 switch(key_code) //uses a case statement for each individual touch sensor
rhuang77 1:549f56cb4740 110 {
rhuang77 1:549f56cb4740 111 case 1:
rhuang77 1:549f56cb4740 112 mySpeaker.PlayNote(261.6256, 0.5, 0.5);
rhuang77 1:549f56cb4740 113 break;
rhuang77 1:549f56cb4740 114 case 2:
rhuang77 1:549f56cb4740 115 mySpeaker.PlayNote(277.1826, 0.5, 0.5);
rhuang77 1:549f56cb4740 116 break;
rhuang77 1:549f56cb4740 117 case 3:
rhuang77 1:549f56cb4740 118 mySpeaker.PlayNote(293.6648, 0.5, 0.5);
rhuang77 1:549f56cb4740 119 break;
rhuang77 1:549f56cb4740 120 case 4:
rhuang77 1:549f56cb4740 121 mySpeaker.PlayNote(311.1270, 0.5, 0.5);
rhuang77 1:549f56cb4740 122 break;
rhuang77 1:549f56cb4740 123 case 5:
rhuang77 1:549f56cb4740 124 mySpeaker.PlayNote(329.6276, 0.5, 0.5);
rhuang77 1:549f56cb4740 125 break;
rhuang77 1:549f56cb4740 126 case 6:
rhuang77 1:549f56cb4740 127 mySpeaker.PlayNote(349.2282, 0.5, 0.5);
rhuang77 1:549f56cb4740 128 break;
rhuang77 1:549f56cb4740 129 case 7:
rhuang77 1:549f56cb4740 130 mySpeaker.PlayNote(369.9944, 0.5, 0.5);
rhuang77 1:549f56cb4740 131 break;
rhuang77 1:549f56cb4740 132 case 8:
rhuang77 1:549f56cb4740 133 mySpeaker.PlayNote(391.9954, 0.5, 0.5);
rhuang77 1:549f56cb4740 134 break;
rhuang77 1:549f56cb4740 135 case 9:
rhuang77 1:549f56cb4740 136 mySpeaker.PlayNote(415.3047, 0.5, 0.5);
rhuang77 1:549f56cb4740 137 break;
rhuang77 1:549f56cb4740 138 case 10:
rhuang77 1:549f56cb4740 139 mySpeaker.PlayNote(440.0, 0.5, 0.5);
rhuang77 1:549f56cb4740 140 break;
rhuang77 1:549f56cb4740 141 case 11:
rhuang77 1:549f56cb4740 142 mySpeaker.PlayNote(466.1638, 0.5, 0.5);
rhuang77 1:549f56cb4740 143 break;
rhuang77 1:549f56cb4740 144 case 12:
rhuang77 1:549f56cb4740 145 mySpeaker.PlayNote(493.8833, 0.5, 0.5);
rhuang77 1:549f56cb4740 146 break;
rhuang77 1:549f56cb4740 147 }
rhuang77 1:549f56cb4740 148
rhuang77 1:549f56cb4740 149 if(song[i]==key_code){
rhuang77 1:549f56cb4740 150 myRGBled.write(0.0,1.0,0.0 );
rhuang77 1:549f56cb4740 151 i++;
rhuang77 1:549f56cb4740 152 } else if (song[i] != key_code) {
rhuang77 1:549f56cb4740 153 myRGBled.write(1.0,0.0,0.0 );
rhuang77 1:549f56cb4740 154 } else if (key_code == 0) {
rhuang77 1:549f56cb4740 155 myRGBled.write(0.0,1.0,0.0 );
rhuang77 1:549f56cb4740 156 }
rhuang77 0:567492543056 157
rhuang77 1:549f56cb4740 158 }
rhuang77 1:549f56cb4740 159 i = 0;
rhuang77 1:549f56cb4740 160
rhuang77 1:549f56cb4740 161 } else {
rhuang77 1:549f56cb4740 162 switch(key_code) //uses a case statement for each individual touch sensor
rhuang77 1:549f56cb4740 163 {
rhuang77 1:549f56cb4740 164 case 1:
rhuang77 1:549f56cb4740 165 uLCD.cls();
rhuang77 1:549f56cb4740 166 uLCD.locate(6,6);
rhuang77 1:549f56cb4740 167 uLCD.text_width(5);
rhuang77 1:549f56cb4740 168 uLCD.text_height(5);
rhuang77 1:549f56cb4740 169 uLCD.printf("C");
rhuang77 1:549f56cb4740 170 //printf("%d", key_code);
rhuang77 1:549f56cb4740 171 myRGBled.write(0.0,0.0,1.0 );
rhuang77 1:549f56cb4740 172 // wave_file=fopen("/sd/wavfiles/imperial_march.wav","r");
rhuang77 1:549f56cb4740 173 // waver.play(wave_file);
rhuang77 1:549f56cb4740 174 // fclose(wave_file);
rhuang77 1:549f56cb4740 175 mySpeaker.PlayNote(261.6256, 0.5, 0.5);
rhuang77 1:549f56cb4740 176 break;
rhuang77 1:549f56cb4740 177 case 2:
rhuang77 1:549f56cb4740 178 uLCD.cls();
rhuang77 1:549f56cb4740 179 uLCD.locate(6,6);
rhuang77 1:549f56cb4740 180 uLCD.text_width(5);
rhuang77 1:549f56cb4740 181 uLCD.text_height(5);
rhuang77 1:549f56cb4740 182 uLCD.printf("CS");
rhuang77 1:549f56cb4740 183 myRGBled.write(1.0,0.0,0.0 );
rhuang77 1:549f56cb4740 184 mySpeaker.PlayNote(277.1826, 0.5, 0.5);
rhuang77 1:549f56cb4740 185 break;
rhuang77 1:549f56cb4740 186 case 3:
rhuang77 1:549f56cb4740 187 uLCD.cls();
rhuang77 1:549f56cb4740 188 uLCD.locate(6,6);
rhuang77 1:549f56cb4740 189 uLCD.text_width(5);
rhuang77 1:549f56cb4740 190 uLCD.text_height(5);
rhuang77 1:549f56cb4740 191 uLCD.printf("D");
rhuang77 1:549f56cb4740 192 myRGBled.write(0.0,1.0,0.0 );
rhuang77 1:549f56cb4740 193 mySpeaker.PlayNote(293.6648, 0.5, 0.5);
rhuang77 1:549f56cb4740 194 break;
rhuang77 1:549f56cb4740 195 case 4:
rhuang77 1:549f56cb4740 196 uLCD.cls();
rhuang77 1:549f56cb4740 197 uLCD.locate(6,6);
rhuang77 1:549f56cb4740 198 uLCD.text_width(5);
rhuang77 1:549f56cb4740 199 uLCD.text_height(5);
rhuang77 1:549f56cb4740 200 uLCD.printf("DS");
rhuang77 1:549f56cb4740 201 mySpeaker.PlayNote(311.1270, 0.5, 0.5);
rhuang77 1:549f56cb4740 202 break;
rhuang77 1:549f56cb4740 203 case 5:
rhuang77 1:549f56cb4740 204 uLCD.cls();
rhuang77 1:549f56cb4740 205 uLCD.locate(6,6);
rhuang77 1:549f56cb4740 206 uLCD.text_width(5);
rhuang77 1:549f56cb4740 207 uLCD.text_height(5);
rhuang77 1:549f56cb4740 208 uLCD.printf("E");
rhuang77 1:549f56cb4740 209 mySpeaker.PlayNote(329.6276, 0.5, 0.5);
rhuang77 1:549f56cb4740 210 break;
rhuang77 1:549f56cb4740 211 case 6:
rhuang77 1:549f56cb4740 212 uLCD.cls();
rhuang77 1:549f56cb4740 213 uLCD.locate(6,6);
rhuang77 1:549f56cb4740 214 uLCD.text_width(5);
rhuang77 1:549f56cb4740 215 uLCD.text_height(5);
rhuang77 1:549f56cb4740 216 uLCD.printf("F");
rhuang77 1:549f56cb4740 217 mySpeaker.PlayNote(349.2282, 0.5, 0.5);
rhuang77 1:549f56cb4740 218 break;
rhuang77 1:549f56cb4740 219 case 7:
rhuang77 1:549f56cb4740 220 uLCD.cls();
rhuang77 1:549f56cb4740 221 uLCD.locate(6,6);
rhuang77 1:549f56cb4740 222 uLCD.text_width(5);
rhuang77 1:549f56cb4740 223 uLCD.text_height(5);
rhuang77 1:549f56cb4740 224 uLCD.printf("FS");
rhuang77 1:549f56cb4740 225 mySpeaker.PlayNote(369.9944, 0.5, 0.5);
rhuang77 1:549f56cb4740 226 break;
rhuang77 1:549f56cb4740 227 case 8:
rhuang77 1:549f56cb4740 228 uLCD.cls();
rhuang77 1:549f56cb4740 229 uLCD.locate(6,6);
rhuang77 1:549f56cb4740 230 uLCD.text_width(5);
rhuang77 1:549f56cb4740 231 uLCD.text_height(5);
rhuang77 1:549f56cb4740 232 uLCD.printf("G");
rhuang77 1:549f56cb4740 233 mySpeaker.PlayNote(391.9954, 0.5, 0.5);
rhuang77 1:549f56cb4740 234 break;
rhuang77 1:549f56cb4740 235 case 9:
rhuang77 1:549f56cb4740 236 uLCD.cls();
rhuang77 1:549f56cb4740 237 uLCD.locate(6,6);
rhuang77 1:549f56cb4740 238 uLCD.text_width(5);
rhuang77 1:549f56cb4740 239 uLCD.text_height(5);
rhuang77 1:549f56cb4740 240 uLCD.printf("GS");
rhuang77 1:549f56cb4740 241 mySpeaker.PlayNote(415.3047, 0.5, 0.5);
rhuang77 1:549f56cb4740 242 break;
rhuang77 1:549f56cb4740 243 case 10:
rhuang77 1:549f56cb4740 244 uLCD.cls();
rhuang77 1:549f56cb4740 245 uLCD.locate(6,6);
rhuang77 1:549f56cb4740 246 uLCD.text_width(5);
rhuang77 1:549f56cb4740 247 uLCD.text_height(5);
rhuang77 1:549f56cb4740 248 uLCD.printf("A");
rhuang77 1:549f56cb4740 249 mySpeaker.PlayNote(440.0, 0.5, 0.5);
rhuang77 1:549f56cb4740 250 break;
rhuang77 1:549f56cb4740 251 case 11:
rhuang77 1:549f56cb4740 252 uLCD.cls();
rhuang77 1:549f56cb4740 253 uLCD.locate(6,6);
rhuang77 1:549f56cb4740 254 uLCD.text_width(5);
rhuang77 1:549f56cb4740 255 uLCD.text_height(5);
rhuang77 1:549f56cb4740 256 uLCD.printf("AS");
rhuang77 1:549f56cb4740 257 mySpeaker.PlayNote(466.1638, 0.5, 0.5);
rhuang77 1:549f56cb4740 258 break;
rhuang77 1:549f56cb4740 259 case 12:
rhuang77 1:549f56cb4740 260 uLCD.cls();
rhuang77 1:549f56cb4740 261 uLCD.locate(6,6);
rhuang77 1:549f56cb4740 262 uLCD.text_width(5);
rhuang77 1:549f56cb4740 263 uLCD.text_height(5);
rhuang77 1:549f56cb4740 264 uLCD.printf("B");
rhuang77 1:549f56cb4740 265 mySpeaker.PlayNote(493.8833, 0.5, 0.5);
rhuang77 1:549f56cb4740 266 break;
rhuang77 1:549f56cb4740 267 }
rhuang77 1:549f56cb4740 268 }
rhuang77 1:549f56cb4740 269 }
rhuang77 1:549f56cb4740 270 }
rhuang77 0:567492543056 271
rhuang77 0:567492543056 272
rhuang77 0:567492543056 273