Opzetje

Dependencies:   mbed QEI HIDScope biquadFilter MODSERIAL FastPWM

OpzetjeBrechje.cpp

Committer:
s1868365
Date:
2019-10-03
Revision:
8:2fc7a3a7f09a

File content as of revision 8:2fc7a3a7f09a:

#include "mbed.h"
//#include "HIDScope.h"
//#include "QEI.h"
#include "MODSERIAL.h"
//#include "BiQuad.h"
//#include "FastPWM.h"

MODSERIAL pc(USBTX, USBRX);

//TIMER
timer

//MOTORSPEED
Motorspeed

//LED
DigitalOut GreenLED(LED1);
DigitalOut RedLED(LED2);

//Buttons
Button1 //to start ME calibration
Button2

// declare a new variable type (I called it states)
enum states {STATE_START, STATE_MECALIBRATION,STATE_EMGCALIBRATION,STATE_MOVETOSTART, STATE_READYTOSTART, STATE_DEMO, STATE_MOVE, STATE_WAIT, STATE_OFF};

// create a variable (of type ‘states’) called ‘mystate', initialize it
states mystate = STATE_START;
bool stateChanged = true; // Make sure the initialization of first state is executed

void ProcessStateMachine(void) 
{
case STATE_START : // Start Robot
if (stateChanged) //
{   printf("Robot is on, ready to play. Press button to calibrate");
    RedLED = 1 ;  //Turn red led on
    stateChanged = false; 
    }
//State Me Calibration
if (Button1.Pressed())
{currentState = STATE_MECALIBRATION;
stateChanged = true;
}
break; // end of STATE_START

case STATE_MECALIBRATION:
if (stateChanged) //
{   printf("Robot is calibrating ME");
    RedLED = SLOW BLINK ;  //Blinking SLOW RedLED 
    //actions of ME CALIBRATION
    Move motor to Mechanical stop
    Stop motor
    Start timer 
        stateChanged = false; 
    }

//State EMG calibration
if (Motorspeed = 0 && timer t > 2)
{currentState = STATE_EMGCALIBRATION;
stateChanged = true;
}
break; // end of STATE_MECALIBRATION

case STATE_EMGCALIBRATION:
if (stateChanged) //
{   printf("Robot is calibrating EMG");
    RedLED = FAST BLINK ;  //Blinking FAST RedLED 
    //actions of EMG CALIBRATION
    Calculating EMG_max
    Calibrating
    Measuring current EMG_signal
        stateChanged = false; 
    }

//State EMG calibration
if (EMG_signal < 10% of EMG_max && timer t > 2)
{currentState = STATE_MOVETOSTART;
stateChanged = true;
}
break; // end of STATE_EMGCALIBRATION


case STATE_MOVETOSTART : 
if (stateChanged) //
{   printf("Robot is moving to start position");
    GreenLED = BLINKING FAST ;  //Blinking FastRedLED
    //actions of Robot moving to start 
        stateChanged = false; 
    }
//State Ready to start
if (Position is x,y,z ? && timer t > 2) //hoe gaan we dit bepalen?
{currentState = STATE_READYTOSTART;
stateChanged = true;
}
break; // end of STATE_MOVETOSTART

case STATE_READYTOSTART : 
if (stateChanged) //
{   printf("Robot is ready to start, press button 1 for starting DEMO or press button 2 or contract muscle with EMG electrode to start Game Mode ");
    GreenLED = ON ;  //GreenLed is on
    //Wait for input user
        stateChanged = false; 
    }
//State Ready to start
if (Button2.pressed() && timer t > 2 or EMG_signal > 20% EMG_max)
{currentState = STATE_MOVE;
stateChanged = true;
}
else if (Button1.pressed())
{currentState = STATE_DEMO;
stateChanged = true;
}
break; // end of STATE_READYTOSTART

case STATE_DEMO : 
if (stateChanged) //
{   printf("Robot is performing DEMO");
    //actions of DEMO
    stateChanged = false; 
    }

//State Move to Start
if ( Position is x,y,z ? && timer t > 2)
{currentState = STATE_MOVETOSTART;
stateChanged = true;
}
break; // end of State DEMO


case STATE_MOVE : 
if (stateChanged) //
{   printf("Time to play!");
    //actions of game mode
    stateChanged = false; 
    }

//State Wait
if (EMG_signal < 20% EMG_max for t > 5)
{currentState = STATE_WAIT;
stateChanged = true;
}
break; // end of State MOVE

case STATE_WAIT : 
if (stateChanged) //
{   printf("Robot is waiting for your actions. Press button 2 or contract muscle to continue playing. Press button 1 to Restart. Hold button 1 pressed to shut down the game");
    //Waiting for input actions
    stateChanged = false; 
    }

//State Move
if (Button2.pressed() or EMG_signal > 20% EMG_max)
{currentState = STATE_MOVE;
stateChanged = true;
}

else if (Button1.pressed())
{currentState = STATE_MOVETOSTART;
stateChanged = true;
}

else if (Button1.pressed() for timer t > 5) 
{currentState = STATE_OFF;
stateChanged = true;
}
break; // end of State WAIT

case STATE_OFF:
if (stateChanged) //
{   printf("No Signal. Restart by putting out and back in USB cable"
  stateChanged = false; 
    }



default:
TurnMotorsOff(); // Safety is important!!
pc.printf(“Unknown or unimplemented state reached!\n”); 

} //end of switch






int main()
{
    
    }
}