Kill the bit game for Real Time Assignment
Dependencies: mbed C12832 mbed-rtos
main.cpp
- Committer:
- spearson93
- Date:
- 2022-04-10
- Revision:
- 2:7309680cbb76
- Parent:
- 1:617a3879630b
File content as of revision 2:7309680cbb76:
#include "mbed.h"
#include "rtos.h"
#include "Timer.h"
#include "C12832.h"
#include "stdio.h"
#include "stdlib.h"
// Samuel Pearson 19064819
// Joystick push kills LED bit on left, if it is on
// If bit is not on, another is created
// Goal is to kill off all of the bits
// LEDs flash and speaker beeps on a win
DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
DigitalOut myled4(LED4);
DigitalIn pb(p14); //the player hits the switch connected here to respond
PwmOut spkr(p26);
PwmOut RGBLED_r(p23);
PwmOut RGBLED_g(p24);
PwmOut RGBLED_b(p25);
C12832 lcd(p5, p7, p6, p8, p11);
// mutex to make the lcd lib thread safe
Mutex lcd_mutex;
Mutex mtx;
Timer t1, t2; //used to measure the response time
int player1, player2, player2Ready, StartGame, GameFinished = 0;
float Player1Time, Player2Time = 0;
void display(int number)
{
myled1 = (number) & 0x01;
myled2 = (number>>1) & 0x01;
myled3 = (number>>2) & 0x01;
myled4 = (number>>3) & 0x01;
}
void measure (int value) // calls when the joystick is pressed
{
if (pb)
{ //Check if button is held
lcd_mutex.lock();
lcd.cls();
lcd.printf("Button Press!\n");
lcd_mutex.unlock();
}
}
void calculate (float T1, float T2)
{
mtx.lock();
if (T1 < T2)
{
lcd.printf("Player 1 Wins!!\n");
}
if (T1 > T2)
{
lcd.printf("Player 2 Wins!\n");
}
if (T1 == T2)
{
lcd.printf("Game was a Draw, Try Again\n");
}
mtx.unlock();
}
void thread3(void const *args)
{
while(true) // thread loop
{
RGBLED_r = 0.7 + (rand() % 11)/20.0;
RGBLED_g = 0.7 + (rand() % 11)/20.0;
RGBLED_b = 0.7 + (rand() % 11)/20.0;
Thread::wait(1667); // wait 1.5s
}
}
int main()
{
while(1)
{
Thread t3(thread3); //RGB LED
lcd.printf("Destroy the Bit - \n\r");
lcd.printf("Player 1 Start\n\r");
lcd.printf("Press Joystick to Start\n\r");
unsigned int value = 0x12;
spkr.period(1.0/2000.0);
while (StartGame == 0)
{
if (pb)
{
StartGame = 1;
player2 = 1;
player1 = 0;
t1.start();
t2.start();
}
}
while(StartGame == 1)
{
if (player1 == 0)
{
lcd.cls();
lcd.printf("Press Joystick to kill bit\n\r");
value = value ^ pb;
if (value == 0) {
for (int i=0; i<5; ++i) {
spkr = 0.5;
lcd.cls();
display(0x0F);
wait(.5);
display(0);
spkr = 0.0;
wait(.25);
}
t1.stop();
value = 0x012;
lcd_mutex.lock();
lcd.printf("Player 1 Finished!!!!!!!\n\r");
lcd.printf("Finish time - %f secs\n\r", t1.read());
wait(2);
lcd_mutex.unlock();
Player1Time = t1.read();
player1 = 1;
player2 = 0;
t1.reset();
t2.reset();
}
value = ((value & 0x01)<<3) | value >> 1;
display(value);
measure(value);
wait(.25);
}
if (player2 == 0)
{
if (player2Ready == 0)
{
lcd.cls();
lcd.printf("Player 2 Start\n\r");
lcd.printf("Press JoyStick to Start\n\r");
}
while(player2Ready == 0)
{
if (pb)
{
t2.start();
player2Ready = 1;
}
}
lcd.cls();
lcd.printf("Press Joystick to kill bit\n\r");
value = value ^ pb;
if (value == 0) {
for (int i=0; i<5; ++i) {
spkr = 0.5;
display(0x0F);
wait(.5);
display(0);
spkr = 0.0;
wait(.25);
}
t2.stop();
value = 0x012;
lcd_mutex.lock();
lcd.printf("Player 2 Finished!!!!!!!\n\r");
lcd.printf("Finish time - %f secs\n\r", t2.read());
wait(2);
lcd_mutex.unlock();
Player2Time = t2.read();
player2 = 1;
StartGame = 0;
GameFinished = 1;
t2.reset();
}
value = ((value & 0x01)<<3) | value >> 1;
display(value);
measure(value);
wait(.25);
}
}
if (GameFinished == 1)
{
lcd.cls();
wait(1);
lcd.printf("Game has Ended\n");
calculate(Player1Time, Player2Time);
wait(1);
lcd.cls();
lcd.printf("Game will reset in 5 secs\n");
wait(5);
GameFinished = 0;
Player1Time, Player2Time = 0;
lcd.cls();
}
}
}