Program for testing the ES20X board (version 2.0/2.1) I/O servo ports, motor driver ports, analog inputs, RS232 serial, digital port p5,p6,p7,p8,p11 as digital outputs

Dependencies:   MotCon ServoOut mbed-rtos mbed

Committer:
jebradshaw
Date:
Wed Sep 19 12:16:23 2018 +0000
Revision:
0:1e2fda723825
Quick tester program for the ES20X V2.0/v2.1 board I/O

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jebradshaw 0:1e2fda723825 1 // J. Bradshaw 20160111
jebradshaw 0:1e2fda723825 2 // Program for testing I/O on mbed ES201 Dev Board V1.1
jebradshaw 0:1e2fda723825 3 #include "mbed.h"
jebradshaw 0:1e2fda723825 4 #include "ServoOut.h" //uses ServoOut.h library for generating servo pulses
jebradshaw 0:1e2fda723825 5 #include "MotCon.h" //uses the MotCon.h library for controlling the motor ports
jebradshaw 0:1e2fda723825 6 #include "rtos.h"
jebradshaw 0:1e2fda723825 7
jebradshaw 0:1e2fda723825 8 #define PI 3.1415926
jebradshaw 0:1e2fda723825 9
jebradshaw 0:1e2fda723825 10 char DB9_M_char;
jebradshaw 0:1e2fda723825 11
jebradshaw 0:1e2fda723825 12 DigitalOut led1(LED1);
jebradshaw 0:1e2fda723825 13 DigitalOut led3(LED3);
jebradshaw 0:1e2fda723825 14
jebradshaw 0:1e2fda723825 15 //PC serial connection
jebradshaw 0:1e2fda723825 16 Serial pc(USBTX, USBRX); //tx, rx via USB connection
jebradshaw 0:1e2fda723825 17 I2C i2c(p9,p10); //SDA, SCL
jebradshaw 0:1e2fda723825 18 Serial DB9_male(p13, p14); //DB9 serial male
jebradshaw 0:1e2fda723825 19
jebradshaw 0:1e2fda723825 20 //Port J5
jebradshaw 0:1e2fda723825 21 BusOut bus_J5(p5, p6, p7, p8, p11);
jebradshaw 0:1e2fda723825 22
jebradshaw 0:1e2fda723825 23 //header for J5
jebradshaw 0:1e2fda723825 24 DigitalOut J5_p5(p5);
jebradshaw 0:1e2fda723825 25 DigitalOut J5_p6(p6);
jebradshaw 0:1e2fda723825 26 DigitalOut J5_p7(p7);
jebradshaw 0:1e2fda723825 27 DigitalOut J5_p8(p8);
jebradshaw 0:1e2fda723825 28 DigitalOut J5_p11(p11);
jebradshaw 0:1e2fda723825 29
jebradshaw 0:1e2fda723825 30 //Analog port in J6
jebradshaw 0:1e2fda723825 31 AnalogIn J6_P16(p16);
jebradshaw 0:1e2fda723825 32 AnalogIn J6_P17(p17);
jebradshaw 0:1e2fda723825 33 AnalogIn J6_P18(p18);
jebradshaw 0:1e2fda723825 34 AnalogIn J6_P19(p19);
jebradshaw 0:1e2fda723825 35 AnalogIn J6_P20(p20);
jebradshaw 0:1e2fda723825 36
jebradshaw 0:1e2fda723825 37 // servo ports p21 - p24
jebradshaw 0:1e2fda723825 38 ServoOut sv1(p21);
jebradshaw 0:1e2fda723825 39 ServoOut sv2(p22);
jebradshaw 0:1e2fda723825 40 ServoOut sv3(p23);
jebradshaw 0:1e2fda723825 41 ServoOut sv4(p24);
jebradshaw 0:1e2fda723825 42
jebradshaw 0:1e2fda723825 43 /*
jebradshaw 0:1e2fda723825 44 DigitalOut mot1_ph1(p28);
jebradshaw 0:1e2fda723825 45 DigitalOut mot1_ph2(p27);
jebradshaw 0:1e2fda723825 46 PwmOut mot_en1(p25);
jebradshaw 0:1e2fda723825 47
jebradshaw 0:1e2fda723825 48 DigitalOut mot2_ph1(p29);
jebradshaw 0:1e2fda723825 49 DigitalOut mot2_ph2(p30);
jebradshaw 0:1e2fda723825 50 PwmOut mot_en2(p26);
jebradshaw 0:1e2fda723825 51 */
jebradshaw 0:1e2fda723825 52
jebradshaw 0:1e2fda723825 53 MotCon m1(p25, p27, p28);
jebradshaw 0:1e2fda723825 54 MotCon m2(p26, p29, p30);
jebradshaw 0:1e2fda723825 55
jebradshaw 0:1e2fda723825 56 void mot1_thread(void const *args){
jebradshaw 0:1e2fda723825 57 while(1){
jebradshaw 0:1e2fda723825 58 // Run PWM and servo command signals
jebradshaw 0:1e2fda723825 59 for(float cycle=0;cycle<2.0*PI;cycle+=.078){
jebradshaw 0:1e2fda723825 60 sv1 = 1500 + (int)(sin(cycle)*500);
jebradshaw 0:1e2fda723825 61 sv2 = 1500 + (int)(cos(cycle)*500);
jebradshaw 0:1e2fda723825 62 sv3 = 1500 + (int)(sin(cycle)*500);
jebradshaw 0:1e2fda723825 63 sv4 = 1500 + (int)(sin(cycle)*500);
jebradshaw 0:1e2fda723825 64
jebradshaw 0:1e2fda723825 65 m1.mot_control(.85*sin(cycle));
jebradshaw 0:1e2fda723825 66 m2.mot_control(.85*cos(cycle));
jebradshaw 0:1e2fda723825 67
jebradshaw 0:1e2fda723825 68 pc.printf("cycle = %.2f \r", cycle);
jebradshaw 0:1e2fda723825 69 Thread::wait(10);
jebradshaw 0:1e2fda723825 70 }
jebradshaw 0:1e2fda723825 71 }//while(1)
jebradshaw 0:1e2fda723825 72 }
jebradshaw 0:1e2fda723825 73
jebradshaw 0:1e2fda723825 74 void digOut_thread(void const *args){
jebradshaw 0:1e2fda723825 75 //toggle bus I/O for testing
jebradshaw 0:1e2fda723825 76 while(1){
jebradshaw 0:1e2fda723825 77 bus_J5 = 0x1f;
jebradshaw 0:1e2fda723825 78 Thread::wait(500);
jebradshaw 0:1e2fda723825 79 bus_J5 = 0xAA;
jebradshaw 0:1e2fda723825 80 Thread::wait(100);
jebradshaw 0:1e2fda723825 81 bus_J5 = 0x55;
jebradshaw 0:1e2fda723825 82 Thread::wait(100);
jebradshaw 0:1e2fda723825 83 bus_J5 = 0xAA;
jebradshaw 0:1e2fda723825 84 Thread::wait(100);
jebradshaw 0:1e2fda723825 85 bus_J5 = 0x55;
jebradshaw 0:1e2fda723825 86 Thread::wait(100);
jebradshaw 0:1e2fda723825 87 bus_J5 = 0; //all off
jebradshaw 0:1e2fda723825 88 Thread::wait(500);
jebradshaw 0:1e2fda723825 89 }
jebradshaw 0:1e2fda723825 90 }
jebradshaw 0:1e2fda723825 91
jebradshaw 0:1e2fda723825 92 void led1_flash(void const *args){
jebradshaw 0:1e2fda723825 93 while(1){
jebradshaw 0:1e2fda723825 94 led1 = !led1;
jebradshaw 0:1e2fda723825 95 Thread::wait(500);
jebradshaw 0:1e2fda723825 96 }
jebradshaw 0:1e2fda723825 97 }
jebradshaw 0:1e2fda723825 98
jebradshaw 0:1e2fda723825 99 void serial_DB9M_test(void const *args){
jebradshaw 0:1e2fda723825 100 while(1){
jebradshaw 0:1e2fda723825 101 for(char tx_char='a';tx_char <= 'z';tx_char++){
jebradshaw 0:1e2fda723825 102 DB9_male.printf("%c", tx_char);
jebradshaw 0:1e2fda723825 103
jebradshaw 0:1e2fda723825 104 if(DB9_male.readable()){
jebradshaw 0:1e2fda723825 105 DB9_M_char = DB9_male.getc();
jebradshaw 0:1e2fda723825 106 }
jebradshaw 0:1e2fda723825 107 Thread::wait(100);
jebradshaw 0:1e2fda723825 108 }
jebradshaw 0:1e2fda723825 109 }
jebradshaw 0:1e2fda723825 110 }
jebradshaw 0:1e2fda723825 111
jebradshaw 0:1e2fda723825 112 void i2c_test(void const *args){
jebradshaw 0:1e2fda723825 113 while(1){
jebradshaw 0:1e2fda723825 114 //i2c.write(0x55);
jebradshaw 0:1e2fda723825 115 Thread::wait(10);
jebradshaw 0:1e2fda723825 116 }
jebradshaw 0:1e2fda723825 117 }
jebradshaw 0:1e2fda723825 118 //------------ Main ------------------------------
jebradshaw 0:1e2fda723825 119 int main() {
jebradshaw 0:1e2fda723825 120 float analogVal[6];
jebradshaw 0:1e2fda723825 121
jebradshaw 0:1e2fda723825 122 i2c.frequency(100000);
jebradshaw 0:1e2fda723825 123 pc.baud(9600);
jebradshaw 0:1e2fda723825 124 DB9_male.baud(9600);
jebradshaw 0:1e2fda723825 125
jebradshaw 0:1e2fda723825 126 Thread t1(mot1_thread);
jebradshaw 0:1e2fda723825 127 Thread t2(digOut_thread);
jebradshaw 0:1e2fda723825 128 Thread t3(led1_flash);
jebradshaw 0:1e2fda723825 129 Thread t4(serial_DB9M_test);
jebradshaw 0:1e2fda723825 130 Thread t5(i2c_test);
jebradshaw 0:1e2fda723825 131
jebradshaw 0:1e2fda723825 132 while(1) {
jebradshaw 0:1e2fda723825 133 analogVal[0] = J6_P16;
jebradshaw 0:1e2fda723825 134 analogVal[1] = J6_P17;
jebradshaw 0:1e2fda723825 135 analogVal[2] = J6_P18;
jebradshaw 0:1e2fda723825 136 analogVal[3] = J6_P19;
jebradshaw 0:1e2fda723825 137 analogVal[4] = J6_P20;
jebradshaw 0:1e2fda723825 138 pc.printf("%.2f %.2f %.2f %.2f %.2f DB9M=%c\r\n", analogVal[0],analogVal[1],analogVal[2],analogVal[3],analogVal[4], DB9_M_char);
jebradshaw 0:1e2fda723825 139 wait(.05);
jebradshaw 0:1e2fda723825 140 }
jebradshaw 0:1e2fda723825 141 }