4180 Project Master Code
Dependencies: mbed 4DGL-uLCD-SE
Revision 0:65ed62dbfeee, committed 2019-04-23
- Comitter:
- jroy32
- Date:
- Tue Apr 23 18:51:38 2019 +0000
- Commit message:
- master
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/4DGL-uLCD-SE.lib Tue Apr 23 18:51:38 2019 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/4180_1/code/4DGL-uLCD-SE/#2cb1845d7681
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Tue Apr 23 18:51:38 2019 +0000
@@ -0,0 +1,442 @@
+#include "mbed.h"
+#include "uLCD_4DGL.h"
+#include "questions.h"
+
+DigitalOut myled1(LED1); // leds for debugging
+DigitalOut myled2(LED2);
+DigitalOut myled3(LED3);
+DigitalOut myled4(LED4);
+
+DigitalOut lidar_enable(p29); //to determine when lidar should operate
+
+DigitalIn p1_enable(p23); // data from player 1
+BusIn p1_ans(p22, p21);
+
+DigitalIn p2_enable(p18); // data from player 2
+BusIn p2_ans(p19, p20);
+
+uLCD_4DGL uLCD(p13, p14, p12);
+
+Serial pc(USBTX,USBRX); // for teraterm debugging
+
+PwmOut speaker(p26);
+
+int msg;
+int msg2;
+int questionIndex = 0;
+string *p;
+int player = 0;
+
+int player1Score = 0;
+int player2Score = 0;
+
+int p1Val = 0;
+int p2Val = 0;
+
+questions arr[30];
+
+// Light
+class RGBLed
+{
+public:
+ RGBLed(PinName redpin, PinName greenpin)://, PinName bluepin);
+ _redpin(redpin), _greenpin(greenpin) //, _bluepin(bluepin)
+ {
+ //50Hz PWM clock default a bit too low, go to 2000Hz (less flicker)
+ _redpin.period(0.0005);
+ }
+
+ void write(float red,float green)//, float blue);
+ {
+ _redpin = red;
+ _greenpin = green;
+// _bluepin = blue;
+ }
+private:
+ PwmOut _redpin;
+ PwmOut _greenpin;
+// PwmOut _bluepin;
+};
+
+
+//class could be moved to include file
+
+
+//Setup RGB led using PWM pins and class
+RGBLed myRGBled(p24,p25);//,p21); //RGB PWM pins
+
+void shuffleQuestions()
+{
+ for (int i = 0; i < 90; i++) {
+ int rand1 = rand() % 30;
+ int rand2 = rand() % 30;
+ questions temp = arr[rand1];
+ arr[rand1] = arr[rand2];
+ arr[rand2] = temp;
+ }
+}
+
+void addQuestions()
+{
+ questions q1("Which of these\nchess figures is\nclosely related to'Bohemian\nRhapsody?\n","King","Queen","Pawn","Bishop","Queen");
+ questions q2("What religion is\nthe most practicedone in India?\n","Sikhism","Islam","Hinduism","Shinto","Hinduism");
+ questions q3("What is the name\nof the Jewish New\nYear?\n","Yom Kippur","Kwanzaa","Hanukkah","Rosh Hashanah","Rosh Hashanah");
+ questions q4("What funk/soul\nband was Lionel\nRichie a member\nof?\n","Commodores","Amigas","Ataris","Spectrums","Commodores");
+ questions q5("Which country\nhosted the Summer\nOlympics in 2016?\n","Greece","Brazil","China","Spain","Brazil");
+ questions q6("Which of these\ncities is closest\nto London, UK?\n","Boston, MA","Miami, FL","Atlanta, GA","New York, NY","Boston, MA");
+ questions q7("What did Alfred\nNobel Develop?\n","Atomic bomb","Nobelium","Gunpowder","Dynamite","Dynamite");
+ questions q8("Which US Presidentis on the far leftof the Mount\nRushmore\nNational\nMemorial?\n","Theodore\n Roosevelt","Thomas\n Jefferson","George\n Washington","Abraham\n Lincoln","George\n Washington");
+ questions q9("Which actress\nplays a major\nrole in the TV\nshow 'The Big\nBang Theory'\n","Portia de\n Rossi","Kaley Cuoco","Emily\n Deschanel","Sofia Vergara","Kaley Cuoco");
+ questions q10("Which of these\nantagonist\ncharacters was\ncreated by\nnovelist J.K.\nRowling?\n","Professor\n Moriarty","Lord Voldemort","Darth Vader","Lord Farqaad","Lord Voldemort");
+ questions q11("Which mammal firstreached Earth's\norbit alive?\n","Monkey","Human","Cat","Dog","Dog");
+ questions q12("How many spaces\nare on a standard\nmonopoly board?\n","40","20","80","60","40");
+ questions q13("Which actor does\nnot appear in\n'Saving Private\nRyan'?\n","Tom Hanks","Vin Diesel","Giovanni\n Ribisi","Ralph Fiennes","Ralph Fiennes");
+ questions q14("Which city's\nlandmard include:\nThe Pantheon, The\nSpanish Steps and\nTrevi Fountain?\n","Rome","Athens","Istanbul","Barcelone","Rome");
+ questions q15("How many blue\nstripes does the\nUnited States of\nAmerica national\nflag have?\n","13","6","0","7","0");
+ questions q16("Which of these\ncountries was not\na Soviet Republic\nin USSR?\n","Moldova","Serbia","Kyrgyzstan","Azerbaijan","Serbia");
+ questions q17("What temperature\nis the same in\nCelsius and\nFahrenheit?\n","0","-40","+100","+40","-40");
+ questions q18("What is the name\nof the boxer whoselife story is\ndepicted in the\n1999 movie 'The\nHurricane'?\n","Rubin Carter","Jake LaMotta","Muhammad Ali","Rocky Marciano","Rubin Carter");
+ questions q19("Adele performed\nthe theme song to\nwhich James Bond\nfilm?\n","Casino Royale","From Russia\n With Love","Quantum of\n Solace","Skyfall","Skyfall");
+ questions q20("What restaurant\nfranchise advises\nyou to 'Eat\nFresh'?\n","Subway","McDonald's","KFC","Taco Bell","Subway");
+ questions q21("In which language\nwas the book 'War\nand Peace' originally written?\n", "Russian","English","French","German","Russian");
+ questions q22("Which movie was\nthe first to win\n11 Academy\nAwards?\n","Sound of Music","La La Land","Ben-Hur","Titanic","Ben-Hur");
+ questions q23("What is the\nlargest country,\nby area, that has\nonly one time\nzone?\n", "China","Russia","Australia","Turkey","China");
+ questions q24("Which truck is\nproduced by the\nFord Motor\nCompany?\n", "Silverado 1500","CR-V","F-150","RAV4","F-150");
+ questions q25("What is the\nlargest planet in our Solar System?\n","Pluto","Earth","Saturn","Jupiter","Jupiter");
+ questions q26("Other than eggs,\nwhat is a primary\ningredient in\nEggs Florentine?\n", "Avocado","Gorgonzola","Spinach","Ham","Spinach");
+ questions q27("According to\nPersian folklore,\nwho is the\nstoryteller of\n'One Thousand and\nOne Nights'?\n","Kanaan","Hatshepsut","Homer","Scheherazade","Scheherazade");
+ questions q28("Which of these\nNBA franchises\nhas never signed\nLeBron James?\n", "Miami Heat","Los Angeles\n Lakers","Cleveland\n Cavaliers","Boston Celtics","Boston Celtics");
+ questions q29("What is the color\nof Donald Duck's\nbowtie?\n","Yellow","Green","Red","Blue","Red");
+ questions q30("What was the\nfirst successful\nvaccine developed\nin history?\n","Smallpox","Rabies","Cholera","Scarlet Fever","Smallpox");
+
+ arr[0] = q1;
+ arr[1] = q2;
+ arr[2] = q3;
+ arr[3] = q4;
+ arr[4] = q5;
+ arr[5] = q6;
+ arr[6] = q7;
+ arr[7] = q8;
+ arr[8] = q9;
+ arr[9] = q10;
+ arr[10] = q11;
+ arr[11] = q12;
+ arr[12] = q13;
+ arr[13] = q14;
+ arr[14] = q15;
+ arr[15] = q16;
+ arr[16] = q17;
+ arr[17] = q18;
+ arr[18] = q19;
+ arr[19] = q20;
+ arr[20] = q21;
+ arr[21] = q22;
+ arr[22] = q23;
+ arr[23] = q24;
+ arr[24] = q25;
+ arr[25] = q26;
+ arr[26] = q27;
+ arr[27] = q28;
+ arr[28] = q29;
+ arr[29] = q30;
+}
+
+void readQuestion()
+{
+ arr[questionIndex].shuffleOptions();
+ //uLCD.cls();
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf(arr[questionIndex].getQuestion().c_str());
+ p = arr[questionIndex].getAllOptions();
+ uLCD.printf("\n1: ");
+ uLCD.printf((*(p)).c_str());
+ uLCD.printf("\n2: ");
+ uLCD.printf((*(p+1)).c_str());
+ uLCD.printf("\n3: ");
+ uLCD.printf((*(p+2)).c_str());
+ uLCD.printf("\n4: ");
+ uLCD.printf((*(p+3)).c_str());
+}
+
+int main()
+{
+ uLCD.baudrate(3000000); // lcd settings + randomize questions
+ srand(time(NULL));
+ addQuestions();
+ shuffleQuestions();
+ uLCD.display_control(PORTRAIT);
+
+ while(1) {
+ if (questionIndex == 30) {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK); //game over + win screen
+ uLCD.locate(0,0);
+ uLCD.printf("The game is over;");
+ wait(2);
+ uLCD.locate(0,2);
+ uLCD.printf("Player 1: %d", player1Score);
+ uLCD.locate(0,4);
+ uLCD.printf("Player 2: %d", player2Score);
+ wait(3);
+ // gameover....
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(1,6);
+ if (player1Score > player2Score) {
+ uLCD.printf("PLAYER 1 WINS!!!");
+ } else if (player1Score < player2Score) {
+ uLCD.printf("PLAYER 2 WINS!!!");
+ } else {
+ uLCD.locate(3,6);
+ uLCD.printf("IT'S A TIE!!!");
+ }
+ } else {
+ readQuestion(); //print questions
+ lidar_enable = 1; // tell players that lidar can now work as buzzer
+ }
+ while ((!p1Val)&&(!p2Val)) {
+ msg = -1;
+ msg2 = -1;
+
+ if (p1_enable) { //if player 1 is ready
+ p1Val = p1_enable;
+ myled1 = !myled1;
+ msg = (p1_ans + 1); //answer from player mbeds + 1 to make it numbers between 1-4
+ while (msg < 1);
+ //checking if answer is right
+ if (msg == 1) {
+ if ((*(p)).compare(arr[questionIndex].getCorrectAnswer()) == 0) {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Correct");
+ myRGBled.write(0.0,1.0);
+ speaker.period(1.0/1000.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player1Score++;
+ p1Val = 1;
+ break;
+ } else {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Incorrect");
+ myRGBled.write(1.0,0.0);
+ speaker.period(1.0/500.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player1Score--;
+ p1Val = 1;
+ break;
+ }
+ } else if (msg == 2) {
+ if ((*(p+1)).compare(arr[questionIndex].getCorrectAnswer()) == 0) {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Correct");
+ myRGBled.write(0.0,1.0);
+ speaker.period(1.0/1000.0);// 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player1Score++;
+ p1Val = 1;
+ break;
+ } else {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Incorrect");
+ myRGBled.write(1.0,0.0);
+ speaker.period(1.0/500.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player1Score--;
+ p1Val = 1;
+ break;
+ }
+ } else if (msg == 3) {
+ if ((*(p+2)).compare(arr[questionIndex].getCorrectAnswer()) == 0) {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Correct");
+ myRGBled.write(0.0,1.0);
+ speaker.period(1.0/1000.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player1Score++;
+ p1Val = 1;
+ break;
+ } else {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Incorrect");
+ myRGBled.write(1.0,0.0);
+ speaker.period(1.0/500.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player1Score--;
+ p1Val = 1;
+ break;
+ }
+ } else if (msg == 4) {
+ if ((*(p+3)).compare(arr[questionIndex].getCorrectAnswer()) == 0) {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Correct");
+ myRGBled.write(0.0,1.0);
+ speaker.period(1.0/1000.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player1Score++;
+ p1Val = 1;
+ break;
+ } else {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Incorrect");
+ myRGBled.write(1.0,0.0);
+ speaker.period(1.0/500.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player1Score--;
+ p1Val = 1;
+ break;
+ }
+ }
+ } else if (p2_enable) {
+ p2Val = p2_enable;
+ myled2 = !myled2;
+ msg2 = (p2_ans + 1);
+ while (msg2 < 1);
+ if (msg2 == 1) {
+ if ((*(p)).compare(arr[questionIndex].getCorrectAnswer()) == 0) {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Correct");
+ player2Score++;
+ myRGBled.write(0.0,1.0);
+ speaker.period(1.0/1000.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ p2Val = 1;
+ break;
+ } else {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Incorrect");
+ myRGBled.write(1.0,0.0);
+ speaker.period(1.0/500.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player2Score--;
+ p2Val = 1;
+ break;
+ }
+ } else if (msg2 == 2) {
+ if ((*(p+1)).compare(arr[questionIndex].getCorrectAnswer()) == 0) {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Correct");
+ myRGBled.write(0.0,1.0);
+ speaker.period(1.0/1000.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player2Score++;
+ p2Val = 1;
+ break;
+ } else {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Incorrect");
+ myRGBled.write(1.0,0.0);
+ speaker.period(1.0/500.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player2Score--;
+ p2Val = 1;
+ break;
+ }
+ } else if (msg2 == 3) {
+ if ((*(p+2)).compare(arr[questionIndex].getCorrectAnswer()) == 0) {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Correct");
+ myRGBled.write(0.0,1.0);
+ speaker.period(1.0/1000.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player2Score++;
+ p2Val = 1;
+ break;
+ } else {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Incorrect");
+ myRGBled.write(1.0,0.0);
+ speaker.period(1.0/500.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player2Score--;
+ p2Val = 1;
+ break;
+ }
+ } else if (msg2 == 4) {
+ if ((*(p+3)).compare(arr[questionIndex].getCorrectAnswer()) == 0) {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Correct");
+ myRGBled.write(0.0,1.0);
+ speaker.period(1.0/1000.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player2Score++;
+ p2Val = 1;
+ break;
+ } else {
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Incorrect");
+ myRGBled.write(1.0,0.0);
+ speaker.period(1.0/500.0); // 500hz period
+ speaker =0.5;
+ wait(1);
+ speaker =0.0;
+ player2Score--;
+ p2Val = 1;
+ break;
+ }
+ }
+ }
+ }
+ //reset all values
+ wait(3);
+ p1Val = 0;
+ p2Val = 0;
+ myled1 = 0;
+ myled2 = 0;
+ msg = -1;
+ msg2 = -1;
+ lidar_enable = 0;
+ myRGBled.write(0.0,0.0);
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ uLCD.locate(0,0);
+ uLCD.printf("Player 1: %d", player1Score);
+ uLCD.locate(0,2);
+ uLCD.printf("Player 2: %d", player2Score);
+ wait(2);
+ uLCD.filled_rectangle(0, 0, 130, 130, BLACK);
+ questionIndex++;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Apr 23 18:51:38 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/0ab6a29f35bf \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/questions.cpp Tue Apr 23 18:51:38 2019 +0000
@@ -0,0 +1,103 @@
+#include "questions.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+#include <time.h>
+
+questions::questions() {
+ this->question = "";
+ this->correctAnswer = "";
+ this->option1 = "";
+ this->option2 = "";
+ this->option3 = "";
+ this->option4 = "";
+ this->allOptions[0] = option1;
+ this->allOptions[1] = option2;
+ this->allOptions[2] = option3;
+ this->allOptions[3] = option4;
+}
+
+questions::questions(string question, string option1, string option2,
+ string option3, string option4, string correctAnswer) {
+
+ this->question = question;
+ this->correctAnswer = correctAnswer;
+ this->option1 = option1;
+ this->option2 = option2;
+ this->option3 = option3;
+ this->option4 = option4;
+ this->allOptions[0] = option1;
+ this->allOptions[1] = option2;
+ this->allOptions[2] = option3;
+ this->allOptions[3] = option4;
+}
+
+string questions::getQuestion() {
+ return question;
+}
+
+void questions::setQuestion(string question) {
+ this->question = question;
+}
+
+string questions::getCorrectAnswer() {
+ return correctAnswer;
+}
+
+void questions::setCorrectAnswer(string correctAnswer) {
+ this->correctAnswer = correctAnswer;
+}
+
+string questions::getOption1() {
+ return option1;
+}
+
+void questions::setOption1(string option1) {
+ this->option1 = option1;
+}
+
+string questions::getOption2() {
+ return option2;
+}
+
+void questions::setOption2(string option2) {
+ this->option2 = option2;
+}
+
+string questions::getOption3() {
+ return option3;
+}
+
+void questions::setOption3(string option3) {
+ this->option3 = option3;
+}
+
+string questions::getOption4() {
+ return option4;
+}
+
+void questions::setOption4(string option4) {
+ this->option4 = option4;
+}
+
+void questions::setAllOptions() {
+ this->allOptions[0] = option1;
+ this->allOptions[1] = option2;
+ this->allOptions[2] = option3;
+ this->allOptions[3] = option4;
+}
+
+string* questions::getAllOptions() {
+ return allOptions;
+}
+
+
+void questions::shuffleOptions() {
+ for (int i = 0; i < 15; i++) {
+ int rand1 = rand() % 4;
+ int rand2 = rand() % 4;
+ string temp = allOptions[rand1];
+ allOptions[rand1] = allOptions[rand2];
+ allOptions[rand2] = temp;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/questions.h Tue Apr 23 18:51:38 2019 +0000
@@ -0,0 +1,39 @@
+#ifndef QUESTIONS_H
+#define QUESTIONS_H
+
+#include <string>
+using namespace std;
+
+class questions {
+private:
+ string question;
+ string correctAnswer;
+ string option1;
+ string option2;
+ string option3;
+ string option4;
+ string allOptions[4];
+
+public:
+ questions();
+ questions(string question,string option1, string option2, string option3,
+ string option4, string correctAnswer);
+ string getQuestion();
+ void setQuestion(string question);
+ string getCorrectAnswer();
+ void setCorrectAnswer(string correctAnswer);
+ string getOption1();
+ void setOption1(string option1);
+ string getOption2();
+ void setOption2(string option2);
+ string getOption3();
+ void setOption3(string option3);
+ string getOption4();
+ void setOption4(string option4);
+ string* getAllOptions(); // returns pointer to array
+ void setAllOptions();
+ void shuffleOptions();
+
+};
+
+#endif