added emg to milestone 1 but not completely working yet

Dependencies:   HIDScope MODSERIAL mbed

Fork of Milestone_1 by Casper Kroon

main.cpp

Committer:
michelvos12
Date:
2018-10-03
Revision:
4:fe0b7e7b1de9
Parent:
3:f00ddd66fe39

File content as of revision 4:fe0b7e7b1de9:

//______Libaries Included______//
#include "mbed.h"
#include "MODSERIAL.h"  //show stuf on screen
#include "HIDScope.h"   //visualise the analog potmeter signal

//______In/out puts____________//
PwmOut pwmpin(D6);              //motor_1 pwn control = (motor speed)
//PwmOut pwmpin2(D5);              //motor_2 pwn control = (motor speed)
DigitalOut directionpin(D7);    //motor_1 (direction control)
//DigitalOut directionpin2(D4);    //motor_2 (direction control)  

AnalogIn    emg0( A0 );         //emg sensor A0
AnalogIn    emg1( A1 );         //emg sensor A1
AnalogIn    emg2( A2 );         //emg sensor A3
        
AnalogIn potmeter(A5);          //potmeter pin (A5) (Control speed and direction)
//AnalogIn potmeter2(A4);         //potmeter pin (A4) (Control speed and direction)

PwmOut led(D10);                //led pot1
//PwnOut led2(D9);                 //led pot2
MODSERIAL pc(USBTX, USBRX);     //show stuf on screen
//DigitalIn button(D2);           //not yet used 


//______Global stuf____________//
//HIDScope scope(2);                      //use 2 channels
Ticker ticker;                          //moter ticker
enum states{forward, stop, backwards};  //motor_1 states
states CurrentState;

//______For EMG________________//
Ticker      sample_timer;       //emg ticker
HIDScope    scope( 6 );         //6 channels in hidscope
DigitalOut  led_emg(LED1);

//______Global variables_______//
volatile float x;
volatile float y;
volatile float scaled_potmeter;
volatile float c;

//______Function: Hidscope_emg__//
void sample()
{
    /* Set the sampled emg values in channel 0 (the first channel) and 1 (the second channel) in the 'HIDScope' instance named 'scope' */
    scope.set(0, emg0.read() );
    scope.set(1, emg1.read() );
    scope.set(2, emg2.read() );

    scope.send();
    /* To indicate that the function is working, the LED is toggled */
    led_emg = !led_emg;
}

void sendData() {
    scope.set(3,potmeter);  //set the potmeter data to the 3th scope
    scope.set(4,x);
    scope.send();           //send the datapoints of the potmeter
}

//______Funcion: Motor state + Makes moter do stuf___//
void Proces_states(void){
    switch (CurrentState){       
        case forward:                   //Funcion: Forward
            directionpin = 1;
            pwmpin.write(scaled_potmeter);  //pwm of motor is potmeter value
            led.write(scaled_potmeter);     //led is potmeter value  
            break;
        case stop:                      //Funcion: Stop
                                        // do nothing
            break;
        case backwards:                 //Function: Backwards
            directionpin = 0;
            c = scaled_potmeter*-1;
            pwmpin.write(c);            //pwm of motor is potmeter value
            led.write(c);               //led is potmeter value 
            break; 
    }            
}

//______Funcion: Main____________//
int main() {
    x = 1;                              //placeholder value for potmeter of second motor
    
    pwmpin.period_us(60);               //60 microseconds PWM period, 16.7 kHz
    led.period_us(60);                  //60 microseconds
    ticker.attach(&sendData, 0.005f);   //send data to hidscope 1/0.005 = 200Hz

//______Scale potmeter___________//
    while (true) {  
        scaled_potmeter = (potmeter*2)-1; //scale potmeter from 0-1 to (-1 to 1)

//______Readout potmeter + giva and call to Proces_state______//
        if (scaled_potmeter > 0) {
            CurrentState = forward;
            pc.printf("state = forward\r\n");
            Proces_states();
        }
        if (scaled_potmeter == 0) {
            CurrentState = stop;
            pc.printf("state = stop\r\n");
            Proces_states(); 
        }
        if (scaled_potmeter < 0) {
            CurrentState = backwards;
            pc.printf("state = backwards\r\n");
            Proces_states(); 
        }   

        wait(0.2f);
        
/**Attach the 'sample' function to the timer 'sample_timer'.
* this ensures that 'sample' is executed every... 0.002 seconds = 500 Hz
*/
    sample_timer.attach(&sample, 0.002);

    /*empty loop, sample() is executed periodically*/
    while(1) {}
    }

}