A game by Ibrahim Khan and Saad Khan
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed wave_player
A game made by Ibrahim Khan and Saad Khan for ECE4180 Lab 4
main.cpp@0:cdde918d61ea, 2016-10-31 (annotated)
- Committer:
- gotmilk
- Date:
- Mon Oct 31 20:29:15 2016 +0000
- Revision:
- 0:cdde918d61ea
Animal Sound Game by Ibrahim Khan and Saad Khan
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gotmilk | 0:cdde918d61ea | 1 | #include "mbed.h" |
gotmilk | 0:cdde918d61ea | 2 | #include "uLCD_4DGL.h" |
gotmilk | 0:cdde918d61ea | 3 | #include "SDFileSystem.h" |
gotmilk | 0:cdde918d61ea | 4 | #include "wave_player.h" |
gotmilk | 0:cdde918d61ea | 5 | #include "mpr121.h" |
gotmilk | 0:cdde918d61ea | 6 | |
gotmilk | 0:cdde918d61ea | 7 | |
gotmilk | 0:cdde918d61ea | 8 | DigitalOut led1(LED1); |
gotmilk | 0:cdde918d61ea | 9 | DigitalOut led2(LED2); |
gotmilk | 0:cdde918d61ea | 10 | DigitalOut led3(LED3); |
gotmilk | 0:cdde918d61ea | 11 | DigitalOut led4(LED4); |
gotmilk | 0:cdde918d61ea | 12 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
gotmilk | 0:cdde918d61ea | 13 | AnalogOut DACout(p18); |
gotmilk | 0:cdde918d61ea | 14 | wave_player waver(&DACout); //speaker |
gotmilk | 0:cdde918d61ea | 15 | uLCD_4DGL uLCD(p28,p27,p30); // serial tx, serial rx, reset pin; |
gotmilk | 0:cdde918d61ea | 16 | InterruptIn interrupt(p26); |
gotmilk | 0:cdde918d61ea | 17 | I2C i2c(p9,p10); |
gotmilk | 0:cdde918d61ea | 18 | Mpr121 mpr121(&i2c, Mpr121::ADD_VSS); //touchpad |
gotmilk | 0:cdde918d61ea | 19 | int global = 0; //global variable for control statements |
gotmilk | 0:cdde918d61ea | 20 | |
gotmilk | 0:cdde918d61ea | 21 | void fallInterrupt() { |
gotmilk | 0:cdde918d61ea | 22 | int key_code=0; |
gotmilk | 0:cdde918d61ea | 23 | int i=0; |
gotmilk | 0:cdde918d61ea | 24 | int value=mpr121.read(0x00); |
gotmilk | 0:cdde918d61ea | 25 | value +=mpr121.read(0x01)<<8; |
gotmilk | 0:cdde918d61ea | 26 | // LED demo mod |
gotmilk | 0:cdde918d61ea | 27 | i=0; |
gotmilk | 0:cdde918d61ea | 28 | // puts key number out to LEDs for demo |
gotmilk | 0:cdde918d61ea | 29 | for (i=0; i<12; i++) { |
gotmilk | 0:cdde918d61ea | 30 | if (((value>>i)&0x01)==1) key_code=i+1; |
gotmilk | 0:cdde918d61ea | 31 | } |
gotmilk | 0:cdde918d61ea | 32 | led4=key_code & 0x01; |
gotmilk | 0:cdde918d61ea | 33 | led3=(key_code>>1) & 0x01; |
gotmilk | 0:cdde918d61ea | 34 | led2=(key_code>>2) & 0x01; |
gotmilk | 0:cdde918d61ea | 35 | led1=(key_code>>3) & 0x01; |
gotmilk | 0:cdde918d61ea | 36 | if (key_code != 0) { |
gotmilk | 0:cdde918d61ea | 37 | global = key_code; |
gotmilk | 0:cdde918d61ea | 38 | printf("%d\n", global); |
gotmilk | 0:cdde918d61ea | 39 | } |
gotmilk | 0:cdde918d61ea | 40 | |
gotmilk | 0:cdde918d61ea | 41 | } |
gotmilk | 0:cdde918d61ea | 42 | |
gotmilk | 0:cdde918d61ea | 43 | int main() { |
gotmilk | 0:cdde918d61ea | 44 | interrupt.fall(&fallInterrupt); //interupt routine for touchpad |
gotmilk | 0:cdde918d61ea | 45 | interrupt.mode(PullUp); |
gotmilk | 0:cdde918d61ea | 46 | int score = 0; //score of player |
gotmilk | 0:cdde918d61ea | 47 | volatile int v = 0; |
gotmilk | 0:cdde918d61ea | 48 | uLCD.media_init(); //init uLCd SD card |
gotmilk | 0:cdde918d61ea | 49 | uLCD.set_sector_address(0x003B, 0x5145); //Welcome screen |
gotmilk | 0:cdde918d61ea | 50 | uLCD.display_image(0,0); |
gotmilk | 0:cdde918d61ea | 51 | wait(4.0); |
gotmilk | 0:cdde918d61ea | 52 | uLCD.cls(); |
gotmilk | 0:cdde918d61ea | 53 | uLCD.printf("\n Press 0\n on touchpad\n to continue"); |
gotmilk | 0:cdde918d61ea | 54 | while(global != 1) { //block statement till user selects 0 |
gotmilk | 0:cdde918d61ea | 55 | led1 = 1; |
gotmilk | 0:cdde918d61ea | 56 | }; |
gotmilk | 0:cdde918d61ea | 57 | led1 = 0; //flip LED for visual cue |
gotmilk | 0:cdde918d61ea | 58 | global = 0; //reset global variable |
gotmilk | 0:cdde918d61ea | 59 | uLCD.cls(); |
gotmilk | 0:cdde918d61ea | 60 | uLCD.set_sector_address(0x003B, 0x5000); //bear image |
gotmilk | 0:cdde918d61ea | 61 | uLCD.display_image(0,0); |
gotmilk | 0:cdde918d61ea | 62 | FILE *wave_file; |
gotmilk | 0:cdde918d61ea | 63 | wave_file=fopen("/sd/cow.wav","r"); |
gotmilk | 0:cdde918d61ea | 64 | waver.play(wave_file); |
gotmilk | 0:cdde918d61ea | 65 | fclose(wave_file); |
gotmilk | 0:cdde918d61ea | 66 | led1 = 1; |
gotmilk | 0:cdde918d61ea | 67 | FILE *wave_file1; |
gotmilk | 0:cdde918d61ea | 68 | wave_file1=fopen("/sd/bear_growl.wav","r"); |
gotmilk | 0:cdde918d61ea | 69 | waver.play(wave_file1); |
gotmilk | 0:cdde918d61ea | 70 | fclose(wave_file1); |
gotmilk | 0:cdde918d61ea | 71 | led1 = 0; |
gotmilk | 0:cdde918d61ea | 72 | FILE *wave_file2; |
gotmilk | 0:cdde918d61ea | 73 | wave_file2=fopen("/sd/lion.wav","r"); |
gotmilk | 0:cdde918d61ea | 74 | waver.play(wave_file2); |
gotmilk | 0:cdde918d61ea | 75 | fclose(wave_file2); |
gotmilk | 0:cdde918d61ea | 76 | led1 = 1; |
gotmilk | 0:cdde918d61ea | 77 | uLCD.cls(); |
gotmilk | 0:cdde918d61ea | 78 | uLCD.set_sector_address(0x003B, 0x5186); //Select which sound you think is correct! |
gotmilk | 0:cdde918d61ea | 79 | uLCD.display_image(0,0); |
gotmilk | 0:cdde918d61ea | 80 | while(v!=100) { //infinite while until user selects choice |
gotmilk | 0:cdde918d61ea | 81 | printf("Inside while\n"); |
gotmilk | 0:cdde918d61ea | 82 | if (global == 1 || global == 3) { //wrong choices |
gotmilk | 0:cdde918d61ea | 83 | uLCD.cls(); |
gotmilk | 0:cdde918d61ea | 84 | uLCD.set_sector_address(0x003B, 0x5104); //Incorrect! |
gotmilk | 0:cdde918d61ea | 85 | uLCD.display_image(0,0); |
gotmilk | 0:cdde918d61ea | 86 | wait(3); |
gotmilk | 0:cdde918d61ea | 87 | v=100; //exit while loop |
gotmilk | 0:cdde918d61ea | 88 | } |
gotmilk | 0:cdde918d61ea | 89 | else if (global == 2) { //correct choice |
gotmilk | 0:cdde918d61ea | 90 | uLCD.cls(); |
gotmilk | 0:cdde918d61ea | 91 | uLCD.set_sector_address(0x003B, 0x50C3); //correct! |
gotmilk | 0:cdde918d61ea | 92 | uLCD.display_image(0,0); |
gotmilk | 0:cdde918d61ea | 93 | score++; //increment user score |
gotmilk | 0:cdde918d61ea | 94 | wait(3); |
gotmilk | 0:cdde918d61ea | 95 | v=100; |
gotmilk | 0:cdde918d61ea | 96 | } |
gotmilk | 0:cdde918d61ea | 97 | }//end while |
gotmilk | 0:cdde918d61ea | 98 | v = 0; //reset while condition |
gotmilk | 0:cdde918d61ea | 99 | led1 = 0; //flip led |
gotmilk | 0:cdde918d61ea | 100 | global = 0; |
gotmilk | 0:cdde918d61ea | 101 | uLCD.cls(); |
gotmilk | 0:cdde918d61ea | 102 | uLCD.set_sector_address(0x003B, 0x5041); //beaver image |
gotmilk | 0:cdde918d61ea | 103 | uLCD.display_image(0,0); |
gotmilk | 0:cdde918d61ea | 104 | FILE *wave_file3; |
gotmilk | 0:cdde918d61ea | 105 | wave_file3=fopen("/sd/ape.wav","r"); |
gotmilk | 0:cdde918d61ea | 106 | waver.play(wave_file3); |
gotmilk | 0:cdde918d61ea | 107 | fclose(wave_file3); |
gotmilk | 0:cdde918d61ea | 108 | led1 = 1; |
gotmilk | 0:cdde918d61ea | 109 | FILE *wave_file4; |
gotmilk | 0:cdde918d61ea | 110 | wave_file4=fopen("/sd/cat.wav","r"); |
gotmilk | 0:cdde918d61ea | 111 | waver.play(wave_file4); |
gotmilk | 0:cdde918d61ea | 112 | fclose(wave_file4); |
gotmilk | 0:cdde918d61ea | 113 | led1 = 0; |
gotmilk | 0:cdde918d61ea | 114 | FILE *wave_file5; |
gotmilk | 0:cdde918d61ea | 115 | wave_file5=fopen("/sd/beaver.wav","r"); |
gotmilk | 0:cdde918d61ea | 116 | waver.play(wave_file5); |
gotmilk | 0:cdde918d61ea | 117 | fclose(wave_file5); |
gotmilk | 0:cdde918d61ea | 118 | led1 = 1; |
gotmilk | 0:cdde918d61ea | 119 | uLCD.cls(); |
gotmilk | 0:cdde918d61ea | 120 | //uLCD.printf("\nSelect which sound you think is correct!\n"); |
gotmilk | 0:cdde918d61ea | 121 | uLCD.set_sector_address(0x003B, 0x5186); |
gotmilk | 0:cdde918d61ea | 122 | uLCD.display_image(0,0); |
gotmilk | 0:cdde918d61ea | 123 | while(v!=100) { |
gotmilk | 0:cdde918d61ea | 124 | printf("Inside while\n"); |
gotmilk | 0:cdde918d61ea | 125 | if (global == 1 || global == 2) { |
gotmilk | 0:cdde918d61ea | 126 | uLCD.cls(); |
gotmilk | 0:cdde918d61ea | 127 | //uLCD.printf("\nIncorrect!\n"); |
gotmilk | 0:cdde918d61ea | 128 | uLCD.set_sector_address(0x003B, 0x5104); |
gotmilk | 0:cdde918d61ea | 129 | uLCD.display_image(0,0); |
gotmilk | 0:cdde918d61ea | 130 | wait(3); |
gotmilk | 0:cdde918d61ea | 131 | v=100; |
gotmilk | 0:cdde918d61ea | 132 | } |
gotmilk | 0:cdde918d61ea | 133 | else if (global == 3) { |
gotmilk | 0:cdde918d61ea | 134 | uLCD.cls(); |
gotmilk | 0:cdde918d61ea | 135 | //uLCD.printf("\nCorrect!\n"); |
gotmilk | 0:cdde918d61ea | 136 | uLCD.set_sector_address(0x003B, 0x50C3); |
gotmilk | 0:cdde918d61ea | 137 | uLCD.display_image(0,0); |
gotmilk | 0:cdde918d61ea | 138 | score++; |
gotmilk | 0:cdde918d61ea | 139 | wait(3); |
gotmilk | 0:cdde918d61ea | 140 | v=100; |
gotmilk | 0:cdde918d61ea | 141 | } |
gotmilk | 0:cdde918d61ea | 142 | }//end while |
gotmilk | 0:cdde918d61ea | 143 | v = 0; |
gotmilk | 0:cdde918d61ea | 144 | led1 = 0; |
gotmilk | 0:cdde918d61ea | 145 | global = 0; |
gotmilk | 0:cdde918d61ea | 146 | uLCD.cls(); |
gotmilk | 0:cdde918d61ea | 147 | uLCD.set_sector_address(0x003B, 0x5082); //fox image |
gotmilk | 0:cdde918d61ea | 148 | uLCD.display_image(0,0); |
gotmilk | 0:cdde918d61ea | 149 | FILE *wave_file6; |
gotmilk | 0:cdde918d61ea | 150 | wave_file6=fopen("/sd/racoon.wav","r"); |
gotmilk | 0:cdde918d61ea | 151 | waver.play(wave_file6); |
gotmilk | 0:cdde918d61ea | 152 | fclose(wave_file6); |
gotmilk | 0:cdde918d61ea | 153 | led1 = 1; |
gotmilk | 0:cdde918d61ea | 154 | FILE *wave_file7; |
gotmilk | 0:cdde918d61ea | 155 | wave_file7=fopen("/sd/wolf.wav","r"); |
gotmilk | 0:cdde918d61ea | 156 | waver.play(wave_file7); |
gotmilk | 0:cdde918d61ea | 157 | fclose(wave_file7); |
gotmilk | 0:cdde918d61ea | 158 | led1 = 0; |
gotmilk | 0:cdde918d61ea | 159 | FILE *wave_file8; |
gotmilk | 0:cdde918d61ea | 160 | wave_file8=fopen("/sd/fox.wav","r"); |
gotmilk | 0:cdde918d61ea | 161 | waver.play(wave_file8); |
gotmilk | 0:cdde918d61ea | 162 | fclose(wave_file8); |
gotmilk | 0:cdde918d61ea | 163 | led1 = 1; |
gotmilk | 0:cdde918d61ea | 164 | uLCD.cls(); |
gotmilk | 0:cdde918d61ea | 165 | //uLCD.printf("\nSelect which sound you think is correct!\n"); |
gotmilk | 0:cdde918d61ea | 166 | uLCD.set_sector_address(0x003B, 0x5186); |
gotmilk | 0:cdde918d61ea | 167 | uLCD.display_image(0,0); |
gotmilk | 0:cdde918d61ea | 168 | while(v!=100) { |
gotmilk | 0:cdde918d61ea | 169 | printf("Inside while\n"); |
gotmilk | 0:cdde918d61ea | 170 | if (global == 1 || global == 2) { |
gotmilk | 0:cdde918d61ea | 171 | uLCD.cls(); |
gotmilk | 0:cdde918d61ea | 172 | //uLCD.printf("\nIncorrect!\n"); |
gotmilk | 0:cdde918d61ea | 173 | uLCD.set_sector_address(0x003B, 0x5104); |
gotmilk | 0:cdde918d61ea | 174 | uLCD.display_image(0,0); |
gotmilk | 0:cdde918d61ea | 175 | wait(3); |
gotmilk | 0:cdde918d61ea | 176 | v=100; |
gotmilk | 0:cdde918d61ea | 177 | } |
gotmilk | 0:cdde918d61ea | 178 | else if (global == 3) { |
gotmilk | 0:cdde918d61ea | 179 | uLCD.cls(); |
gotmilk | 0:cdde918d61ea | 180 | //uLCD.printf("\nCorrect!\n"); |
gotmilk | 0:cdde918d61ea | 181 | uLCD.set_sector_address(0x003B, 0x50C3); |
gotmilk | 0:cdde918d61ea | 182 | uLCD.display_image(0,0); |
gotmilk | 0:cdde918d61ea | 183 | score++; |
gotmilk | 0:cdde918d61ea | 184 | wait(3); |
gotmilk | 0:cdde918d61ea | 185 | v=100; |
gotmilk | 0:cdde918d61ea | 186 | } |
gotmilk | 0:cdde918d61ea | 187 | }//end while |
gotmilk | 0:cdde918d61ea | 188 | v = 0; |
gotmilk | 0:cdde918d61ea | 189 | led1 = 0; |
gotmilk | 0:cdde918d61ea | 190 | global = 0; |
gotmilk | 0:cdde918d61ea | 191 | uLCD.cls(); //End of game |
gotmilk | 0:cdde918d61ea | 192 | uLCD.printf("\nThanks for playing!\n"); |
gotmilk | 0:cdde918d61ea | 193 | uLCD.printf("\nYour score: %2D\n", score); //display score |
gotmilk | 0:cdde918d61ea | 194 | //can write file to SD card here |
gotmilk | 0:cdde918d61ea | 195 | while(1) {} |
gotmilk | 0:cdde918d61ea | 196 | } |