4180 Design project

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

main.cpp

Committer:
asims35
Date:
2015-12-08
Revision:
0:be32bcd5f29d

File content as of revision 0:be32bcd5f29d:

#include <mbed.h>
#include <mpr121.h>
#include "uLCD_4DGL.h"
#include "rtos.h"


//DigitalOut led1(LED1);
//DigitalOut led2(LED2);
//DigitalOut led3(LED3);
//DigitalOut led4(LED4);
AnalogIn   ain1(p15);
AnalogIn   ain2(p16);
AnalogIn   ain3(p17);
AnalogIn   ain4(p18);
AnalogIn   ain5(p19);
AnalogIn   ain6(p20);

DigitalOut led0(LED1);

DigitalOut led1(p21);
DigitalOut led2(p22);
DigitalOut led3(p23);
DigitalOut led4(p24);
DigitalOut led5(p25);
DigitalOut led6(p26);

int cupPresence1;
int cupPresence2;
int cupPresence3;
int cupPresence4;
int cupPresence5;
int cupPresence6;

int cupPreviousState1;
int cupPreviousState2;
int cupPreviousState3;
int cupPreviousState4;
int cupPreviousState5;
int cupPreviousState6;


int player1Points = 0;
int player2Points = 0;

int player1MassArray[] = {0, 0, 0};
int player2MassArray[] = {0, 0, 0};
int player1Mass = 0;
int player2Mass = 0;

float player1BAC = 0;
float player2BAC = 0;

float a1 = 0;
float a2 = 0;
float r = 0.73;

Mutex lcd_mutex;


uLCD_4DGL uLCD(p28,p27,p29); // serial tx, serial rx, reset pin;

Serial pc(USBTX, USBRX); // tx, rx

InterruptIn keypadInterrupt(p14); // Create the interrupt receiver object on pin 26


I2C i2c(p9, p10); // Setup the i2c bus on pins 9 and 10

Mpr121 mpr121(&i2c, Mpr121::ADD_VSS); // constructor(i2c object, i2c address of the mpr121)

float ledThreshold = 0.25;

int keyPressed;

// Key hit/release interrupt routine
void fallInterrupt() {
  int value=mpr121.read(0x00);
  value +=mpr121.read(0x01)<<8;
 
  switch (value)
    {
         case 1: keyPressed = 0; 
         break;
         case 2: keyPressed = 1;
         break;
         case 4: keyPressed = 2;
         break;
         case 8: keyPressed = 3;
         break;
         case 16: keyPressed = 4;
         break;
         case 32: keyPressed = 5;
         break;
         case 64: keyPressed = 6;
         break;
         case 128: keyPressed = 7;
         break;
         case 256: keyPressed = 8;
         break;
         case 512: keyPressed = 9;
         break;
         case 1024: keyPressed = 10;
         break;
         case 2048: keyPressed = 11;
         break;
         default: keyPressed = 12;   // no key pressed
         break;  
    }
    
 
}

void checkLed1(void const *args) 
{
    while (true) 
    {
        if(ain1.read() < ledThreshold)
        {
           cupPresence1 = 1;
           led1 = 1;
            cupPreviousState1 = 1;
        }
        else
        {
           if(cupPreviousState1 == 1){
           a1 = a1 + 4;
           }
           cupPresence1 = 0;
           led1 = 0;
           cupPreviousState1 = 0;
        }
        Thread::wait(250);
    }
}
void checkLed2(void const *args) 
{
    while (true) 
    {
        if(ain2.read() < ledThreshold)
        {
           cupPresence2 = 1;
           led2 = 1;
           cupPreviousState2 = 1;
        }
        else
        {
            if(cupPreviousState2 == 1){
           a1 = a1 + 4;
           }
           cupPresence2 = 0;
           led2 = 0;
            cupPreviousState2 = 0;
        }
        Thread::wait(250);
    }
}
void checkLed3(void const *args) 
{
    while (true) 
    {
        if(ain3.read() < ledThreshold - 0.22)
        {
           cupPresence3 = 1;
           led3 = 1;
            cupPreviousState3 = 1;
        }
        else
        {
            if(cupPreviousState3 == 1){
           a1 = a1 + 4;
           }
           cupPresence3 = 0;
           led3 = 0;
            cupPreviousState3 = 0;
        }
        Thread::wait(250);
    }
}
void checkLed4(void const *args) 
{
    while (true) 
    {
        if(ain4.read() < ledThreshold)
        {
           cupPresence4 = 1;
           led4 = 1;
            cupPreviousState4 = 1;
        }
        else
        {
            if(cupPreviousState4 == 1){
           a2 = a2 + 4;
           }
           cupPresence4 = 0;
           led4 = 0;
           cupPreviousState4 = 0;
        }
        Thread::wait(250);
    }
}
void checkLed5(void const *args) 
{
    while (true) 
    {
        if(ain5.read() < ledThreshold + 0.05)
        {
           cupPresence5 = 1;
           led5 = 1;
           cupPreviousState5 = 1;
        }
        else
        {
           if(cupPreviousState5 == 1){
           a2 = a2 + 4;
           }
           cupPresence5 = 0;
           led5 = 0;
           cupPreviousState5 = 0;
        }
        Thread::wait(250);
    }
}
void checkLed6(void const *args) 
{
    while (true) 
    {
        if(ain6.read() < ledThreshold + 0.09)
        {
           cupPresence6 = 1;
           led6 = 1;
           cupPreviousState6 = 1;
        }
        else
        {
           if(cupPreviousState6 == 1){
           a2 = a2 + 4;
           }
           cupPresence6 = 0;
           led6 = 0;
            cupPreviousState6 = 0;
        }
        Thread::wait(250);
    }
}

void resetScore()
{

while(cupPresence4 != 1 || cupPresence5 != 1 || cupPresence6 != 1 || cupPresence1 != 1 || cupPresence2 != 1 || cupPresence3 != 1){
 uLCD.locate(0,7);
 uLCD.printf(" in while loop");
}
}
  
 void declareWinner(int winner){
  player1Points = 0; 
  player2Points = 0; 
  lcd_mutex.lock();
  uLCD.cls();
  uLCD.locate(0,1);
  uLCD.printf("Player %i Wins!", winner);
  lcd_mutex.lock();
  wait(10);
  }
 
void checkBAC(void const *args) 
{
    while (true) 
    {
     player1BAC = ((0.06*a1*5.14)/(player1Mass*r));
     player2BAC = ((0.06*a2*5.14)/(player2Mass*r));
        
      Thread::wait(250);  
}
} 
 
  
    
void checkScore(void const *args) 
{
    while (true) 
    {
        if(cupPresence4 == 0 && cupPresence5 == 0 && cupPresence6 == 0)
        {
           player1Points++;
           //resetScore();
         
          if(player1Points == 3){
            //declareWinner(1);
            }
              wait(5);
        }
        else if(cupPresence1 == 0 && cupPresence2 == 0 && cupPresence3 == 0)
        {
           player2Points++;
           //resetScore();
           if(player2Points == 3){
            //declareWinner(2);
            }
            wait(5);
        }
        
    
      Thread::wait(250);  
}
}


void inputMass(){
    uLCD.locate(0,1);
   // uLCD.set_font_size(5,5);
   // uLCD.color(BLACK);
   // uLCD.background_color(LGREY);
    uLCD.printf("Player 1 Weight");
    wait(1);
for (int i=0; i<3; i++) {
    player1MassArray[i] = keyPressed;
    uLCD.locate(i,3);
    uLCD.printf("%i",player1MassArray[i]);
    wait(1);
}
    uLCD.locate(0,4);
    //uLCD.set_font_size(5,5);
   // uLCD.color(BLACK);
    //uLCD.background_color(LGREY);
    uLCD.printf("Player 2 Weight");
    wait(1);
for (int i=0; i<3; i++) {
    player2MassArray[i] = keyPressed;
    uLCD.locate(i,6);
    uLCD.printf("%i",player2MassArray[i]);
    wait(1);
}
for (int i=0; i < 3; i++)
{
  player1Mass = player1Mass*10 + player1MassArray[i];
}
for (int i=0; i < 3; i++)
{
  player2Mass = player2Mass*10 + player2MassArray[i];
}
}

int main() {
  keypadInterrupt.fall(&fallInterrupt);
  keypadInterrupt.mode(PullUp);
  inputMass();
  Thread thread1(checkLed1);
  Thread thread2(checkLed2);
  Thread thread3(checkLed3);
  Thread thread4(checkLed4);
  Thread thread5(checkLed5);
  Thread thread6(checkLed6);
  Thread thread7(checkScore);
  Thread thread8(checkBAC);


 // pc.printf("Hello World!\n");
 // uLCD.printf("\nHello uLCD World\n"); //Default Green on black text
 // uLCD.printf("\n  Starting Demo...");
  uLCD.filled_rectangle(0, 0 , 128, 64, BLUE);
  uLCD.filled_rectangle(0, 64 , 128, 128, RED);
  while (1) 
  {
  
  //uLCD.color(BLACK);
 // uLCD.background_color(LGREY);
  uLCD.textbackground_color(BLUE);
  //uLCD.set_font_size(20,20);
    uLCD.text_width(2); //4X size text
    uLCD.text_height(2);
  uLCD.color(WHITE);
  uLCD.locate(0,0);
  uLCD.printf("Score: %i",player1Points);
  uLCD.locate(0,2);
  uLCD.printf("   BAC:\n   %1.2f",player1BAC);
  
  uLCD.textbackground_color(RED);
  //uLCD.set_font_size(20,20);FONT_8X8 
    uLCD.text_width(2); //4X size text
    uLCD.text_height(2);
  uLCD.locate(0,4);
  uLCD.color(WHITE);
  uLCD.printf("Score: %i",player2Points);
  uLCD.locate(0,6);
  uLCD.printf("   BAC:\n   %1.2f",player2BAC);
  }
}