Adhithya Rajasekaran
/
xbee_teacher
Base teacher program for Xbee clicker
Revision 0:3a4635fed714, committed 2015-03-11
- Comitter:
- adhithyan15
- Date:
- Wed Mar 11 20:24:51 2015 +0000
- Commit message:
- Base teacher program for Xbee clicker
Changed in this revision
diff -r 000000000000 -r 3a4635fed714 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Mar 11 20:24:51 2015 +0000 @@ -0,0 +1,285 @@ +/** + * XBee Example Test + * A test application that demonstrates the ability + * of transmitting serial data via an XBee module with + * an mbed microprocesor. + * By: Vlad Cazan + * Date: Tuesday, September 29th 2009 + */ + +#include "mbed.h" +#include "rtos.h" +#include <string> +#include <vector> + +Serial xbee1(p9, p10); //Creates a variable for serial comunication through pin 9 and 10 +DigitalOut rst1(p11); //Digital reset for the XBee, 200ns for reset +DigitalOut myled(LED3);//Create variable for Led 3 on the mbed +DigitalOut myled2(LED4);//Create variable for Led 4 on the mbed +vector<string> studentNames; +vector<string> serialNumbers; +vector<string> studentIds; +Serial pc(USBTX, USBRX);//Opens up serial communication through the USB port via the computer +char c; +PinName _tx = p9; +PinName _rx = p10; + +int ConfigMode() +{ + int a; + Serial DATA(_tx,_rx); + wait(2); + DATA.printf("+++"); + while (a != 75) { + if (DATA.readable()) { + a = DATA.getc(); + } + } + wait(1); + printf("Configuration Complete!\n\n"); + return 1; +} + +int GetSerial(int *serial_no) +{ + //pc.printf("Start - GetSerial"); + int sh1,sh2,sh3,sl1,sl2,sl3,sl4; + Serial DATA(_tx,_rx); + wait_ms(50); + DATA.printf("ATSL \r"); + DATA.scanf ("%2x%2x%2x%2x",&sl1,&sl2,&sl3,&sl4); + wait_ms(500); + DATA.printf("ATSH \r"); + DATA.scanf ("%2x%2x%2x",&sh1,&sh2,&sh3); + + serial_no[0] = sh1; + serial_no[1] = sh2; + serial_no[2] = sh3; + serial_no[3] = sl1; + serial_no[4] = sl2; + serial_no[5] = sl3; + serial_no[6] = sl4; + //pc.printf("End - GetSerial"); + return 1; +} + +int SetKey(char* key) +{ + //pc.printf("Start - SetKey"); + Serial DATA(_tx,_rx); + DATA.printf("ATEE 0 \r"); + char sec_key[8] = {'h','e','l','l','o','m','o','b'}; + DATA.scanf ("%*s"); + wait_ms(1); + DATA.printf("ATKY %s \r",sec_key); + DATA.scanf ("%*s"); + //pc.printf("End - SetKey"); + return 1; +} + +int SetPanId(int pan_id) +{ + //pc.printf("Start - PanId"); + Serial DATA(_tx,_rx); + wait_ms(5); + DATA.printf("ATID %i\r",pan_id); + DATA.scanf ("%*s"); + //pc.printf("End - PanID"); + return 1; +} + +int WriteSettings() +{ + //pc.printf("Start - WriteSettings"); + Serial DATA(_tx,_rx); + wait_ms(5); + DATA.printf("ATWR \r"); + DATA.scanf ("%*s"); + //pc.printf("End - WriteSettings"); + return 1; +} + +int ExitConfigMode() +{ + //pc.printf("Start - ExitConfig"); + Serial DATA(_tx,_rx); + wait_ms(5); + DATA.printf("ATCN \r"); + DATA.scanf ("%*s"); + //pc.printf("End - ExitConfig"); + return 1; +} + +void Reset() +{ + //pc.printf("Start - Reset"); + rst1 = 0; + wait_ms(10); + rst1 = 1; + wait_ms(1); + //pc.printf("End - Reset"); +} + +int read_sentence(char* input){ + + char tmp; + while(!pc.readable()); + tmp = pc.getc(); + pc.putc(tmp); + int counter = 0; + while(tmp != '\n'){ + input[counter] = tmp; + if(pc.readable()){ + tmp = pc.getc(); + pc.putc(tmp); + counter++; + } + } + + pc.printf("\n"); + return counter-1; +} + +int read_xbee_sentence(char* input){ + char tmp; + while(!xbee1.readable()); + tmp = xbee1.getc(); + int counter = 0; + while(tmp != '\n'){ + input[counter] = tmp; + if(xbee1.readable()){ + tmp = xbee1.getc(); + counter++; + } + } + return counter; +} + +void print_assessment_available(void const *args){ + pc.printf("Broadcasting assessment available message to all the clickers in the room!\n"); + while(1){ + xbee1.printf("Available\n"); + Thread::wait(100); + } +} + +int main() { + rst1 = 0; //Set reset pin to 0 + myled = 0;//Set LED3 to 0 + myled2= 0;//Set LED4 to 0 + wait_ms(1);//Wait at least one millisecond + rst1 = 1;//Set reset pin to 1 + wait_ms(1);//Wait another millisecond + pc.printf("Teacher Machine\n"); + pc.printf("Start a new assessment? (y/n)\n"); + char sentence_store[255]; + char begin_assessment = 'o'; + char temp; + int char_count; + while(begin_assessment == 'o'){ + if(pc.readable()){ + temp = pc.getc(); + } + if(temp == 'y' || temp == 'n' || temp == 'Y' || temp == 'N'){ + begin_assessment = temp; + } + } + pc.putc(begin_assessment); + pc.printf("\n"); + if(begin_assessment == 'n' || begin_assessment == 'N'){ + pc.printf("Ok. This program will exit momentarily"); + }else{ + pc.printf("Great! The assessment process begins!\n"); + pc.printf("We are configuring a few things. Wait for a few seconds!\n"); + int device_serial[8]; + char sec_key[8] = {'h','e','l','l','o','m','o','b'}; + int pan_id = 5; + int assessment_id = rand() % 100 + 1; + ConfigMode(); + GetSerial(device_serial); + SetKey(sec_key); + SetPanId(pan_id); + WriteSettings(); + //ExitConfigMode(); + Reset(); + pc.printf("Your students will need these parameters to configure their clickers!\n"); + pc.printf("Channel Number: %d\n", pan_id); + pc.printf("How many questions are going to be in the assessment?\n"); + char_count = read_sentence(sentence_store); + int number_of_questions; + number_of_questions = atoi (sentence_store); + char answer_store[number_of_questions]; + pc.printf("Please enter the correct answer for each of the questions\n"); + for(int j = 0;j < number_of_questions; j++){ + pc.printf("Question %d - Correct Answer: ",j+1); + read_sentence(sentence_store); + answer_store[j] = sentence_store[0]; + pc.printf("\n"); + } + pc.printf("Great! The answer key is now set!\n"); + pc.printf("The system will start accepting connections\n"); + pc.printf("Waiting for student clickers to connect!\n"); + //Thread t(&print_assessment_available); + int attack_detector = 0; + while (1) {//Neverending Loop + // if(pc.readable()){ + if (xbee1.readable()){ + string input; + char poll_id[255]; + char_count = read_xbee_sentence(poll_id); + char set_poll_id[char_count]; + for(int i = 0;i < char_count; i++){ + set_poll_id[i] = poll_id[i]; + } + input = string(set_poll_id); + pc.printf(input.c_str()); + pc.printf("\n"); + if(input.find("C-") != -1 && attack_detector == 0){ + int cdash = input.find_last_of("-"); + pc.printf("A clicker with #%s is trying to connect\n",input.substr(cdash+1,input.length()-1).c_str()); + pc.printf("NReq-%s\n",input.substr(cdash+1,input.length()-1).c_str()); + xbee1.printf("NReq-%s\n",input.substr(cdash+1,input.length()-1).c_str()); + attack_detector++; + pc.printf("%d",attack_detector); + }else if(input.find("NRes-") != -1 && attack_detector == 1){ + pc.printf("The student %s has begun his/her assessment\n",input.substr(15,input.length()-1).c_str()); + pc.printf("Requesting his/her ID number\n"); + int length = input.length(); + int ndash = input.find_last_of("-"); + pc.printf("IDReq-%s\n",input.substr(15,length-1).c_str()); + xbee1.printf("IDReq-%s\n",input.substr(15,length-1).c_str()); + attack_detector++; + }else if(input.find("IDRes-") != -1 && attack_detector == 2){ + pc.printf(input.c_str()); + pc.printf("The student's ID number is %s\n",input.substr(6,input.length()-1).c_str()); + pc.printf("Sending the clicker the question number count\n"); + pc.printf("QC-%d-%d\n",assessment_id,number_of_questions); + xbee1.printf("QC-%d-%d\n",assessment_id,number_of_questions); + attack_detector++; + }else if(input.find("QA-") != -1 && attack_detector == 3){ + pc.printf("Question count has been acknowledged!\n"); + pc.printf("Now waiting for answers to be sent!\n"); + attack_detector++; + } else if(input.find("ANS-") != -1 && attack_detector == 4){ + pc.printf("Answers from the clicker has been received!\n"); + int dash = input.find_last_of("-"); + string k = input.substr(dash+1,input.length()-1); + string answer_key; + answer_key = string(answer_store); + int correct = 0; + for(int i = 0; i < answer_key.length(); i++){ + if(answer_key[i] == k[i]){ + correct++; + } + } + float grade = (float) (correct/number_of_questions)*100.0; + pc.printf("Output grade - %f\n", grade); + xbee1.printf("GRADE-%f",grade); + attack_detector++; + } else if(input.find("AA") != -1){ + xbee1.printf("Available\n"); + } + } + } + } +} \ No newline at end of file
diff -r 000000000000 -r 3a4635fed714 mbed-rtos.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Wed Mar 11 20:24:51 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#63988a2238f7
diff -r 000000000000 -r 3a4635fed714 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Mar 11 20:24:51 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/7e07b6fb45cf \ No newline at end of file