-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstateCodeGenerator.ino
103 lines (89 loc) · 3.45 KB
/
stateCodeGenerator.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
This sketch generates a program for implimenting a state machine
using the FiniteStateMachine Library.
user is prompted for stste machine name and up to 10 states
a fully functioining sketch is generated as output.
*/
String stateMachineName ,stateName;
String states[11];
int stateNum;
String getString(String prompt){
String readString = "";
//Serial.println("getting string...");
Serial.println(prompt);
while (!Serial.available()) {}
while (Serial.available()) readString = Serial.readStringUntil('\n');
//Serial.println("returning <"+readString +">");
return readString;
}
String capitalize(String str) {
String s = char(toupper(char(str[0]))) + str.substring(1, sizeof(str)-1);
return s;
}
void process() {
Serial.println(""); Serial.println("GENERATED CODE:"); Serial.println("");
Serial.println("#include <FiniteStateMachine.h>"); Serial.println("");
Serial.println("//Forward Declarations"); Serial.println("");
int n = 1;
do{
Serial.println("void enter" + capitalize(states[n]) + "();");
Serial.println("void update" + capitalize(states[n]) + "();");
Serial.println("void exit" + capitalize(states[n]) + "();");
Serial.println("");
n++;
} while (states[n] != "#" && n < 10);
//state declarations
Serial.println("//State Definitions"); Serial.println("");
n = 1;
do {
Serial.println("State " + capitalize(states[n]) + " = State(enter" + capitalize(states[n])+",update"+ capitalize(states[n]) +",exit" + capitalize(states[n]) + ");");
n++;
} while (states[n] != "#" && n < 4);
Serial.println(""); Serial.println("//State Machine construction"); Serial.println("");
Serial.println("FiniteStateMachine " + capitalize(stateMachineName) + "= FiniteStateMachine("+capitalize(states[1])+");");
Serial.println("");
Serial.println("//State Functions"); Serial.println("");
n = 1;
do {
Serial.println("void enter" + capitalize(states[n]) + "(){\n\n}\n");
Serial.println("void update" + capitalize(states[n]) + "(){\n\n}\n");
Serial.println("void exit" + capitalize(states[n]) + "(){\n\n}\n");
Serial.println("");
n++;
} while (states[n] != "#" && n < 4);
Serial.println("");
Serial.println("void setup(){\n\n}");
Serial.println("");
Serial.println("void loop(){\n"+capitalize(stateMachineName)+".update();\n}");
}
void printStates() {
Serial.println("PRINTING STATES");
for (int s = 1; s < 11; s++) {
Serial.println( (String)s + " " + (String)states[s]);
//Serial.println(s<<" "<<states[s]);
}
Serial.println("DONE PRINTING STATES");
}
void setup() {
Serial.begin(115200);
delay(2000);
for (int s = 1; s < 10; s++) states[s] = "";
//printStates();
stateMachineName = getString("Enter name of state machine "+ stateNum);
Serial.println("");
Serial.println("State Machine " + stateMachineName + " created");
Serial.println("");
stateNum = 0;
states[0] = " "; //seed
do {
stateNum++;
states[stateNum] = getString("enter name of state # " + (String)stateNum);
Serial.println("");
Serial.println(states[stateNum] + " created.");
//printStates();
} while (states[stateNum] != "#" && stateNum<=10);// end do
//printStates();
process();
}
void loop() {
}