Bop-It Game
Dependencies: TextLCD mbed ADXL345 VS1053b
main.cpp
- Committer:
- jdumond3
- Date:
- 2011-10-19
- Revision:
- 0:d16ac399135a
File content as of revision 0:d16ac399135a:
#include "mbed.h"
#include <mpr121.h>
#include <VS1053.h>
#include <ADXL345.h>
#include <ctime>
#include <stdlib.h>
#include <math.h>
#include "TextLCD.h"
DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
DigitalOut myled4(LED4);
PwmOut tone(p21);
AnalogIn slider(p20);
ADXL345 accelerometer(p5, p6, p7, p8);
Serial pc(USBTX, USBRX);
I2C i2c(p28, p27); //For touch sensor
Mpr121 mpr121(&i2c, Mpr121::ADD_VSS); //touch sensor class
TextLCD lcd(p12, p13, p14, p15, p16, p17);
// Tickers for game loop functions
Timeout ticker1;
Timeout ticker2;
InterruptIn TouchPad(p26);
InterruptIn AccTap(p11);
DigitalOut myled5(p29);
DigitalOut myled6(p30);
volatile int Test = 0x0000;
volatile int check = 0;
volatile int i;
volatile int c = 0;
volatile int command = 1;
volatile int ButtonsPressed = 0x0000;
volatile float slid = 0.0;
volatile float Prevslid = 0.0;
volatile float time1 = 2000000;
volatile float time2 = 1500000;
volatile int commandtemp = 0;
volatile int commandarray[20];
volatile int fail = 0;
void CheckInput(void);
void AccTapISR() {
if (command == 1) {
myled4 = !myled4;
command = 0;
} else {
fail = 1;
}
}
void TouchPadISR() {
myled5 = !myled5;
if (command == 2) {
//ButtonsPressed |= mpr121.read(0x00);
mpr121.read(0x00);
//ButtonsPressed |= mpr121.read(0x01)<<8;
++ButtonsPressed;
if ((ButtonsPressed >= 6) && (ButtonsPressed < 12)) { //0x0F9F) {
myled4 = !myled4;
ButtonsPressed = 0;
command = 0;
fail = 0;
} else if (ButtonsPressed > 12) {
fail = 21;
}
} /*else {
fail = 23;
ButtonsPressed = 0;
}*/
}
///Ticker1 function to generate random command number from 1-3
void Command() {
myled6 = !myled6;
// command = 1;
check = 1;
command = commandarray[c];
c++;
if ( c == 20) c = 0;
lcd.cls();
if (command == 1) {
//lcd.printf("Bop-It!\n");
myled1 = 1;
myled2 = 0;
myled3 = 0;
} else if (command == 2) {
//lcd.printf("Square-It!\n");
myled1 = 0;
myled2 = 1;
myled3 = 0;
} else if (command == 3) {
//lcd.printf("Slide-It!\n");
myled1 = 0;
myled2 = 0;
myled3 = 1;
}
tone = .5;
ticker2.attach_us(&CheckInput,time2 );
time2 = time2 - 50000;
}
void CheckInput() {
ticker1.attach_us(&Command,time1);
time1 = time1 - 50000;
if (command == 3) {
Prevslid = slid;
slid = slider;
if (abs(slid - Prevslid) > .5) {
myled4 = !myled4;
command = 0;
}
if (command) {
fail = 3;
}
}
if (command && (command != 3))
fail = 4;
accelerometer.getInterruptSource();
}
int main() {
srand( time(NULL));
printf("Start up \n");
lcd.printf("Play Bop-It!\n");
for (i=0; i< 20; i++) {
commandtemp = rand() % 10;
// printf("Before: %i \n \f", commandtemp);
if (commandtemp == 0) {
commandtemp = 8;
}
if (commandtemp == 9) {
commandtemp = 8;
}
commandtemp = (commandtemp/3) + 1;
// printf("After: %i \n", commandtemp);
commandarray[i] = commandtemp;
}
tone.period_ms(1);
accelerometer.setPowerControl(0x00);
accelerometer.setDataFormatControl(0x0A);
accelerometer.setDataRate(ADXL345_3200HZ);
accelerometer.setInterruptEnableControl(0x01 << 6);
accelerometer.setInterruptMappingControl(0x00);
accelerometer.setTapThreshold(0x8);
accelerometer.setTapDuration(6000);
accelerometer.setTapAxisControl(0x04);
accelerometer.setPowerControl(0x08);
mpr121.write(0x77, 0x00);
mpr121.write(0x5E, 0x0C);
AccTap.rise(&AccTapISR);
accelerometer.getInterruptSource();
TouchPad.fall(&TouchPadISR);
TouchPad.mode(PullUp);
ticker1.attach_us( &Command, time1);
slid = slider;
int count = 0;
while (1) {
//printf("%X\n",ButtonsPressed);
//wait(.26);
__disable_irq();
if (check) {
if (command == 1) {
lcd.cls();
lcd.printf("Bop-It!\n");
myled1 = 1;
myled2 = 0;
myled3 = 0;
tone = 0;
} else if (command == 2) {
lcd.cls();
lcd.printf("Touch Three!\n");
myled1 = 0;
myled2 = 1;
myled3 = 0;
tone = 0;
} else if (command == 3) {
lcd.cls();
lcd.printf("Slide-It!\n");
myled1 = 0;
myled2 = 0;
myled3 = 1;
tone = 0;
}
check = 0;
}
if (fail) {
ticker1.detach();
ticker2.detach();
lcd.cls();
lcd.printf("Failed on: %d\n", fail);
tone.period_ms(2.3);
tone = .5;
wait(.5);
tone = 0;
while (1);
}
__enable_irq();
}
}