Test Program for the ES20X mbed board
Dependencies: ServoOut mbed-rtos mbed
Fork of mbed_ES20X_Thread_Test by
main.cpp@2:b0061c3825b5, 2016-01-11 (annotated)
- Committer:
- jebradshaw
- Date:
- Mon Jan 11 15:16:07 2016 +0000
- Revision:
- 2:b0061c3825b5
- Parent:
- 1:31677f9c113f
Program for testing I/O on mbed ES201 Dev Board V1.1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jebradshaw | 1:31677f9c113f | 1 | // J. Bradshaw 20160111 |
jebradshaw | 1:31677f9c113f | 2 | // Program for testing I/O on mbed ES201 Dev Board V1.1 |
jebradshaw | 0:ff2198a98673 | 3 | #include "mbed.h" |
jebradshaw | 2:b0061c3825b5 | 4 | #include "ServoOut.h" //uses ServoOut.h library for generating servo pulses |
jebradshaw | 0:ff2198a98673 | 5 | #include "rtos.h" |
jebradshaw | 0:ff2198a98673 | 6 | |
jebradshaw | 0:ff2198a98673 | 7 | #define PI 3.1415926 |
jebradshaw | 0:ff2198a98673 | 8 | |
jebradshaw | 1:31677f9c113f | 9 | char DB9_F_char; |
jebradshaw | 1:31677f9c113f | 10 | char DB9_M_char; |
jebradshaw | 1:31677f9c113f | 11 | |
jebradshaw | 0:ff2198a98673 | 12 | DigitalOut led1(LED1); |
jebradshaw | 0:ff2198a98673 | 13 | DigitalOut led3(LED3); |
jebradshaw | 0:ff2198a98673 | 14 | |
jebradshaw | 0:ff2198a98673 | 15 | //PC serial connection |
jebradshaw | 0:ff2198a98673 | 16 | Serial pc(USBTX, USBRX); //tx, rx via USB connection |
jebradshaw | 0:ff2198a98673 | 17 | Serial DB9_female(p9, p10); //DB9 serial female |
jebradshaw | 0:ff2198a98673 | 18 | Serial DB9_male(p13, p14); //DB9 serial male |
jebradshaw | 0:ff2198a98673 | 19 | |
jebradshaw | 1:31677f9c113f | 20 | //Port J4 |
jebradshaw | 1:31677f9c113f | 21 | BusOut bus_J4(p5, p6, p7, p8, p11); |
jebradshaw | 0:ff2198a98673 | 22 | |
jebradshaw | 1:31677f9c113f | 23 | //header for J4 |
jebradshaw | 1:31677f9c113f | 24 | DigitalOut J4_p5(p5); |
jebradshaw | 1:31677f9c113f | 25 | DigitalOut J4_p6(p6); |
jebradshaw | 1:31677f9c113f | 26 | DigitalOut J4_p7(p7); |
jebradshaw | 1:31677f9c113f | 27 | DigitalOut J4_p8(p8); |
jebradshaw | 1:31677f9c113f | 28 | DigitalOut J4_p11(p11); |
jebradshaw | 0:ff2198a98673 | 29 | |
jebradshaw | 1:31677f9c113f | 30 | //Analog port in J6 |
jebradshaw | 1:31677f9c113f | 31 | AnalogIn J6_P16(p16); |
jebradshaw | 1:31677f9c113f | 32 | AnalogIn J6_P17(p17); |
jebradshaw | 1:31677f9c113f | 33 | AnalogIn J6_P18(p18); |
jebradshaw | 1:31677f9c113f | 34 | AnalogIn J6_P19(p19); |
jebradshaw | 1:31677f9c113f | 35 | AnalogIn J6_P20(p20); |
jebradshaw | 0:ff2198a98673 | 36 | |
jebradshaw | 0:ff2198a98673 | 37 | // servo ports p21 - p24 |
jebradshaw | 1:31677f9c113f | 38 | ServoOut sv1(p21); |
jebradshaw | 1:31677f9c113f | 39 | ServoOut sv2(p22); |
jebradshaw | 1:31677f9c113f | 40 | ServoOut sv3(p23); |
jebradshaw | 1:31677f9c113f | 41 | ServoOut sv4(p24); |
jebradshaw | 0:ff2198a98673 | 42 | |
jebradshaw | 0:ff2198a98673 | 43 | DigitalOut mot1_ph1(p28); |
jebradshaw | 0:ff2198a98673 | 44 | DigitalOut mot1_ph2(p27); |
jebradshaw | 0:ff2198a98673 | 45 | PwmOut mot_en1(p25); |
jebradshaw | 0:ff2198a98673 | 46 | |
jebradshaw | 0:ff2198a98673 | 47 | DigitalOut mot2_ph1(p29); |
jebradshaw | 0:ff2198a98673 | 48 | DigitalOut mot2_ph2(p30); |
jebradshaw | 0:ff2198a98673 | 49 | PwmOut mot_en2(p26); |
jebradshaw | 0:ff2198a98673 | 50 | //Motor control routine for PWM on 5 pin motor driver header |
jebradshaw | 0:ff2198a98673 | 51 | // drv_num is 1 or 2 (defaults to 1, anything but 2) |
jebradshaw | 0:ff2198a98673 | 52 | // dc is signed duty cycle (+/-1.0) |
jebradshaw | 0:ff2198a98673 | 53 | |
jebradshaw | 0:ff2198a98673 | 54 | void mot_control(int drv_num, float dc){ |
jebradshaw | 0:ff2198a98673 | 55 | if(dc>1.0) |
jebradshaw | 0:ff2198a98673 | 56 | dc=1.0; |
jebradshaw | 0:ff2198a98673 | 57 | if(dc<-1.0) |
jebradshaw | 0:ff2198a98673 | 58 | dc=-1.0; |
jebradshaw | 0:ff2198a98673 | 59 | |
jebradshaw | 0:ff2198a98673 | 60 | if(drv_num != 2){ |
jebradshaw | 0:ff2198a98673 | 61 | if(dc > 0.0){ |
jebradshaw | 0:ff2198a98673 | 62 | mot1_ph2 = 0; |
jebradshaw | 0:ff2198a98673 | 63 | mot1_ph1 = 1; |
jebradshaw | 0:ff2198a98673 | 64 | mot_en1 = dc; |
jebradshaw | 0:ff2198a98673 | 65 | } |
jebradshaw | 0:ff2198a98673 | 66 | else if(dc < -0.0){ |
jebradshaw | 0:ff2198a98673 | 67 | mot1_ph1 = 0; |
jebradshaw | 0:ff2198a98673 | 68 | mot1_ph2 = 1; |
jebradshaw | 0:ff2198a98673 | 69 | mot_en1 = abs(dc); |
jebradshaw | 0:ff2198a98673 | 70 | } |
jebradshaw | 0:ff2198a98673 | 71 | else{ |
jebradshaw | 0:ff2198a98673 | 72 | mot1_ph1 = 0; |
jebradshaw | 0:ff2198a98673 | 73 | mot1_ph2 = 0; |
jebradshaw | 0:ff2198a98673 | 74 | mot_en1 = 0.0; |
jebradshaw | 0:ff2198a98673 | 75 | } |
jebradshaw | 0:ff2198a98673 | 76 | } |
jebradshaw | 0:ff2198a98673 | 77 | else{ |
jebradshaw | 0:ff2198a98673 | 78 | if(dc > 0.0){ |
jebradshaw | 0:ff2198a98673 | 79 | mot2_ph2 = 0; |
jebradshaw | 0:ff2198a98673 | 80 | mot2_ph1 = 1; |
jebradshaw | 0:ff2198a98673 | 81 | mot_en2 = dc; |
jebradshaw | 0:ff2198a98673 | 82 | } |
jebradshaw | 0:ff2198a98673 | 83 | else if(dc < -0.0){ |
jebradshaw | 0:ff2198a98673 | 84 | mot2_ph1 = 0; |
jebradshaw | 0:ff2198a98673 | 85 | mot2_ph2 = 1; |
jebradshaw | 0:ff2198a98673 | 86 | mot_en2 = abs(dc); |
jebradshaw | 0:ff2198a98673 | 87 | } |
jebradshaw | 0:ff2198a98673 | 88 | else{ |
jebradshaw | 0:ff2198a98673 | 89 | mot2_ph1 = 0; |
jebradshaw | 0:ff2198a98673 | 90 | mot2_ph2 = 0; |
jebradshaw | 0:ff2198a98673 | 91 | mot_en2 = 0.0; |
jebradshaw | 0:ff2198a98673 | 92 | } |
jebradshaw | 0:ff2198a98673 | 93 | } |
jebradshaw | 0:ff2198a98673 | 94 | } |
jebradshaw | 0:ff2198a98673 | 95 | |
jebradshaw | 0:ff2198a98673 | 96 | void mot1_thread(void const *args){ |
jebradshaw | 0:ff2198a98673 | 97 | while(1){ |
jebradshaw | 0:ff2198a98673 | 98 | // Run PWM and servo command signals |
jebradshaw | 0:ff2198a98673 | 99 | for(float cycle=0;cycle<2.0*PI;cycle+=.078){ |
jebradshaw | 0:ff2198a98673 | 100 | sv1 = 1500 + (int)(sin(cycle)*500); |
jebradshaw | 0:ff2198a98673 | 101 | sv2 = 1500 + (int)(cos(cycle)*500); |
jebradshaw | 0:ff2198a98673 | 102 | sv3 = 1500 + (int)(sin(cycle)*500); |
jebradshaw | 0:ff2198a98673 | 103 | sv4 = 1500 + (int)(sin(cycle)*500); |
jebradshaw | 0:ff2198a98673 | 104 | |
jebradshaw | 0:ff2198a98673 | 105 | mot_control(1, .85*sin(cycle)); |
jebradshaw | 0:ff2198a98673 | 106 | mot_control(2, .85*cos(cycle)); |
jebradshaw | 0:ff2198a98673 | 107 | |
jebradshaw | 0:ff2198a98673 | 108 | pc.printf("cycle = %.2f \r", cycle); |
jebradshaw | 0:ff2198a98673 | 109 | Thread::wait(10); |
jebradshaw | 0:ff2198a98673 | 110 | } |
jebradshaw | 0:ff2198a98673 | 111 | }//while(1) |
jebradshaw | 0:ff2198a98673 | 112 | } |
jebradshaw | 0:ff2198a98673 | 113 | |
jebradshaw | 0:ff2198a98673 | 114 | void digOut_thread(void const *args){ |
jebradshaw | 0:ff2198a98673 | 115 | //toggle bus I/O for testing |
jebradshaw | 0:ff2198a98673 | 116 | while(1){ |
jebradshaw | 1:31677f9c113f | 117 | bus_J4 = 0x1f; |
jebradshaw | 0:ff2198a98673 | 118 | Thread::wait(500); |
jebradshaw | 1:31677f9c113f | 119 | bus_J4 = 0xAA; |
jebradshaw | 0:ff2198a98673 | 120 | Thread::wait(100); |
jebradshaw | 1:31677f9c113f | 121 | bus_J4 = 0x55; |
jebradshaw | 0:ff2198a98673 | 122 | Thread::wait(100); |
jebradshaw | 1:31677f9c113f | 123 | bus_J4 = 0xAA; |
jebradshaw | 0:ff2198a98673 | 124 | Thread::wait(100); |
jebradshaw | 1:31677f9c113f | 125 | bus_J4 = 0x55; |
jebradshaw | 0:ff2198a98673 | 126 | Thread::wait(100); |
jebradshaw | 1:31677f9c113f | 127 | bus_J4 = 0; //all off |
jebradshaw | 0:ff2198a98673 | 128 | Thread::wait(500); |
jebradshaw | 0:ff2198a98673 | 129 | } |
jebradshaw | 0:ff2198a98673 | 130 | } |
jebradshaw | 0:ff2198a98673 | 131 | |
jebradshaw | 0:ff2198a98673 | 132 | void led1_flash(void const *args){ |
jebradshaw | 0:ff2198a98673 | 133 | while(1){ |
jebradshaw | 0:ff2198a98673 | 134 | led1 = !led1; |
jebradshaw | 0:ff2198a98673 | 135 | Thread::wait(500); |
jebradshaw | 0:ff2198a98673 | 136 | } |
jebradshaw | 0:ff2198a98673 | 137 | } |
jebradshaw | 1:31677f9c113f | 138 | |
jebradshaw | 1:31677f9c113f | 139 | void serial_DB9M_test(void const *args){ |
jebradshaw | 1:31677f9c113f | 140 | while(1){ |
jebradshaw | 1:31677f9c113f | 141 | for(char tx_char='a';tx_char <= 'z';tx_char++){ |
jebradshaw | 1:31677f9c113f | 142 | DB9_male.printf("%c", tx_char); |
jebradshaw | 1:31677f9c113f | 143 | |
jebradshaw | 1:31677f9c113f | 144 | if(DB9_male.readable()){ |
jebradshaw | 1:31677f9c113f | 145 | DB9_M_char = DB9_male.getc(); |
jebradshaw | 1:31677f9c113f | 146 | } |
jebradshaw | 1:31677f9c113f | 147 | Thread::wait(100); |
jebradshaw | 1:31677f9c113f | 148 | } |
jebradshaw | 1:31677f9c113f | 149 | } |
jebradshaw | 1:31677f9c113f | 150 | } |
jebradshaw | 1:31677f9c113f | 151 | |
jebradshaw | 1:31677f9c113f | 152 | void serial_DB9F_test(void const *args){ |
jebradshaw | 1:31677f9c113f | 153 | while(1){ |
jebradshaw | 1:31677f9c113f | 154 | for(char tx_char='A';tx_char <= 'Z';tx_char++){ |
jebradshaw | 1:31677f9c113f | 155 | DB9_female.printf("%c", tx_char); |
jebradshaw | 1:31677f9c113f | 156 | |
jebradshaw | 1:31677f9c113f | 157 | if(DB9_female.readable()){ |
jebradshaw | 1:31677f9c113f | 158 | DB9_F_char = DB9_female.getc(); |
jebradshaw | 1:31677f9c113f | 159 | } |
jebradshaw | 1:31677f9c113f | 160 | Thread::wait(100); |
jebradshaw | 1:31677f9c113f | 161 | } |
jebradshaw | 1:31677f9c113f | 162 | } |
jebradshaw | 1:31677f9c113f | 163 | } |
jebradshaw | 0:ff2198a98673 | 164 | //------------ Main ------------------------------ |
jebradshaw | 0:ff2198a98673 | 165 | int main() { |
jebradshaw | 0:ff2198a98673 | 166 | float analogVal[6]; |
jebradshaw | 0:ff2198a98673 | 167 | |
jebradshaw | 0:ff2198a98673 | 168 | Thread t1(mot1_thread); |
jebradshaw | 0:ff2198a98673 | 169 | Thread t2(digOut_thread); |
jebradshaw | 0:ff2198a98673 | 170 | Thread t3(led1_flash); |
jebradshaw | 1:31677f9c113f | 171 | Thread t4(serial_DB9M_test); |
jebradshaw | 1:31677f9c113f | 172 | Thread t5(serial_DB9F_test); |
jebradshaw | 0:ff2198a98673 | 173 | |
jebradshaw | 0:ff2198a98673 | 174 | pc.baud(9600); |
jebradshaw | 0:ff2198a98673 | 175 | DB9_female.baud(9600); |
jebradshaw | 0:ff2198a98673 | 176 | DB9_male.baud(9600); |
jebradshaw | 0:ff2198a98673 | 177 | mot_en1.period_us(20); |
jebradshaw | 0:ff2198a98673 | 178 | mot_en2.period_us(20); |
jebradshaw | 0:ff2198a98673 | 179 | |
jebradshaw | 0:ff2198a98673 | 180 | while(1) { |
jebradshaw | 1:31677f9c113f | 181 | analogVal[0] = J6_P16; |
jebradshaw | 1:31677f9c113f | 182 | analogVal[1] = J6_P17; |
jebradshaw | 1:31677f9c113f | 183 | analogVal[2] = J6_P18; |
jebradshaw | 1:31677f9c113f | 184 | analogVal[3] = J6_P19; |
jebradshaw | 1:31677f9c113f | 185 | analogVal[4] = J6_P20; |
jebradshaw | 1:31677f9c113f | 186 | pc.printf("%.2f %.2f %.2f %.2f %.2f DB9M=%c DB9F=%c\r\n", analogVal[0],analogVal[1],analogVal[2],analogVal[3],analogVal[4], DB9_M_char, DB9_F_char); |
jebradshaw | 0:ff2198a98673 | 187 | } |
jebradshaw | 0:ff2198a98673 | 188 | } |