Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- FSM assignment
- */
- #include <Arduino.h>
- #include <Wire.h>
- enum State {
- I000, // 0
- I001, // 1
- I010, // 2
- I011, // 3
- I100, // 4
- I101, // 5
- I110, // 6
- I111, // 7
- D000, // 8
- D001, // 9
- D010, // 10
- D011, // 11
- D100, // 12
- D101, // 13
- D110, // 14
- D111 // 15
- };
- State state = I000;
- void setup() {
- Serial.begin(9600);
- }
- void loop() {
- state = nextState(state);
- delay(1000);
- }
- State nextState (State state) {
- char input = Serial.read();
- switch (state) {
- case I000:
- Serial.println(" 0 : 000 ");
- if (checkReverse()) {
- state = I001;
- }
- else {
- state = D111;
- }
- break;
- case I001:
- Serial.println(" 1 : 001 ");
- if (checkReverse()) {
- state = I010;
- }
- else {
- state = D000;
- }
- break;
- case I010:
- Serial.println(" 2 : 010 ");
- if (checkReverse()) {
- state = I011;
- }
- else {
- state = D001;
- }
- break;
- case I011:
- Serial.println(" 3 : 011 ");
- if (checkReverse()) {
- state = I100;
- }
- else {
- state = D010;
- }
- break;
- case I100:
- Serial.println(" 4 : 100 ");
- if (checkReverse()) {
- state = I101;
- }
- else {
- state = D011;
- }
- break;
- case I101:
- Serial.println(" 5 : 101 ");
- if (checkReverse()) {
- state = I110;
- }
- else {
- state = D100;
- }
- break;
- case I110:
- Serial.println(" 6 : 110 ");
- if (checkReverse()) {
- state = I111;
- }
- else {
- state = D101;
- }
- break;
- case I111:
- Serial.println(" 7 : 111 ");
- if (checkReverse()) {
- state = I000;
- }
- else {
- state = D110;
- }
- break;
- case D000:
- Serial.println(" 0 : 000 ");
- if (checkReverse()) {
- state = D111;
- }
- else {
- state = I001;
- }
- break;
- case D111:
- Serial.println(" 7 : 111 ");
- if (checkReverse()) {
- state = D110;
- }
- else {
- state = I000;
- }
- break;
- case D110:
- Serial.println(" 6 : 110 ");
- if (checkReverse()) {
- state = D101;
- }
- else {
- state = I111;
- }
- break;
- case D101:
- Serial.println(" 5 : 101 ");
- if (checkReverse()) {
- state = D100;
- }
- else {
- state = I110;
- }
- break;
- case D100:
- Serial.println(" 4 : 100 ");
- if (checkReverse()) {
- state = D011;
- }
- else {
- state = I101;
- }
- break;
- case D011:
- Serial.println(" 3 : 011 ");
- if (checkReverse()) {
- state = D010;
- }
- else {
- state = I100;
- }
- break;
- case D010:
- Serial.println(" 2 : 010 ");
- if (checkReverse()) {
- state = D001;
- }
- else {
- state = I011;
- }
- break;
- case D001:
- Serial.println(" 1 : 001 ");
- if (checkReverse()) {
- state = D000;
- }
- else {
- state = I010;
- }
- break;
- }
- return state;
- }
- bool checkReverse(){ // or no inputs??
- int input = Serial.read();
- if(input != -1){
- Serial.println(" --Reverse-- ");
- return true;
- }
- return false;
- }
- //to do: don't use checkReverse in nextState and make checkReverse a method and use it in the loop
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement