Motor + potmerer + EMG + led

Dependencies:   HIDScope MODSERIAL mbed

Fork of EMG_Motor_LED by Michel Vos

Committer:
CasperK
Date:
Wed Oct 10 11:48:55 2018 +0000
Revision:
6:df37e7d33513
Parent:
5:5442448ac4d1
Random crashes

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___//
michelvos12 5:5442448ac4d1 62 void Proces_states(){
CasperK 3:f00ddd66fe39 63 switch (CurrentState){
michelvos12 4:fe0b7e7b1de9 64 case forward: //Funcion: Forward
CasperK 6:df37e7d33513 65 directionpin = 1;
CasperK 6:df37e7d33513 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 6:df37e7d33513 73 directionpin = 0;
CasperK 3:f00ddd66fe39 74 c = scaled_potmeter*-1;
CasperK 6:df37e7d33513 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
michelvos12 5:5442448ac4d1 88 sample_timer.attach(&sample, 0.002); //for the emg
CasperK 6:df37e7d33513 89 pc.printf(" ** reset program **\r\n");
CasperK 0:9922b502cbc3 90
michelvos12 4:fe0b7e7b1de9 91 //______Scale potmeter___________//
CasperK 3:f00ddd66fe39 92 while (true) {
CasperK 3:f00ddd66fe39 93 scaled_potmeter = (potmeter*2)-1; //scale potmeter from 0-1 to (-1 to 1)
CasperK 3:f00ddd66fe39 94
michelvos12 4:fe0b7e7b1de9 95 //______Readout potmeter + giva and call to Proces_state______//
CasperK 3:f00ddd66fe39 96 if (scaled_potmeter > 0) {
CasperK 3:f00ddd66fe39 97 CurrentState = forward;
CasperK 3:f00ddd66fe39 98 pc.printf("state = forward\r\n");
CasperK 3:f00ddd66fe39 99 Proces_states();
CasperK 3:f00ddd66fe39 100 }
CasperK 3:f00ddd66fe39 101 if (scaled_potmeter == 0) {
CasperK 3:f00ddd66fe39 102 CurrentState = stop;
CasperK 3:f00ddd66fe39 103 pc.printf("state = stop\r\n");
CasperK 3:f00ddd66fe39 104 Proces_states();
CasperK 3:f00ddd66fe39 105 }
CasperK 3:f00ddd66fe39 106 if (scaled_potmeter < 0) {
CasperK 3:f00ddd66fe39 107 CurrentState = backwards;
CasperK 3:f00ddd66fe39 108 pc.printf("state = backwards\r\n");
CasperK 3:f00ddd66fe39 109 Proces_states();
CasperK 3:f00ddd66fe39 110 }
michelvos12 4:fe0b7e7b1de9 111
CasperK 3:f00ddd66fe39 112 wait(0.2f);
michelvos12 4:fe0b7e7b1de9 113
michelvos12 5:5442448ac4d1 114 /**Attach the 'sample' function to the timer 'sample_timer'.
michelvos12 5:5442448ac4d1 115 * this ensures that 'sample' is executed every... 0.002 seconds = 500 Hz
michelvos12 5:5442448ac4d1 116 */
michelvos12 4:fe0b7e7b1de9 117
michelvos12 5:5442448ac4d1 118
michelvos12 5:5442448ac4d1 119 /*empty loop, sample() is executed periodically*/
michelvos12 5:5442448ac4d1 120 //while(1) {}
CasperK 0:9922b502cbc3 121 }
CasperK 6:df37e7d33513 122 pc.printf(" **program stopped**\r\n");
CasperK 2:735ca8577f31 123 }
CasperK 2:735ca8577f31 124
CasperK 2:735ca8577f31 125