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
diff -r 0c662a5aeb15 -r 08ed9f1ccd06 main.cpp
--- 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);
};
}