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

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?

UserRevisionLine numberNew 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 }