Test Program for the ES20X mbed board

Dependencies:   ServoOut mbed-rtos mbed

Fork of mbed_ES20X_Thread_Test by Joseph Bradshaw

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?

UserRevisionLine numberNew 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 }