solved workshop exercise
Revision 0:f4a1a7ba4cdc, committed 2019-03-12
- Comitter:
- marcozecchini
- Date:
- Tue Mar 12 15:00:59 2019 +0000
- Commit message:
- Final commit;
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Tue Mar 12 15:00:59 2019 +0000
@@ -0,0 +1,133 @@
+#include "main.h"
+
+string readline_serial(){ //LO FANNO
+ string buffer = "";
+
+ while(!expired){
+ if(pc.readable() > 0){
+ char c = pc.getc();
+ buffer = buffer + c;
+ if (c=='!'){
+ return buffer.substr(0, buffer.length()-1);
+ }
+ }
+ }
+
+ expired = false;
+ return 0;
+
+}
+
+string readline_questions(){ // LO MANTENGO
+ size_t pos = questions.find("!");
+ string buffer = questions.substr(0, pos);
+ read_questions += buffer;
+ questions = questions.substr(pos+1);
+
+ return buffer;
+}
+
+void parse_line(string line, question_t *res){ //LO FANNO
+ int word = 0;
+ size_t i = 0;
+ string temp = "";
+
+ for (word = 0; word < 5; word++){
+ size_t pos = line.find(";");
+ res[word].answer = line.substr(i, pos);
+ res[word].shown = 0;
+ line = line.substr(pos+1);
+
+ }
+}
+
+void expired_timeout(){ //LO FANNO
+ expired = true;
+ timeout.detach();
+}
+
+void pressed(){ //LO FANNO
+ if (!answering) pc.printf(">>> GAME PAUSED FOR 30 seconds <<<\n\r");
+
+ wait(30.0);
+
+ pc.printf(">>> GAME RESUMED <<<\n\r");
+
+}
+
+void toggling(){ //LO FANNO
+ while(answering){
+ led = !led;
+ wait(0.1);
+ }
+}
+
+int main()
+{
+ mybutton.fall(&pressed);
+ pc.printf("Welcome to IoTQuiz! Are you ready to play? When you are ready send !\n\r");
+ readline_serial();
+
+ pc.printf("How many players are there?\n\r");
+ number_of_participants = atoi(readline_serial().data());
+
+ pc.printf("There are %d participants\n\r", number_of_participants);
+ int turn = 0;
+ int results[number_of_participants];
+ while (turn < TURN * number_of_participants){
+
+ int participant = turn % number_of_participants;
+ if (turn < number_of_participants) results[participant] = 0; // properly initialization of results.
+
+ pc.printf("It's the turn of player %d\n\r", participant);
+ wait(5.0);
+
+ answering = true; //from now on no more pause
+ question_t parsed_line[5];
+ parse_line(readline_questions(), parsed_line);
+ pc.printf(">>> QUESTION: %s\n\r", parsed_line[0].answer.data());
+ parsed_line[0].shown = 1;
+
+ //To order randomly the answers
+ int question_shown = 0;
+ while (question_shown < 4){
+ int i = rand() % 4 + 1;
+ if (parsed_line[i].shown == 0){
+ pc.printf(">>> %d) %s\n\r", ++question_shown, parsed_line[i].answer.data());
+ parsed_line[i].shown = 1;
+ parsed_line[i].shown_as = question_shown;
+ }
+ }
+
+ pc.printf("\n\r>>> Select the correct answer, you have 10 seconds! (A number among 1 and 4)\n\r");
+
+ //timeout starting
+ timeout.attach(&expired_timeout, 10.0);
+ Thread thread; //thread toggling led
+ thread.start(toggling); // starts
+
+ int correct = atoi(readline_serial().data());
+ answering = false;
+
+ //join the thread and detach the timeout
+ thread.join();
+ led = 0;
+ timeout.detach();
+
+ if (correct == parsed_line[1].shown_as) {
+ results[participant] += 1;
+ pc.printf("\n\r>>>Right Answer!\n\r");
+ }
+ else{
+ pc.printf("\n\r>>> Wrong Answer or Time Expired!\n\r");
+ }
+
+ turn +=1 ;
+ if (turn % number_of_participants == 0){
+ for (int i = 0; i<number_of_participants; i++){
+ pc.printf("\n\rPLAYER %d: %d points\n\r", i, results[i]);
+ }
+ }
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.h Tue Mar 12 15:00:59 2019 +0000
@@ -0,0 +1,27 @@
+#include "mbed.h"
+
+#include <stdlib.h>
+#include <string>
+#define TURN 5
+
+using namespace std;
+
+typedef struct question {
+ string answer;
+ bool shown;
+ int shown_as;
+} question_t;
+
+//Global variable
+Serial pc(SERIAL_TX, SERIAL_RX);
+DigitalOut led(LED1);
+Timeout timeout;
+
+InterruptIn mybutton(USER_BUTTON);
+
+int number_of_participants = 0;
+bool expired = false, paused = false, answering = false;
+string questions = "When was Linux invented? ; 1991 ; 2005 ; 1965 ; 1999!Which one of the following is NOT open source? ; Skype ; Docker ; Python ; PHP ; LibreOffice!What does the 'A' stand for in the term LAMP stack? ; Apache ; Ajax ; ActiveX ; ASP.NET!Firefox was made by what community? ; Mozilla ; Apple ; IBM ; Oracle!What animal is Tux, the Linux mascot? ; Penguin ; Mouse ; Horse ; Spider!Which Linux OS is commonly recommended for beginners? ; Ubuntu ; Gentoo ; FreeBSD ; Fedora!What is Audacity used for? ; Audio ; Art ; Programming ; Gaming!Which one of the following is open source? ; MySQL ; Windows ; iTunes ; Photoshop!What language was the Linux kernel written in? ; C ; Java ; C++ ; Ruby!Which one of the following is an open source license? ; GPL ; FTP ; GUID ; API!";
+string read_questions = "";
+
+string readline_serial();
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Tue Mar 12 15:00:59 2019 +0000 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/mbed-os/#51d55508e8400b60af467005646c4e2164738d48