Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 1:08ed9f1ccd06
- Parent:
- 0:0c662a5aeb15
- Child:
- 2:e3ebd2ae8892
--- a/main.cpp Fri Feb 28 10:36:09 2014 +0000 +++ b/main.cpp Mon Mar 03 00:32:50 2014 +0000 @@ -1,34 +1,152 @@ #include "mbed.h" +#include <string> #define toggle(a) {a=a^1;} -DigitalOut led1(LED1); +using namespace std; + +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); Serial pc(USBTX, USBRX); + class Student { public: - Student(){ - pc.printf("Student()\r\n"); - } + Student(){}; + Student(string n, int i): name(n), id(i){} + + void setName(string n) { name = n; } + void setName(char* n, int i){ name.assign(n, i );} + string getName() { return name; } - ~Student(){ - pc.printf("~Student()\r\n"); - } - - void foo() { - pc.printf("foo()\r\n"); - } + void setId(int i) { id = i; } + int getId(){ return id; } + + private: + string name; + int id; }; +// Serial com +const int len = 64; +char inCmd[len]; +bool inCmdReady = false; + +// State machine +enum {STARTUP, IDLE, ERROR, PRINTMAINMENU, CHANGENAME, NAMECHANGED, PRINTINFO}; +int state(STARTUP); + + +void rxCallback() { + static int idx = 0; + static int lastState=STARTUP; + + char c = pc.getc(); + switch (c){ + case '\n': + break; + case '\r': + inCmd[idx]='\0'; + idx=0; + if (lastState == STARTUP){ + state = IDLE; + lastState = IDLE; + } + else if (lastState == IDLE) { + if (inCmd[idx] == '0') { + state = CHANGENAME; + lastState = CHANGENAME; + } + else if (inCmd[idx] == '1'){ + state = PRINTINFO; + lastState = IDLE; + } + else { + state = ERROR; + lastState = IDLE; + } + } + else if (lastState == CHANGENAME){ + state = NAMECHANGED; + lastState = IDLE; + } + break; + default: + if(idx<len){ + inCmd[idx++] = c; + } + break; + } +} + +void printMainMenu(){ + pc.printf("\r\n[Main Menu]\r\nWhat would you like to do?\r\n"); + pc.printf("[0] change name\r\n"); + pc.printf("[1] print info\r\n"); +} + +void printInfo(Student &s){ + pc.printf(">> Name: %s ID: %d\r\n", s.getName().c_str(), s.getId()); +} + int main() { - - { - Student s; - s.foo(); - } + string name=""; + int id(0); + + pc.attach(&rxCallback, Serial::RxIrq); + wait(1); + pc.printf("\r\n\r\n\r\n"); + pc.printf("Shalab - Tutorial_ClassIntro\r\n"); + pc.printf("Please enter your name: "); + while (state != IDLE) { wait(0.1);} + + name.assign(inCmd, sizeof(inCmd) ); + + + Student s(name, id); + pc.printf("hello %s, your id is %d\r\n", s.getName().c_str(), s.getId()); - while (1) { - toggle(led1); - wait(1); + printMainMenu(); + while (1) { + + switch (state) + { + case CHANGENAME: + pc.printf("Please enter a new name: "); + state = IDLE; + break; + + case NAMECHANGED: + s.setName(inCmd, sizeof(inCmd) ); + s.setId(++id); + pc.printf(">> Your name has been set to %s\r\n", s.getName().c_str()); + printMainMenu(); + state = IDLE; + break; + + case PRINTINFO: + printInfo(s); + printMainMenu(); + state = IDLE; + break; + + case ERROR: + pc.printf(">> Error command\r\n"); + printMainMenu(); + state = IDLE; + break; + + case IDLE: + break; + + default: + state = IDLE; + break; + } + + toggle(led1); + wait(0.10); }; }