shalab shalab / Mbed 2 deprecated Tutorial07_ClassIntro

Dependencies:   mbed

Committer:
shalab
Date:
Fri Mar 07 08:28:03 2014 +0000
Revision:
3:12ac28cf86f0
Parent:
2:e3ebd2ae8892
change to increment local id;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shalab 0:0c662a5aeb15 1 #include "mbed.h"
shalab 1:08ed9f1ccd06 2 #include <string>
shalab 0:0c662a5aeb15 3 #define toggle(a) {a=a^1;}
shalab 0:0c662a5aeb15 4
shalab 1:08ed9f1ccd06 5 using namespace std;
shalab 1:08ed9f1ccd06 6
shalab 1:08ed9f1ccd06 7 DigitalOut led1(LED1);
shalab 1:08ed9f1ccd06 8 DigitalOut led2(LED2);
shalab 1:08ed9f1ccd06 9 DigitalOut led3(LED3);
shalab 1:08ed9f1ccd06 10 DigitalOut led4(LED4);
shalab 0:0c662a5aeb15 11 Serial pc(USBTX, USBRX);
shalab 0:0c662a5aeb15 12
shalab 1:08ed9f1ccd06 13
shalab 0:0c662a5aeb15 14 class Student {
shalab 0:0c662a5aeb15 15 public:
shalab 1:08ed9f1ccd06 16 Student(){};
shalab 1:08ed9f1ccd06 17 Student(string n, int i): name(n), id(i){}
shalab 1:08ed9f1ccd06 18
shalab 1:08ed9f1ccd06 19 void setName(string n) { name = n; }
shalab 1:08ed9f1ccd06 20 void setName(char* n, int i){ name.assign(n, i );}
shalab 1:08ed9f1ccd06 21 string getName() { return name; }
shalab 0:0c662a5aeb15 22
shalab 3:12ac28cf86f0 23 void incId() { id++; }
shalab 1:08ed9f1ccd06 24 int getId(){ return id; }
shalab 1:08ed9f1ccd06 25
shalab 1:08ed9f1ccd06 26 private:
shalab 1:08ed9f1ccd06 27 string name;
shalab 1:08ed9f1ccd06 28 int id;
shalab 0:0c662a5aeb15 29 };
shalab 0:0c662a5aeb15 30
shalab 1:08ed9f1ccd06 31 // Serial com
shalab 1:08ed9f1ccd06 32 const int len = 64;
shalab 1:08ed9f1ccd06 33 char inCmd[len];
shalab 1:08ed9f1ccd06 34 bool inCmdReady = false;
shalab 1:08ed9f1ccd06 35
shalab 1:08ed9f1ccd06 36 // State machine
shalab 1:08ed9f1ccd06 37 enum {STARTUP, IDLE, ERROR, PRINTMAINMENU, CHANGENAME, NAMECHANGED, PRINTINFO};
shalab 1:08ed9f1ccd06 38 int state(STARTUP);
shalab 1:08ed9f1ccd06 39
shalab 1:08ed9f1ccd06 40
shalab 1:08ed9f1ccd06 41 void rxCallback() {
shalab 1:08ed9f1ccd06 42 static int idx = 0;
shalab 1:08ed9f1ccd06 43 static int lastState=STARTUP;
shalab 1:08ed9f1ccd06 44
shalab 1:08ed9f1ccd06 45 char c = pc.getc();
shalab 1:08ed9f1ccd06 46 switch (c){
shalab 1:08ed9f1ccd06 47 case '\n':
shalab 1:08ed9f1ccd06 48 break;
shalab 1:08ed9f1ccd06 49 case '\r':
shalab 1:08ed9f1ccd06 50 inCmd[idx]='\0';
shalab 1:08ed9f1ccd06 51 idx=0;
shalab 1:08ed9f1ccd06 52 if (lastState == STARTUP){
shalab 1:08ed9f1ccd06 53 state = IDLE;
shalab 1:08ed9f1ccd06 54 lastState = IDLE;
shalab 1:08ed9f1ccd06 55 }
shalab 1:08ed9f1ccd06 56 else if (lastState == IDLE) {
shalab 1:08ed9f1ccd06 57 if (inCmd[idx] == '0') {
shalab 1:08ed9f1ccd06 58 state = CHANGENAME;
shalab 1:08ed9f1ccd06 59 lastState = CHANGENAME;
shalab 1:08ed9f1ccd06 60 }
shalab 1:08ed9f1ccd06 61 else if (inCmd[idx] == '1'){
shalab 1:08ed9f1ccd06 62 state = PRINTINFO;
shalab 1:08ed9f1ccd06 63 lastState = IDLE;
shalab 1:08ed9f1ccd06 64 }
shalab 1:08ed9f1ccd06 65 else {
shalab 1:08ed9f1ccd06 66 state = ERROR;
shalab 1:08ed9f1ccd06 67 lastState = IDLE;
shalab 1:08ed9f1ccd06 68 }
shalab 1:08ed9f1ccd06 69 }
shalab 1:08ed9f1ccd06 70 else if (lastState == CHANGENAME){
shalab 1:08ed9f1ccd06 71 state = NAMECHANGED;
shalab 1:08ed9f1ccd06 72 lastState = IDLE;
shalab 1:08ed9f1ccd06 73 }
shalab 1:08ed9f1ccd06 74 break;
shalab 1:08ed9f1ccd06 75 default:
shalab 1:08ed9f1ccd06 76 if(idx<len){
shalab 1:08ed9f1ccd06 77 inCmd[idx++] = c;
shalab 1:08ed9f1ccd06 78 }
shalab 1:08ed9f1ccd06 79 break;
shalab 1:08ed9f1ccd06 80 }
shalab 1:08ed9f1ccd06 81 }
shalab 1:08ed9f1ccd06 82
shalab 1:08ed9f1ccd06 83 void printMainMenu(){
shalab 1:08ed9f1ccd06 84 pc.printf("\r\n[Main Menu]\r\nWhat would you like to do?\r\n");
shalab 1:08ed9f1ccd06 85 pc.printf("[0] change name\r\n");
shalab 1:08ed9f1ccd06 86 pc.printf("[1] print info\r\n");
shalab 1:08ed9f1ccd06 87 }
shalab 1:08ed9f1ccd06 88
shalab 1:08ed9f1ccd06 89 void printInfo(Student &s){
shalab 1:08ed9f1ccd06 90 pc.printf(">> Name: %s ID: %d\r\n", s.getName().c_str(), s.getId());
shalab 1:08ed9f1ccd06 91 }
shalab 1:08ed9f1ccd06 92
shalab 0:0c662a5aeb15 93 int main() {
shalab 3:12ac28cf86f0 94 string name="";
shalab 1:08ed9f1ccd06 95
shalab 1:08ed9f1ccd06 96 pc.attach(&rxCallback, Serial::RxIrq);
shalab 1:08ed9f1ccd06 97 wait(1);
shalab 1:08ed9f1ccd06 98 pc.printf("\r\n\r\n\r\n");
shalab 1:08ed9f1ccd06 99 pc.printf("Shalab - Tutorial_ClassIntro\r\n");
shalab 1:08ed9f1ccd06 100 pc.printf("Please enter your name: ");
shalab 1:08ed9f1ccd06 101 while (state != IDLE) { wait(0.1);}
shalab 1:08ed9f1ccd06 102
shalab 2:e3ebd2ae8892 103 name.assign(inCmd, strlen(inCmd) );
shalab 1:08ed9f1ccd06 104
shalab 3:12ac28cf86f0 105 Student s(name, 0);
shalab 2:e3ebd2ae8892 106 pc.printf("\r\nhello %s, your id is %d\r\n", s.getName().c_str(), s.getId());
shalab 0:0c662a5aeb15 107
shalab 1:08ed9f1ccd06 108 printMainMenu();
shalab 1:08ed9f1ccd06 109 while (1) {
shalab 1:08ed9f1ccd06 110
shalab 1:08ed9f1ccd06 111 switch (state)
shalab 1:08ed9f1ccd06 112 {
shalab 1:08ed9f1ccd06 113 case CHANGENAME:
shalab 1:08ed9f1ccd06 114 pc.printf("Please enter a new name: ");
shalab 1:08ed9f1ccd06 115 state = IDLE;
shalab 1:08ed9f1ccd06 116 break;
shalab 1:08ed9f1ccd06 117
shalab 1:08ed9f1ccd06 118 case NAMECHANGED:
shalab 1:08ed9f1ccd06 119 s.setName(inCmd, sizeof(inCmd) );
shalab 3:12ac28cf86f0 120 s.incId( );
shalab 1:08ed9f1ccd06 121 pc.printf(">> Your name has been set to %s\r\n", s.getName().c_str());
shalab 1:08ed9f1ccd06 122 printMainMenu();
shalab 1:08ed9f1ccd06 123 state = IDLE;
shalab 1:08ed9f1ccd06 124 break;
shalab 1:08ed9f1ccd06 125
shalab 1:08ed9f1ccd06 126 case PRINTINFO:
shalab 1:08ed9f1ccd06 127 printInfo(s);
shalab 1:08ed9f1ccd06 128 printMainMenu();
shalab 1:08ed9f1ccd06 129 state = IDLE;
shalab 1:08ed9f1ccd06 130 break;
shalab 1:08ed9f1ccd06 131
shalab 1:08ed9f1ccd06 132 case ERROR:
shalab 1:08ed9f1ccd06 133 pc.printf(">> Error command\r\n");
shalab 1:08ed9f1ccd06 134 printMainMenu();
shalab 1:08ed9f1ccd06 135 state = IDLE;
shalab 1:08ed9f1ccd06 136 break;
shalab 1:08ed9f1ccd06 137
shalab 1:08ed9f1ccd06 138 case IDLE:
shalab 1:08ed9f1ccd06 139 break;
shalab 1:08ed9f1ccd06 140
shalab 1:08ed9f1ccd06 141 default:
shalab 1:08ed9f1ccd06 142 state = IDLE;
shalab 1:08ed9f1ccd06 143 break;
shalab 1:08ed9f1ccd06 144 }
shalab 1:08ed9f1ccd06 145
shalab 1:08ed9f1ccd06 146 toggle(led1);
shalab 1:08ed9f1ccd06 147 wait(0.10);
shalab 0:0c662a5aeb15 148 };
shalab 0:0c662a5aeb15 149
shalab 0:0c662a5aeb15 150 }