This version does not work on my pc however it should work if i look at all the data send to hidscope and de led which does it correct. We should tray another pc because my pc does give still some errors on the libaries

Dependencies:   HIDScope MODSERIAL mbed

Fork of Milestone_1_Motor_DualDirection_potmeter_v2 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