sxa

Dependents:   MP3333 B18_MP3_PLAYER B18_MP3_PLAYER B18_MP3_PLAYER

Committer:
PKnevermind
Date:
Wed Dec 09 08:32:13 2015 +0000
Revision:
3:934d5e72990a
Parent:
2:6f21eae5f456
VS1053

Who changed what in which revision?

UserRevisionLine numberNew contents of line
PKnevermind 0:928e5b21896c 1 #include "player.h"
PKnevermind 0:928e5b21896c 2 #include "SDFileSystem.h"
PKnevermind 3:934d5e72990a 3 #include "MPU9250.h"
PKnevermind 3:934d5e72990a 4 #include "SPI_TFT_ILI9341.h"
PKnevermind 3:934d5e72990a 5 #include "stdio.h"
PKnevermind 3:934d5e72990a 6 #include "string"
PKnevermind 3:934d5e72990a 7 #include "Arial12x12.h"
PKnevermind 3:934d5e72990a 8 #include "Arial24x23.h"
PKnevermind 3:934d5e72990a 9 #include "Arial28x28.h"
PKnevermind 3:934d5e72990a 10 #include "font_big.h"
PKnevermind 0:928e5b21896c 11
PKnevermind 2:6f21eae5f456 12 SDFileSystem sd(D11, D12, D13, D9, "sd"); // the pinout on the mbed Cool
PKnevermind 2:6f21eae5f456 13 vs10xx vs1053(D11, D12, D13, D6, D7, D2, D8 );//mosi,miso,sclk,xcs,xdcs,dreq,xreset
PKnevermind 3:934d5e72990a 14 DigitalOut red(A0);
PKnevermind 3:934d5e72990a 15 DigitalOut green(A2);
PKnevermind 3:934d5e72990a 16 DigitalOut blue(A1);
PKnevermind 3:934d5e72990a 17 DigitalIn Mode(A5);
PKnevermind 0:928e5b21896c 18
PKnevermind 3:934d5e72990a 19 MPU9250 mpu9250;
PKnevermind 0:928e5b21896c 20 playerStatetype playerState;
PKnevermind 0:928e5b21896c 21 ctrlStatetype ctrlState;
PKnevermind 2:6f21eae5f456 22 static unsigned char fileBuf[65536];
PKnevermind 0:928e5b21896c 23 unsigned char *bufptr;
PKnevermind 0:928e5b21896c 24
PKnevermind 3:934d5e72990a 25 extern unsigned char p1[];
PKnevermind 3:934d5e72990a 26 extern unsigned char p2[];
PKnevermind 3:934d5e72990a 27 extern unsigned char p3[];
PKnevermind 3:934d5e72990a 28
PKnevermind 0:928e5b21896c 29 char list[20][50]; //song list
PKnevermind 0:928e5b21896c 30 char index = 0; //song play index
PKnevermind 0:928e5b21896c 31 char index_MAX; //how many song in all
PKnevermind 0:928e5b21896c 32 unsigned char vlume = 0x40; //vlume
PKnevermind 0:928e5b21896c 33 unsigned char vlumeflag = 0; //set vlume flag
PKnevermind 3:934d5e72990a 34 float sum = 0;
PKnevermind 3:934d5e72990a 35 uint32_t sumCount = 0;
PKnevermind 3:934d5e72990a 36 char buffer[14];
PKnevermind 3:934d5e72990a 37 uint8_t dato_leido[2];
PKnevermind 3:934d5e72990a 38 uint8_t whoami;
PKnevermind 3:934d5e72990a 39 Timer t;
PKnevermind 3:934d5e72990a 40 int check = 0;
PKnevermind 3:934d5e72990a 41
PKnevermind 3:934d5e72990a 42 int mark=20;
PKnevermind 3:934d5e72990a 43 SPI_TFT_ILI9341 TFT(PA_7,PA_6,PA_5,PA_13,PA_14,PA_15,"TFT"); // mosi, miso, sclk, cs, reset, dc
PKnevermind 3:934d5e72990a 44
PKnevermind 0:928e5b21896c 45
PKnevermind 0:928e5b21896c 46 void Player::begin(void)
PKnevermind 0:928e5b21896c 47 {
PKnevermind 0:928e5b21896c 48 DirHandle *dir;
PKnevermind 0:928e5b21896c 49 struct dirent *ptr;
PKnevermind 0:928e5b21896c 50 FileHandle *fp;
PKnevermind 0:928e5b21896c 51
PKnevermind 0:928e5b21896c 52 vs1053.reset();
PKnevermind 0:928e5b21896c 53 dir = opendir("/sd");
PKnevermind 0:928e5b21896c 54 printf("\r\n**********playing list**********\r\n");
PKnevermind 0:928e5b21896c 55 unsigned char i = 0,j=0;
PKnevermind 0:928e5b21896c 56 while(((ptr = dir->readdir()) != NULL)&&(i <20)) {
PKnevermind 0:928e5b21896c 57 if(strstr(ptr->d_name,".mp3")||strstr(ptr->d_name,".MP3")) {
PKnevermind 0:928e5b21896c 58 fp =sd.open(ptr->d_name, O_RDONLY);
PKnevermind 0:928e5b21896c 59 if(fp != NULL) {
PKnevermind 0:928e5b21896c 60 char *byte = ptr->d_name;
PKnevermind 0:928e5b21896c 61 j=0;
PKnevermind 0:928e5b21896c 62 while(*byte) {
PKnevermind 0:928e5b21896c 63 list[i][j++] = *byte++;
PKnevermind 0:928e5b21896c 64 }
PKnevermind 3:934d5e72990a 65 printf("%2d . %s\r\n", i+1,list[i++]);
PKnevermind 0:928e5b21896c 66 fp->close();
PKnevermind 0:928e5b21896c 67 }
PKnevermind 0:928e5b21896c 68 }
PKnevermind 0:928e5b21896c 69 }
PKnevermind 0:928e5b21896c 70 index_MAX = i-1;
PKnevermind 0:928e5b21896c 71 dir->closedir();
PKnevermind 0:928e5b21896c 72 printf("\r\n");
PKnevermind 0:928e5b21896c 73 }
PKnevermind 0:928e5b21896c 74
PKnevermind 0:928e5b21896c 75 /* This function plays back an audio file. */
PKnevermind 0:928e5b21896c 76 void Player::playFile(char *file)
PKnevermind 0:928e5b21896c 77 {
PKnevermind 0:928e5b21896c 78 int bytes; // How many bytes in buffer left
PKnevermind 0:928e5b21896c 79 int n;
PKnevermind 3:934d5e72990a 80 int x=0;
PKnevermind 3:934d5e72990a 81 check = mode();
PKnevermind 0:928e5b21896c 82
PKnevermind 0:928e5b21896c 83 playerState = PS_PLAY;
PKnevermind 3:934d5e72990a 84 GREEN();
PKnevermind 0:928e5b21896c 85 vs1053.setFreq(24000000); //hight speed
PKnevermind 0:928e5b21896c 86 FileHandle *fp =sd.open(file, O_RDONLY);
PKnevermind 0:928e5b21896c 87 if(fp == NULL) {
PKnevermind 0:928e5b21896c 88 printf("Could not open %s\r\n",file);
PKnevermind 0:928e5b21896c 89
PKnevermind 0:928e5b21896c 90 } else {
PKnevermind 0:928e5b21896c 91
PKnevermind 0:928e5b21896c 92 /* Main playback loop */
PKnevermind 2:6f21eae5f456 93 while((bytes = fp->read(fileBuf,32000)) > 0) {
PKnevermind 0:928e5b21896c 94 bufptr = fileBuf;
PKnevermind 0:928e5b21896c 95
PKnevermind 0:928e5b21896c 96 // actual audio data gets sent to VS10xx.
PKnevermind 0:928e5b21896c 97 while(bytes > 0) {
PKnevermind 3:934d5e72990a 98 n = (bytes < 32)?bytes:32;
PKnevermind 0:928e5b21896c 99 vs1053.writeData(bufptr,n);
PKnevermind 0:928e5b21896c 100 bytes -= n;
PKnevermind 0:928e5b21896c 101 bufptr += n;
PKnevermind 2:6f21eae5f456 102 if(playerState == PS_STOP)break;
PKnevermind 3:934d5e72990a 103 else if(mode() != check){
PKnevermind 3:934d5e72990a 104 check = mode();
PKnevermind 3:934d5e72990a 105 if(mode() == 0)letplay();
PKnevermind 3:934d5e72990a 106 else print_list();
PKnevermind 3:934d5e72990a 107 }
PKnevermind 3:934d5e72990a 108 else if(!mode()) {
PKnevermind 3:934d5e72990a 109 if(getGY()>50){
PKnevermind 3:934d5e72990a 110 playerState = PS_PAUSE;
PKnevermind 3:934d5e72990a 111 cry();
PKnevermind 3:934d5e72990a 112 }
PKnevermind 3:934d5e72990a 113 else if(getGX()<-30) {
PKnevermind 3:934d5e72990a 114 playerState = PS_STOP;
PKnevermind 3:934d5e72990a 115 angry();
PKnevermind 3:934d5e72990a 116 x = 1;
PKnevermind 3:934d5e72990a 117 } else if(getGX()>30) {
PKnevermind 3:934d5e72990a 118 playerState = PS_STOP;
PKnevermind 3:934d5e72990a 119 angry();
PKnevermind 3:934d5e72990a 120 x = 2;
PKnevermind 3:934d5e72990a 121 }
PKnevermind 3:934d5e72990a 122 }
PKnevermind 3:934d5e72990a 123 while(playerState == PS_PAUSE) {
PKnevermind 3:934d5e72990a 124 wait(0.2);
PKnevermind 3:934d5e72990a 125 RED();
PKnevermind 3:934d5e72990a 126 if(getGY()<-50){
PKnevermind 3:934d5e72990a 127 playerState = PS_PLAY;
PKnevermind 3:934d5e72990a 128 GREEN();
PKnevermind 3:934d5e72990a 129 }
PKnevermind 3:934d5e72990a 130 }
PKnevermind 0:928e5b21896c 131 }
PKnevermind 2:6f21eae5f456 132 if(playerState == PS_STOP)break;
PKnevermind 0:928e5b21896c 133 }
PKnevermind 0:928e5b21896c 134 fp->close();
PKnevermind 0:928e5b21896c 135 vs1053.softReset();
PKnevermind 0:928e5b21896c 136 }
PKnevermind 3:934d5e72990a 137 if(x == 1|| x==0){
PKnevermind 3:934d5e72990a 138 wait(0.6);
PKnevermind 3:934d5e72990a 139 if(index != index_MAX)index++;
PKnevermind 3:934d5e72990a 140 else index = 0;
PKnevermind 3:934d5e72990a 141 }
PKnevermind 3:934d5e72990a 142 else if(x == 2){
PKnevermind 3:934d5e72990a 143 wait(0.6);
PKnevermind 3:934d5e72990a 144 if(index != 0)index--;
PKnevermind 3:934d5e72990a 145 else index = index_MAX;
PKnevermind 3:934d5e72990a 146 }
PKnevermind 0:928e5b21896c 147 }
PKnevermind 0:928e5b21896c 148
PKnevermind 0:928e5b21896c 149 void Set32(unsigned char *d, unsigned int n)
PKnevermind 0:928e5b21896c 150 {
PKnevermind 0:928e5b21896c 151 int i;
PKnevermind 0:928e5b21896c 152 for (i=0; i<4; i++) {
PKnevermind 0:928e5b21896c 153 *d++ = (unsigned char)n;
PKnevermind 0:928e5b21896c 154 n >>= 8;
PKnevermind 0:928e5b21896c 155 }
PKnevermind 0:928e5b21896c 156 }
PKnevermind 3:934d5e72990a 157
PKnevermind 3:934d5e72990a 158 void Player::RED()
PKnevermind 3:934d5e72990a 159 {
PKnevermind 3:934d5e72990a 160 red = 1;
PKnevermind 3:934d5e72990a 161 green = 0;
PKnevermind 3:934d5e72990a 162 blue = 0;
PKnevermind 3:934d5e72990a 163 }
PKnevermind 3:934d5e72990a 164
PKnevermind 3:934d5e72990a 165 void Player::GREEN()
PKnevermind 3:934d5e72990a 166 {
PKnevermind 3:934d5e72990a 167 red = 0 ;
PKnevermind 3:934d5e72990a 168 green = 1;
PKnevermind 3:934d5e72990a 169 blue = 0;
PKnevermind 3:934d5e72990a 170 }
PKnevermind 3:934d5e72990a 171
PKnevermind 3:934d5e72990a 172 void Player::BLUE()
PKnevermind 3:934d5e72990a 173 {
PKnevermind 3:934d5e72990a 174 red = 0;
PKnevermind 3:934d5e72990a 175 green = 0;
PKnevermind 3:934d5e72990a 176 blue = 1;
PKnevermind 3:934d5e72990a 177 }
PKnevermind 3:934d5e72990a 178
PKnevermind 3:934d5e72990a 179 int Player::getGY()
PKnevermind 3:934d5e72990a 180 {
PKnevermind 3:934d5e72990a 181 // If intPin goes high, all data registers have new data
PKnevermind 3:934d5e72990a 182 if(mpu9250.readByte(MPU9250_ADDRESS, INT_STATUS) & 0x01) { // On interrupt, check if data ready interrupt
PKnevermind 3:934d5e72990a 183
PKnevermind 3:934d5e72990a 184 mpu9250.readAccelData(accelCount); // Read the x/y/z adc values
PKnevermind 3:934d5e72990a 185 // Now we'll calculate the accleration value into actual g's
PKnevermind 3:934d5e72990a 186 if (I2Cstate != 0) //error on I2C
PKnevermind 3:934d5e72990a 187 printf("I2C error ocurred while reading accelerometer data. I2Cstate = %d \n\r", I2Cstate);
PKnevermind 3:934d5e72990a 188 else { // I2C read or write ok
PKnevermind 3:934d5e72990a 189 I2Cstate = 1;
PKnevermind 3:934d5e72990a 190 ax = (float)accelCount[0]*aRes - accelBias[0]; // get actual g value, this depends on scale being set
PKnevermind 3:934d5e72990a 191 ay = (float)accelCount[1]*aRes - accelBias[1];
PKnevermind 3:934d5e72990a 192 az = (float)accelCount[2]*aRes - accelBias[2];
PKnevermind 3:934d5e72990a 193 }
PKnevermind 3:934d5e72990a 194
PKnevermind 3:934d5e72990a 195 mpu9250.readGyroData(gyroCount); // Read the x/y/z adc values
PKnevermind 3:934d5e72990a 196 // Calculate the gyro value into actual degrees per second
PKnevermind 3:934d5e72990a 197 if (I2Cstate != 0) //error on I2C
PKnevermind 3:934d5e72990a 198 printf("I2C error ocurred while reading gyrometer data. I2Cstate = %d \n\r", I2Cstate);
PKnevermind 3:934d5e72990a 199 else { // I2C read or write ok
PKnevermind 3:934d5e72990a 200 I2Cstate = 1;
PKnevermind 3:934d5e72990a 201 gx = (float)gyroCount[0]*gRes - gyroBias[0]; // get actual gyro value, this depends on scale being set
PKnevermind 3:934d5e72990a 202 gy = (float)gyroCount[1]*gRes - gyroBias[1];
PKnevermind 3:934d5e72990a 203 gz = (float)gyroCount[2]*gRes - gyroBias[2];
PKnevermind 3:934d5e72990a 204 }
PKnevermind 3:934d5e72990a 205
PKnevermind 3:934d5e72990a 206 mpu9250.readMagData(magCount); // Read the x/y/z adc values
PKnevermind 3:934d5e72990a 207 // Calculate the magnetometer values in milliGauss
PKnevermind 3:934d5e72990a 208 // Include factory calibration per data sheet and user environmental corrections
PKnevermind 3:934d5e72990a 209 if (I2Cstate != 0) //error on I2C
PKnevermind 3:934d5e72990a 210 printf("I2C error ocurred while reading magnetometer data. I2Cstate = %d \n\r", I2Cstate);
PKnevermind 3:934d5e72990a 211 else { // I2C read or write ok
PKnevermind 3:934d5e72990a 212 I2Cstate = 1;
PKnevermind 3:934d5e72990a 213 mx = (float)magCount[0]*mRes*magCalibration[0] - magbias[0]; // get actual magnetometer value, this depends on scale being set
PKnevermind 3:934d5e72990a 214 my = (float)magCount[1]*mRes*magCalibration[1] - magbias[1];
PKnevermind 3:934d5e72990a 215 mz = (float)magCount[2]*mRes*magCalibration[2] - magbias[2];
PKnevermind 3:934d5e72990a 216 }
PKnevermind 3:934d5e72990a 217
PKnevermind 3:934d5e72990a 218 mpu9250.getCompassOrientation(orientation);
PKnevermind 3:934d5e72990a 219 }
PKnevermind 3:934d5e72990a 220
PKnevermind 3:934d5e72990a 221 //Now = t.read_us();
PKnevermind 3:934d5e72990a 222 //deltat = (float)((Now - lastUpdate)/1000000.0f) ; // set integration time by time elapsed since last filter update
PKnevermind 3:934d5e72990a 223 //lastUpdate = Now;
PKnevermind 3:934d5e72990a 224 //sum += deltat;
PKnevermind 3:934d5e72990a 225 //sumCount++;
PKnevermind 3:934d5e72990a 226
PKnevermind 3:934d5e72990a 227 // Pass gyro rate as rad/s
PKnevermind 3:934d5e72990a 228 // mpu9250.MadgwickQuaternionUpdate(ax, ay, az, gx*PI/180.0f, gy*PI/180.0f, gz*PI/180.0f, my, mx, mz);
PKnevermind 3:934d5e72990a 229 mpu9250.MahonyQuaternionUpdate(ax, ay, az, gx*PI/180.0f, gy*PI/180.0f, gz*PI/180.0f, my, mx, mz);
PKnevermind 3:934d5e72990a 230
PKnevermind 3:934d5e72990a 231 return gy;
PKnevermind 3:934d5e72990a 232 }
PKnevermind 3:934d5e72990a 233
PKnevermind 3:934d5e72990a 234 int Player::getGX()
PKnevermind 3:934d5e72990a 235 {
PKnevermind 3:934d5e72990a 236 // If intPin goes high, all data registers have new data
PKnevermind 3:934d5e72990a 237 if(mpu9250.readByte(MPU9250_ADDRESS, INT_STATUS) & 0x01) { // On interrupt, check if data ready interrupt
PKnevermind 3:934d5e72990a 238
PKnevermind 3:934d5e72990a 239 mpu9250.readAccelData(accelCount); // Read the x/y/z adc values
PKnevermind 3:934d5e72990a 240 // Now we'll calculate the accleration value into actual g's
PKnevermind 3:934d5e72990a 241 if (I2Cstate != 0) //error on I2C
PKnevermind 3:934d5e72990a 242 printf("I2C error ocurred while reading accelerometer data. I2Cstate = %d \n\r", I2Cstate);
PKnevermind 3:934d5e72990a 243 else { // I2C read or write ok
PKnevermind 3:934d5e72990a 244 I2Cstate = 1;
PKnevermind 3:934d5e72990a 245 ax = (float)accelCount[0]*aRes - accelBias[0]; // get actual g value, this depends on scale being set
PKnevermind 3:934d5e72990a 246 ay = (float)accelCount[1]*aRes - accelBias[1];
PKnevermind 3:934d5e72990a 247 az = (float)accelCount[2]*aRes - accelBias[2];
PKnevermind 3:934d5e72990a 248 }
PKnevermind 3:934d5e72990a 249
PKnevermind 3:934d5e72990a 250 mpu9250.readGyroData(gyroCount); // Read the x/y/z adc values
PKnevermind 3:934d5e72990a 251 // Calculate the gyro value into actual degrees per second
PKnevermind 3:934d5e72990a 252 if (I2Cstate != 0) //error on I2C
PKnevermind 3:934d5e72990a 253 printf("I2C error ocurred while reading gyrometer data. I2Cstate = %d \n\r", I2Cstate);
PKnevermind 3:934d5e72990a 254 else { // I2C read or write ok
PKnevermind 3:934d5e72990a 255 I2Cstate = 1;
PKnevermind 3:934d5e72990a 256 gx = (float)gyroCount[0]*gRes - gyroBias[0]; // get actual gyro value, this depends on scale being set
PKnevermind 3:934d5e72990a 257 gy = (float)gyroCount[1]*gRes - gyroBias[1];
PKnevermind 3:934d5e72990a 258 gz = (float)gyroCount[2]*gRes - gyroBias[2];
PKnevermind 3:934d5e72990a 259 }
PKnevermind 3:934d5e72990a 260
PKnevermind 3:934d5e72990a 261 mpu9250.readMagData(magCount); // Read the x/y/z adc values
PKnevermind 3:934d5e72990a 262 // Calculate the magnetometer values in milliGauss
PKnevermind 3:934d5e72990a 263 // Include factory calibration per data sheet and user environmental corrections
PKnevermind 3:934d5e72990a 264 if (I2Cstate != 0) //error on I2C
PKnevermind 3:934d5e72990a 265 printf("I2C error ocurred while reading magnetometer data. I2Cstate = %d \n\r", I2Cstate);
PKnevermind 3:934d5e72990a 266 else { // I2C read or write ok
PKnevermind 3:934d5e72990a 267 I2Cstate = 1;
PKnevermind 3:934d5e72990a 268 mx = (float)magCount[0]*mRes*magCalibration[0] - magbias[0]; // get actual magnetometer value, this depends on scale being set
PKnevermind 3:934d5e72990a 269 my = (float)magCount[1]*mRes*magCalibration[1] - magbias[1];
PKnevermind 3:934d5e72990a 270 mz = (float)magCount[2]*mRes*magCalibration[2] - magbias[2];
PKnevermind 3:934d5e72990a 271 }
PKnevermind 3:934d5e72990a 272
PKnevermind 3:934d5e72990a 273 mpu9250.getCompassOrientation(orientation);
PKnevermind 3:934d5e72990a 274 }
PKnevermind 3:934d5e72990a 275
PKnevermind 3:934d5e72990a 276 //Now = t.read_us();
PKnevermind 3:934d5e72990a 277 //deltat = (float)((Now - lastUpdate)/1000000.0f) ; // set integration time by time elapsed since last filter update
PKnevermind 3:934d5e72990a 278 //lastUpdate = Now;
PKnevermind 3:934d5e72990a 279 //sum += deltat;
PKnevermind 3:934d5e72990a 280 //sumCount++;
PKnevermind 3:934d5e72990a 281
PKnevermind 3:934d5e72990a 282 // Pass gyro rate as rad/s
PKnevermind 3:934d5e72990a 283 // mpu9250.MadgwickQuaternionUpdate(ax, ay, az, gx*PI/180.0f, gy*PI/180.0f, gz*PI/180.0f, my, mx, mz);
PKnevermind 3:934d5e72990a 284 mpu9250.MahonyQuaternionUpdate(ax, ay, az, gx*PI/180.0f, gy*PI/180.0f, gz*PI/180.0f, my, mx, mz);
PKnevermind 3:934d5e72990a 285
PKnevermind 3:934d5e72990a 286 return gx;
PKnevermind 3:934d5e72990a 287 }
PKnevermind 3:934d5e72990a 288
PKnevermind 3:934d5e72990a 289 void Player::setup()
PKnevermind 3:934d5e72990a 290 {
PKnevermind 3:934d5e72990a 291 //___ Set up I2C: use fast (400 kHz) I2C ___
PKnevermind 3:934d5e72990a 292 i2c.frequency(400000);
PKnevermind 3:934d5e72990a 293
PKnevermind 3:934d5e72990a 294 printf("CPU SystemCoreClock is %d Hz\r\n", SystemCoreClock);
PKnevermind 3:934d5e72990a 295
PKnevermind 3:934d5e72990a 296 t.start(); // Timer ON
PKnevermind 3:934d5e72990a 297
PKnevermind 3:934d5e72990a 298 // Read the WHO_AM_I register, this is a good test of communication
PKnevermind 3:934d5e72990a 299 whoami = mpu9250.readByte(MPU9250_ADDRESS, WHO_AM_I_MPU9250);
PKnevermind 3:934d5e72990a 300
PKnevermind 3:934d5e72990a 301 printf("I AM 0x%x\n\r", whoami);
PKnevermind 3:934d5e72990a 302 printf("I SHOULD BE 0x71\n\r");
PKnevermind 3:934d5e72990a 303 if (I2Cstate != 0) // error on I2C
PKnevermind 3:934d5e72990a 304 printf("I2C failure while reading WHO_AM_I register");
PKnevermind 3:934d5e72990a 305
PKnevermind 3:934d5e72990a 306 if (whoami == 0x71) { // WHO_AM_I should always be 0x71
PKnevermind 3:934d5e72990a 307 printf("MPU9250 WHO_AM_I is 0x%x\n\r", whoami);
PKnevermind 3:934d5e72990a 308 printf("MPU9250 is online...\n\r");
PKnevermind 3:934d5e72990a 309 sprintf(buffer, "0x%x", whoami);
PKnevermind 3:934d5e72990a 310 wait(1);
PKnevermind 3:934d5e72990a 311
PKnevermind 3:934d5e72990a 312 mpu9250.resetMPU9250(); // Reset registers to default in preparation for device calibration
PKnevermind 3:934d5e72990a 313
PKnevermind 3:934d5e72990a 314 mpu9250.MPU9250SelfTest(SelfTest); // Start by performing self test and reporting values (accelerometer and gyroscope self test)
PKnevermind 3:934d5e72990a 315
PKnevermind 3:934d5e72990a 316 mpu9250.calibrateMPU9250(gyroBias, accelBias); // Calibrate gyro and accelerometer, load biases in bias registers
PKnevermind 3:934d5e72990a 317
PKnevermind 3:934d5e72990a 318 wait(2);
PKnevermind 3:934d5e72990a 319
PKnevermind 3:934d5e72990a 320 // Initialize device for active mode read of acclerometer, gyroscope, and temperature
PKnevermind 3:934d5e72990a 321 mpu9250.initMPU9250();
PKnevermind 3:934d5e72990a 322
PKnevermind 3:934d5e72990a 323
PKnevermind 3:934d5e72990a 324 // Initialize device for active mode read of magnetometer, 16 bit resolution, 100Hz.
PKnevermind 3:934d5e72990a 325 mpu9250.initAK8963(magCalibration);
PKnevermind 3:934d5e72990a 326 wait(1);
PKnevermind 3:934d5e72990a 327 }
PKnevermind 3:934d5e72990a 328
PKnevermind 3:934d5e72990a 329 else { // Connection failure
PKnevermind 3:934d5e72990a 330 while(1) ; // Loop forever if communication doesn't happen
PKnevermind 3:934d5e72990a 331 }
PKnevermind 3:934d5e72990a 332
PKnevermind 3:934d5e72990a 333 mpu9250.getAres(); // Get accelerometer sensitivity
PKnevermind 3:934d5e72990a 334 mpu9250.getGres(); // Get gyro sensitivity
PKnevermind 3:934d5e72990a 335 mpu9250.getMres(); // Get magnetometer sensitivity
PKnevermind 3:934d5e72990a 336 magbias[0] = +470.; // User environmental x-axis correction in milliGauss, should be automatically calculated
PKnevermind 3:934d5e72990a 337 magbias[1] = +120.; // User environmental x-axis correction in milliGauss
PKnevermind 3:934d5e72990a 338 magbias[2] = +125.; // User environmental x-axis correction in milliGauss
PKnevermind 3:934d5e72990a 339 }
PKnevermind 3:934d5e72990a 340
PKnevermind 3:934d5e72990a 341 int Player::mode()
PKnevermind 3:934d5e72990a 342 {
PKnevermind 3:934d5e72990a 343 int m = Mode.read();
PKnevermind 3:934d5e72990a 344 return m;
PKnevermind 3:934d5e72990a 345 }
PKnevermind 3:934d5e72990a 346
PKnevermind 3:934d5e72990a 347 void Player::letplay()
PKnevermind 3:934d5e72990a 348 {
PKnevermind 3:934d5e72990a 349 TFT.cls();
PKnevermind 3:934d5e72990a 350 TFT.foreground(White);
PKnevermind 3:934d5e72990a 351 TFT.background(Black);
PKnevermind 3:934d5e72990a 352 TFT.cls();
PKnevermind 3:934d5e72990a 353 TFT.set_orientation(1);
PKnevermind 3:934d5e72990a 354 TFT.Bitmap(60,1,200,173,p1);
PKnevermind 3:934d5e72990a 355 }
PKnevermind 3:934d5e72990a 356
PKnevermind 3:934d5e72990a 357 void Player::angry()
PKnevermind 3:934d5e72990a 358 {
PKnevermind 3:934d5e72990a 359 TFT.cls();
PKnevermind 3:934d5e72990a 360 TFT.foreground(White);
PKnevermind 3:934d5e72990a 361 TFT.background(Black);
PKnevermind 3:934d5e72990a 362 TFT.cls();
PKnevermind 3:934d5e72990a 363 TFT.set_orientation(1);
PKnevermind 3:934d5e72990a 364 TFT.Bitmap(60,1,200,173,p2);
PKnevermind 3:934d5e72990a 365 }
PKnevermind 3:934d5e72990a 366
PKnevermind 3:934d5e72990a 367 void Player::cry()
PKnevermind 3:934d5e72990a 368 {
PKnevermind 3:934d5e72990a 369 TFT.cls();
PKnevermind 3:934d5e72990a 370 TFT.foreground(White);
PKnevermind 3:934d5e72990a 371 TFT.background(Black);
PKnevermind 3:934d5e72990a 372 TFT.cls();
PKnevermind 3:934d5e72990a 373 TFT.set_orientation(1);
PKnevermind 3:934d5e72990a 374 TFT.Bitmap(60,1,200,173,p3);
PKnevermind 3:934d5e72990a 375 }
PKnevermind 3:934d5e72990a 376
PKnevermind 3:934d5e72990a 377 void Player::print_list()
PKnevermind 3:934d5e72990a 378 {
PKnevermind 3:934d5e72990a 379 int a=0,b=0;
PKnevermind 3:934d5e72990a 380 TFT.claim(stdout);
PKnevermind 3:934d5e72990a 381 TFT.cls();
PKnevermind 3:934d5e72990a 382 TFT.foreground(White);
PKnevermind 3:934d5e72990a 383 TFT.background(Black);
PKnevermind 3:934d5e72990a 384 TFT.cls();
PKnevermind 3:934d5e72990a 385
PKnevermind 3:934d5e72990a 386 TFT.set_orientation(3);
PKnevermind 3:934d5e72990a 387 TFT.set_font((unsigned char*) Arial28x28);
PKnevermind 3:934d5e72990a 388 TFT.locate(150,120);
PKnevermind 3:934d5e72990a 389 TFT.printf("Manual Mode:");
PKnevermind 3:934d5e72990a 390 TFT.cls();
PKnevermind 3:934d5e72990a 391 TFT.set_orientation(3);
PKnevermind 3:934d5e72990a 392 TFT.set_font((unsigned char*) Arial12x12);
PKnevermind 3:934d5e72990a 393 //list[5]='\0';
PKnevermind 3:934d5e72990a 394 do {
PKnevermind 3:934d5e72990a 395 TFT.locate(5,b);
PKnevermind 3:934d5e72990a 396 TFT.printf("%2d . %s\r\n", a+1,list[a]);
PKnevermind 3:934d5e72990a 397 a++;
PKnevermind 3:934d5e72990a 398 b=b+23;
PKnevermind 3:934d5e72990a 399 } while(a<5);
PKnevermind 3:934d5e72990a 400 }
PKnevermind 3:934d5e72990a 401
PKnevermind 3:934d5e72990a 402 void Player::select_list()
PKnevermind 3:934d5e72990a 403 {
PKnevermind 3:934d5e72990a 404 if(mark>=96) {
PKnevermind 3:934d5e72990a 405 mark=10;
PKnevermind 3:934d5e72990a 406 }
PKnevermind 3:934d5e72990a 407 TFT.cls();
PKnevermind 3:934d5e72990a 408 print_list();
PKnevermind 3:934d5e72990a 409 TFT.set_orientation(0);
PKnevermind 3:934d5e72990a 410 TFT.fillcircle(mark,20,10,Red);
PKnevermind 3:934d5e72990a 411
PKnevermind 3:934d5e72990a 412 mark=mark+23;
PKnevermind 3:934d5e72990a 413 }