Motor + potmerer + EMG + led

Dependencies:   HIDScope MODSERIAL mbed

Fork of EMG_Motor_LED by Michel Vos

Committer:
michelvos12
Date:
Wed Oct 03 19:21:32 2018 +0000
Revision:
4:fe0b7e7b1de9
Parent:
3:f00ddd66fe39
Child:
5:5442448ac4d1
included emg to milestone 1, but motor not compleatly working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
michelvos12 4:fe0b7e7b1de9 1 //______Libaries Included______//
CasperK 0:9922b502cbc3 2 #include "mbed.h"
michelvos12 4:fe0b7e7b1de9 3 #include "MODSERIAL.h" //show stuf on screen
michelvos12 4:fe0b7e7b1de9 4 #include "HIDScope.h" //visualise the analog potmeter signal
michelvos12 4:fe0b7e7b1de9 5
michelvos12 4:fe0b7e7b1de9 6 //______In/out puts____________//
michelvos12 4:fe0b7e7b1de9 7 PwmOut pwmpin(D6); //motor_1 pwn control = (motor speed)
michelvos12 4:fe0b7e7b1de9 8 //PwmOut pwmpin2(D5); //motor_2 pwn control = (motor speed)
michelvos12 4:fe0b7e7b1de9 9 DigitalOut directionpin(D7); //motor_1 (direction control)
michelvos12 4:fe0b7e7b1de9 10 //DigitalOut directionpin2(D4); //motor_2 (direction control)
CasperK 0:9922b502cbc3 11
michelvos12 4:fe0b7e7b1de9 12 AnalogIn emg0( A0 ); //emg sensor A0
michelvos12 4:fe0b7e7b1de9 13 AnalogIn emg1( A1 ); //emg sensor A1
michelvos12 4:fe0b7e7b1de9 14 AnalogIn emg2( A2 ); //emg sensor A3
michelvos12 4:fe0b7e7b1de9 15
michelvos12 4:fe0b7e7b1de9 16 AnalogIn potmeter(A5); //potmeter pin (A5) (Control speed and direction)
michelvos12 4:fe0b7e7b1de9 17 //AnalogIn potmeter2(A4); //potmeter pin (A4) (Control speed and direction)
CasperK 0:9922b502cbc3 18
michelvos12 4:fe0b7e7b1de9 19 PwmOut led(D10); //led pot1
michelvos12 4:fe0b7e7b1de9 20 //PwnOut led2(D9); //led pot2
michelvos12 4:fe0b7e7b1de9 21 MODSERIAL pc(USBTX, USBRX); //show stuf on screen
michelvos12 4:fe0b7e7b1de9 22 //DigitalIn button(D2); //not yet used
michelvos12 4:fe0b7e7b1de9 23
michelvos12 4:fe0b7e7b1de9 24
michelvos12 4:fe0b7e7b1de9 25 //______Global stuf____________//
michelvos12 4:fe0b7e7b1de9 26 //HIDScope scope(2); //use 2 channels
michelvos12 4:fe0b7e7b1de9 27 Ticker ticker; //moter ticker
michelvos12 4:fe0b7e7b1de9 28 enum states{forward, stop, backwards}; //motor_1 states
CasperK 2:735ca8577f31 29 states CurrentState;
CasperK 0:9922b502cbc3 30
michelvos12 4:fe0b7e7b1de9 31 //______For EMG________________//
michelvos12 4:fe0b7e7b1de9 32 Ticker sample_timer; //emg ticker
michelvos12 4:fe0b7e7b1de9 33 HIDScope scope( 6 ); //6 channels in hidscope
michelvos12 4:fe0b7e7b1de9 34 DigitalOut led_emg(LED1);
michelvos12 4:fe0b7e7b1de9 35
michelvos12 4:fe0b7e7b1de9 36 //______Global variables_______//
CasperK 0:9922b502cbc3 37 volatile float x;
CasperK 0:9922b502cbc3 38 volatile float y;
CasperK 3:f00ddd66fe39 39 volatile float scaled_potmeter;
CasperK 3:f00ddd66fe39 40 volatile float c;
CasperK 0:9922b502cbc3 41
michelvos12 4:fe0b7e7b1de9 42 //______Function: Hidscope_emg__//
michelvos12 4:fe0b7e7b1de9 43 void sample()
michelvos12 4:fe0b7e7b1de9 44 {
michelvos12 4:fe0b7e7b1de9 45 /* Set the sampled emg values in channel 0 (the first channel) and 1 (the second channel) in the 'HIDScope' instance named 'scope' */
michelvos12 4:fe0b7e7b1de9 46 scope.set(0, emg0.read() );
michelvos12 4:fe0b7e7b1de9 47 scope.set(1, emg1.read() );
michelvos12 4:fe0b7e7b1de9 48 scope.set(2, emg2.read() );
michelvos12 4:fe0b7e7b1de9 49
michelvos12 4:fe0b7e7b1de9 50 scope.send();
michelvos12 4:fe0b7e7b1de9 51 /* To indicate that the function is working, the LED is toggled */
michelvos12 4:fe0b7e7b1de9 52 led_emg = !led_emg;
CasperK 0:9922b502cbc3 53 }
CasperK 0:9922b502cbc3 54
michelvos12 4:fe0b7e7b1de9 55 void sendData() {
michelvos12 4:fe0b7e7b1de9 56 scope.set(3,potmeter); //set the potmeter data to the 3th scope
michelvos12 4:fe0b7e7b1de9 57 scope.set(4,x);
michelvos12 4:fe0b7e7b1de9 58 scope.send(); //send the datapoints of the potmeter
michelvos12 4:fe0b7e7b1de9 59 }
michelvos12 4:fe0b7e7b1de9 60
michelvos12 4:fe0b7e7b1de9 61 //______Funcion: Motor state + Makes moter do stuf___//
CasperK 3:f00ddd66fe39 62 void Proces_states(void){
CasperK 3:f00ddd66fe39 63 switch (CurrentState){
michelvos12 4:fe0b7e7b1de9 64 case forward: //Funcion: Forward
CasperK 3:f00ddd66fe39 65 directionpin = 1;
michelvos12 4:fe0b7e7b1de9 66 pwmpin.write(scaled_potmeter); //pwm of motor is potmeter value
michelvos12 4:fe0b7e7b1de9 67 led.write(scaled_potmeter); //led is potmeter value
CasperK 3:f00ddd66fe39 68 break;
michelvos12 4:fe0b7e7b1de9 69 case stop: //Funcion: Stop
michelvos12 4:fe0b7e7b1de9 70 // do nothing
CasperK 3:f00ddd66fe39 71 break;
michelvos12 4:fe0b7e7b1de9 72 case backwards: //Function: Backwards
CasperK 3:f00ddd66fe39 73 directionpin = 0;
CasperK 3:f00ddd66fe39 74 c = scaled_potmeter*-1;
michelvos12 4:fe0b7e7b1de9 75 pwmpin.write(c); //pwm of motor is potmeter value
michelvos12 4:fe0b7e7b1de9 76 led.write(c); //led is potmeter value
CasperK 3:f00ddd66fe39 77 break;
CasperK 3:f00ddd66fe39 78 }
CasperK 3:f00ddd66fe39 79 }
CasperK 3:f00ddd66fe39 80
michelvos12 4:fe0b7e7b1de9 81 //______Funcion: Main____________//
CasperK 2:735ca8577f31 82 int main() {
michelvos12 4:fe0b7e7b1de9 83 x = 1; //placeholder value for potmeter of second motor
CasperK 0:9922b502cbc3 84
michelvos12 4:fe0b7e7b1de9 85 pwmpin.period_us(60); //60 microseconds PWM period, 16.7 kHz
michelvos12 4:fe0b7e7b1de9 86 led.period_us(60); //60 microseconds
michelvos12 4:fe0b7e7b1de9 87 ticker.attach(&sendData, 0.005f); //send data to hidscope 1/0.005 = 200Hz
CasperK 0:9922b502cbc3 88
michelvos12 4:fe0b7e7b1de9 89 //______Scale potmeter___________//
CasperK 3:f00ddd66fe39 90 while (true) {
CasperK 3:f00ddd66fe39 91 scaled_potmeter = (potmeter*2)-1; //scale potmeter from 0-1 to (-1 to 1)
CasperK 3:f00ddd66fe39 92
michelvos12 4:fe0b7e7b1de9 93 //______Readout potmeter + giva and call to Proces_state______//
CasperK 3:f00ddd66fe39 94 if (scaled_potmeter > 0) {
CasperK 3:f00ddd66fe39 95 CurrentState = forward;
CasperK 3:f00ddd66fe39 96 pc.printf("state = forward\r\n");
CasperK 3:f00ddd66fe39 97 Proces_states();
CasperK 3:f00ddd66fe39 98 }
CasperK 3:f00ddd66fe39 99 if (scaled_potmeter == 0) {
CasperK 3:f00ddd66fe39 100 CurrentState = stop;
CasperK 3:f00ddd66fe39 101 pc.printf("state = stop\r\n");
CasperK 3:f00ddd66fe39 102 Proces_states();
CasperK 3:f00ddd66fe39 103 }
CasperK 3:f00ddd66fe39 104 if (scaled_potmeter < 0) {
CasperK 3:f00ddd66fe39 105 CurrentState = backwards;
CasperK 3:f00ddd66fe39 106 pc.printf("state = backwards\r\n");
CasperK 3:f00ddd66fe39 107 Proces_states();
CasperK 3:f00ddd66fe39 108 }
michelvos12 4:fe0b7e7b1de9 109
CasperK 3:f00ddd66fe39 110 wait(0.2f);
michelvos12 4:fe0b7e7b1de9 111
michelvos12 4:fe0b7e7b1de9 112 /**Attach the 'sample' function to the timer 'sample_timer'.
michelvos12 4:fe0b7e7b1de9 113 * this ensures that 'sample' is executed every... 0.002 seconds = 500 Hz
michelvos12 4:fe0b7e7b1de9 114 */
michelvos12 4:fe0b7e7b1de9 115 sample_timer.attach(&sample, 0.002);
michelvos12 4:fe0b7e7b1de9 116
michelvos12 4:fe0b7e7b1de9 117 /*empty loop, sample() is executed periodically*/
michelvos12 4:fe0b7e7b1de9 118 while(1) {}
CasperK 0:9922b502cbc3 119 }
michelvos12 4:fe0b7e7b1de9 120
CasperK 2:735ca8577f31 121 }
CasperK 2:735ca8577f31 122
CasperK 2:735ca8577f31 123