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.
main.cpp@3:12ac28cf86f0, 2014-03-07 (annotated)
- 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?
User | Revision | Line number | New 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 | } |