thread based dc motor direction

Dependencies:   Motor mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
tusharbhanarkar
Date:
Fri May 05 06:21:47 2017 +0000
Revision:
12:bbdc4c6d12d3
Parent:
11:0309bef74ba8
thread based dc motor direction

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:491820ee784d 1 #include "mbed.h"
tusharbhanarkar 12:bbdc4c6d12d3 2 #include "Motor.h"
mbed_official 11:0309bef74ba8 3 #include "rtos.h"
emilmont 1:491820ee784d 4
tusharbhanarkar 12:bbdc4c6d12d3 5 AnalogIn inputx(p20); // input pins 20,19,18 for x,y,z axis respectively.
tusharbhanarkar 12:bbdc4c6d12d3 6 AnalogIn inputy(p19);
emilmont 1:491820ee784d 7 DigitalOut led1(LED1);
emilmont 1:491820ee784d 8 DigitalOut led2(LED2);
tusharbhanarkar 12:bbdc4c6d12d3 9 DigitalOut led3(LED3);
tusharbhanarkar 12:bbdc4c6d12d3 10 Motor m1(p23,p5,p6); // pwm, fwd, rev
tusharbhanarkar 12:bbdc4c6d12d3 11 //Motor m2(p22,p11,p12); // pwm,fwd,rev
tusharbhanarkar 12:bbdc4c6d12d3 12
tusharbhanarkar 12:bbdc4c6d12d3 13 Serial pc(USBTX,USBRX); //Serial class for transmission of serial data
tusharbhanarkar 12:bbdc4c6d12d3 14 Thread thread;
tusharbhanarkar 12:bbdc4c6d12d3 15
tusharbhanarkar 12:bbdc4c6d12d3 16 void led2_thread() {
tusharbhanarkar 12:bbdc4c6d12d3 17 //while (true) {
tusharbhanarkar 12:bbdc4c6d12d3 18
emilmont 1:491820ee784d 19 led2 = !led2;
tusharbhanarkar 12:bbdc4c6d12d3 20 pc.printf("thread2 executed");
tusharbhanarkar 12:bbdc4c6d12d3 21 Thread::wait(500);
tusharbhanarkar 12:bbdc4c6d12d3 22
tusharbhanarkar 12:bbdc4c6d12d3 23 //}
tusharbhanarkar 12:bbdc4c6d12d3 24
emilmont 1:491820ee784d 25 }
emilmont 1:491820ee784d 26
tusharbhanarkar 12:bbdc4c6d12d3 27 void led1_thread() {
tusharbhanarkar 12:bbdc4c6d12d3 28 // while(true) {
tusharbhanarkar 12:bbdc4c6d12d3 29
tusharbhanarkar 12:bbdc4c6d12d3 30 led1 = !led1;
tusharbhanarkar 12:bbdc4c6d12d3 31 pc.printf("thread1 executed");
tusharbhanarkar 12:bbdc4c6d12d3 32
tusharbhanarkar 12:bbdc4c6d12d3 33 Thread::wait(500);
tusharbhanarkar 12:bbdc4c6d12d3 34
tusharbhanarkar 12:bbdc4c6d12d3 35 // }
tusharbhanarkar 12:bbdc4c6d12d3 36 }
tusharbhanarkar 12:bbdc4c6d12d3 37
tusharbhanarkar 12:bbdc4c6d12d3 38 void led3_thread() {
tusharbhanarkar 12:bbdc4c6d12d3 39 //while (true) {
tusharbhanarkar 12:bbdc4c6d12d3 40 pc.printf("invalid");
tusharbhanarkar 12:bbdc4c6d12d3 41 led3 = !led3;
tusharbhanarkar 12:bbdc4c6d12d3 42 //m2.speed(0);
tusharbhanarkar 12:bbdc4c6d12d3 43 Thread::wait(500);
tusharbhanarkar 12:bbdc4c6d12d3 44 // }
tusharbhanarkar 12:bbdc4c6d12d3 45 }
tusharbhanarkar 12:bbdc4c6d12d3 46
tusharbhanarkar 12:bbdc4c6d12d3 47
tusharbhanarkar 12:bbdc4c6d12d3 48 int main()
tusharbhanarkar 12:bbdc4c6d12d3 49 {
tusharbhanarkar 12:bbdc4c6d12d3 50 pc.baud(9600); // fixing a constant baud rate of 9600 bps at which mbed will interact with computer
tusharbhanarkar 12:bbdc4c6d12d3 51 float cal_x,cal_y; //caliberation variables
tusharbhanarkar 12:bbdc4c6d12d3 52 int x,y; // variables for x,y,z axes
tusharbhanarkar 12:bbdc4c6d12d3 53 int i=100;
tusharbhanarkar 12:bbdc4c6d12d3 54 while(i--) //small timed loop to caliberate the accelerometer with currentl position of the accelerometer
tusharbhanarkar 12:bbdc4c6d12d3 55 {
tusharbhanarkar 12:bbdc4c6d12d3 56 cal_x=inputx*100;
tusharbhanarkar 12:bbdc4c6d12d3 57 cal_y=inputy*100;
tusharbhanarkar 12:bbdc4c6d12d3 58
tusharbhanarkar 12:bbdc4c6d12d3 59 }
tusharbhanarkar 12:bbdc4c6d12d3 60 while(true)
tusharbhanarkar 12:bbdc4c6d12d3 61 {
tusharbhanarkar 12:bbdc4c6d12d3 62 Thread::wait(500);
tusharbhanarkar 12:bbdc4c6d12d3 63 x=4*(cal_x - inputx*100);
tusharbhanarkar 12:bbdc4c6d12d3 64 y=4*(cal_y - inputy*100);
tusharbhanarkar 12:bbdc4c6d12d3 65
tusharbhanarkar 12:bbdc4c6d12d3 66
tusharbhanarkar 12:bbdc4c6d12d3 67 y=(y-30);
tusharbhanarkar 12:bbdc4c6d12d3 68 pc.printf("x=%d,y=%d *",x,y);
tusharbhanarkar 12:bbdc4c6d12d3 69 pc.printf("\n");
tusharbhanarkar 12:bbdc4c6d12d3 70
tusharbhanarkar 12:bbdc4c6d12d3 71 if(x >= 0 && y >=0)
tusharbhanarkar 12:bbdc4c6d12d3 72 {
tusharbhanarkar 12:bbdc4c6d12d3 73 pc.printf("\n Anticlockwise\n");
tusharbhanarkar 12:bbdc4c6d12d3 74 for (float s= 1.0; s < 10.0 ; s += 0.01)
tusharbhanarkar 12:bbdc4c6d12d3 75 m1.speed(s); // clockwise
tusharbhanarkar 12:bbdc4c6d12d3 76 thread.start(led1_thread);
tusharbhanarkar 12:bbdc4c6d12d3 77 }
tusharbhanarkar 12:bbdc4c6d12d3 78
tusharbhanarkar 12:bbdc4c6d12d3 79
tusharbhanarkar 12:bbdc4c6d12d3 80 else if (x <= 0 && y <=0)
tusharbhanarkar 12:bbdc4c6d12d3 81 {
tusharbhanarkar 12:bbdc4c6d12d3 82 pc.printf("\n Clockwise \n");
tusharbhanarkar 12:bbdc4c6d12d3 83 for(float s= -1.0; s > -10.0 ; s += -0.01)
tusharbhanarkar 12:bbdc4c6d12d3 84 m1.speed(s);
tusharbhanarkar 12:bbdc4c6d12d3 85
tusharbhanarkar 12:bbdc4c6d12d3 86 // anticlockwise //Anticlockwise
tusharbhanarkar 12:bbdc4c6d12d3 87 // led1_thread();
tusharbhanarkar 12:bbdc4c6d12d3 88 thread.start(led2_thread);
tusharbhanarkar 12:bbdc4c6d12d3 89 }
emilmont 1:491820ee784d 90
tusharbhanarkar 12:bbdc4c6d12d3 91 else if((x<=0 && y>=0)|| (x>=0 && y<=0))
tusharbhanarkar 12:bbdc4c6d12d3 92 {
tusharbhanarkar 12:bbdc4c6d12d3 93 pc.printf("");
tusharbhanarkar 12:bbdc4c6d12d3 94 m1.speed(0); //stop
tusharbhanarkar 12:bbdc4c6d12d3 95 thread.start(led3_thread);
tusharbhanarkar 12:bbdc4c6d12d3 96 }
tusharbhanarkar 12:bbdc4c6d12d3 97
tusharbhanarkar 12:bbdc4c6d12d3 98 Thread::wait(500);
tusharbhanarkar 12:bbdc4c6d12d3 99
tusharbhanarkar 12:bbdc4c6d12d3 100 //passing the caliberated x,y,z values to the computer.
tusharbhanarkar 12:bbdc4c6d12d3 101 }
tusharbhanarkar 12:bbdc4c6d12d3 102
tusharbhanarkar 12:bbdc4c6d12d3 103 }