4180 Project Master Code

Dependencies:   mbed 4DGL-uLCD-SE

Files at this revision

API Documentation at this revision

Comitter:
jroy32
Date:
Tue Apr 23 18:51:38 2019 +0000
Commit message:
master

Changed in this revision

4DGL-uLCD-SE.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
questions.cpp Show annotated file Show diff for this revision Revisions of this file
questions.h Show annotated file Show diff for this revision Revisions of this file
--- /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