eLab Team / Mbed OS DcMotorTest
Committer:
elab
Date:
Sat Feb 20 09:04:41 2021 +0000
Revision:
2:72952132894a
Version 1 of the smart marbles factory

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elab 2:72952132894a 1 #include "mbed.h"
elab 2:72952132894a 2 #include "stdio.h"
elab 2:72952132894a 3
elab 2:72952132894a 4 //DigitalOut led(LED1);
elab 2:72952132894a 5
elab 2:72952132894a 6 Serial pc(USBTX, USBRX);
elab 2:72952132894a 7 DigitalIn my_button(USER_BUTTON); // Use the user button to switch from dc motor to servo motor and vice versa
elab 2:72952132894a 8 DigitalIn end_stop(A5); // relais fin de course
elab 2:72952132894a 9
elab 2:72952132894a 10 PwmOut l1_dc_motor_cw(D2);
elab 2:72952132894a 11 PwmOut l1_dc_motor_ccw(D3);
elab 2:72952132894a 12 DigitalOut l1_servo_cw(D4);
elab 2:72952132894a 13 DigitalOut l1_servo_ccw(D5);
elab 2:72952132894a 14 PwmOut l2_dc_motor_cw(D6);
elab 2:72952132894a 15 PwmOut l2_dc_motor_ccw(D7);
elab 2:72952132894a 16 DigitalOut l2_servo_cw(D8);
elab 2:72952132894a 17 DigitalOut l2_servo_ccw(D9);
elab 2:72952132894a 18 PwmOut l3_dc_motor_cw(D10);
elab 2:72952132894a 19 PwmOut l3_dc_motor_ccw(D11);
elab 2:72952132894a 20 DigitalOut l3_servo_cw(D12);
elab 2:72952132894a 21 DigitalOut l3_servo_ccw(D13);
elab 2:72952132894a 22
elab 2:72952132894a 23 void run_l1_dc_motor_cw(void){
elab 2:72952132894a 24 l1_dc_motor_cw.period_ms(20);
elab 2:72952132894a 25 l1_dc_motor_cw.pulsewidth_us(4000);
elab 2:72952132894a 26 }
elab 2:72952132894a 27 void run_l1_dc_motor_ccw(void){
elab 2:72952132894a 28 l1_dc_motor_ccw.period_ms(20); // shoul be 20 ms (490 Hz) and 10 ms for the servo (980 Hz)
elab 2:72952132894a 29 l1_dc_motor_ccw.pulsewidth_us(5000);
elab 2:72952132894a 30 }
elab 2:72952132894a 31 void run_l2_dc_motor_cw(void){
elab 2:72952132894a 32 l2_dc_motor_cw.period_ms(20);
elab 2:72952132894a 33 l2_dc_motor_cw.pulsewidth_us(20000);
elab 2:72952132894a 34 }
elab 2:72952132894a 35 void run_l2_dc_motor_ccw(void){
elab 2:72952132894a 36 l2_dc_motor_ccw.period_ms(20); // shoul be 20 ms (490 Hz) and 10 ms for the servo (980 Hz)
elab 2:72952132894a 37 l2_dc_motor_ccw.pulsewidth_us(20000);
elab 2:72952132894a 38 }
elab 2:72952132894a 39 void run_l3_dc_motor_cw(void){
elab 2:72952132894a 40 // l3_dc_motor_cw.period_ms(20);
elab 2:72952132894a 41 // l3_dc_motor_cw.pulsewidth_us(10000);
elab 2:72952132894a 42 }
elab 2:72952132894a 43 void run_l3_dc_motor_ccw(void){
elab 2:72952132894a 44 l3_dc_motor_ccw.period_ms(20); // shoul be 20 ms (490 Hz) and 10 ms for the servo (980 Hz)
elab 2:72952132894a 45 l3_dc_motor_ccw.pulsewidth_us(10000);
elab 2:72952132894a 46 }
elab 2:72952132894a 47 void stop_dc_motor(void){
elab 2:72952132894a 48 l1_dc_motor_cw.pulsewidth_us(0);
elab 2:72952132894a 49 l1_dc_motor_ccw.pulsewidth_us(0);
elab 2:72952132894a 50 l2_dc_motor_cw.pulsewidth_us(0);
elab 2:72952132894a 51 l2_dc_motor_ccw.pulsewidth_us(0);
elab 2:72952132894a 52 l3_dc_motor_cw.pulsewidth_us(0);
elab 2:72952132894a 53 l3_dc_motor_ccw.pulsewidth_us(0);
elab 2:72952132894a 54 }
elab 2:72952132894a 55 void run_l1_servo_cw(void){
elab 2:72952132894a 56 l1_servo_cw=1;
elab 2:72952132894a 57 l1_servo_ccw=0;
elab 2:72952132894a 58 }
elab 2:72952132894a 59 void run_l1_servo_ccw(void){
elab 2:72952132894a 60 l1_servo_cw=0;
elab 2:72952132894a 61 l1_servo_ccw=1;
elab 2:72952132894a 62 }
elab 2:72952132894a 63 void run_l2_servo_cw(void){
elab 2:72952132894a 64 // l2_servo_cw=1;
elab 2:72952132894a 65 // l2_servo_ccw=0;
elab 2:72952132894a 66 }
elab 2:72952132894a 67 void run_l2_servo_ccw(void){
elab 2:72952132894a 68 l2_servo_cw=0;
elab 2:72952132894a 69 l2_servo_ccw=1;
elab 2:72952132894a 70 }
elab 2:72952132894a 71 void run_l3_servo_cw(void){
elab 2:72952132894a 72 l3_servo_cw=1;
elab 2:72952132894a 73 l3_servo_ccw=0;
elab 2:72952132894a 74 }
elab 2:72952132894a 75 void run_l3_servo_ccw(void){
elab 2:72952132894a 76 l3_servo_cw=0;
elab 2:72952132894a 77 l3_servo_ccw=1;
elab 2:72952132894a 78 }
elab 2:72952132894a 79 void stop_servo(void){
elab 2:72952132894a 80 l1_servo_cw=0;
elab 2:72952132894a 81 l1_servo_ccw=0;
elab 2:72952132894a 82 l2_servo_cw=0;
elab 2:72952132894a 83 l2_servo_ccw=0;
elab 2:72952132894a 84 l3_servo_cw=0;
elab 2:72952132894a 85 l3_servo_ccw=0;
elab 2:72952132894a 86 }
elab 2:72952132894a 87 void test_limite(void){
elab 2:72952132894a 88 end_stop.mode(PullDown);
elab 2:72952132894a 89 while(1){
elab 2:72952132894a 90 printf("lim=%d\n", end_stop.read());
elab 2:72952132894a 91
elab 2:72952132894a 92 if(end_stop.read()==1){
elab 2:72952132894a 93 stop_dc_motor();
elab 2:72952132894a 94 // led=0;
elab 2:72952132894a 95 printf("stop_dc_motor\n");
elab 2:72952132894a 96 }
elab 2:72952132894a 97 else{
elab 2:72952132894a 98 run_l2_dc_motor_ccw();
elab 2:72952132894a 99 printf("motor runs\n");
elab 2:72952132894a 100 // led=1;
elab 2:72952132894a 101 }
elab 2:72952132894a 102 }
elab 2:72952132894a 103
elab 2:72952132894a 104 }
elab 2:72952132894a 105 int main()
elab 2:72952132894a 106 {
elab 2:72952132894a 107 printf("Hello World !\n");
elab 2:72952132894a 108 run_l1_dc_motor_cw();
elab 2:72952132894a 109 wait_ms(2500);
elab 2:72952132894a 110 stop_dc_motor();
elab 2:72952132894a 111 run_l1_servo_cw();
elab 2:72952132894a 112 wait_ms(2000);
elab 2:72952132894a 113 stop_servo();
elab 2:72952132894a 114 run_l2_dc_motor_ccw();
elab 2:72952132894a 115 wait_ms(1500);
elab 2:72952132894a 116 stop_dc_motor();
elab 2:72952132894a 117 run_l2_servo_ccw();
elab 2:72952132894a 118 wait_ms(1000);
elab 2:72952132894a 119 stop_servo();
elab 2:72952132894a 120 run_l2_dc_motor_cw();
elab 2:72952132894a 121 wait_ms(1500);
elab 2:72952132894a 122 stop_dc_motor();
elab 2:72952132894a 123 run_l1_dc_motor_cw();
elab 2:72952132894a 124 wait_ms(2500);
elab 2:72952132894a 125 stop_dc_motor();
elab 2:72952132894a 126 run_l1_servo_ccw();
elab 2:72952132894a 127 wait_ms(2000);
elab 2:72952132894a 128 stop_servo();
elab 2:72952132894a 129 run_l3_dc_motor_ccw();
elab 2:72952132894a 130 wait_ms(3000);
elab 2:72952132894a 131 stop_dc_motor();
elab 2:72952132894a 132
elab 2:72952132894a 133
elab 2:72952132894a 134 }