READY FOR ROS

Dependencies:   FastAnalogIn mbed

Fork of Fast_blink by CLUE

Committer:
keithbehrman
Date:
Wed Mar 08 18:08:43 2017 +0000
Revision:
4:ae2202b25d49
Parent:
2:a215212e9a78
Updated.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
keithbehrman 0:d83ac315a24c 1 #include "mbed.h"
keithbehrman 0:d83ac315a24c 2 #include "FastAnalogIn.h"
keithbehrman 0:d83ac315a24c 3
keithbehrman 0:d83ac315a24c 4
keithbehrman 1:8e7e9ef6b0bd 5
keithbehrman 1:8e7e9ef6b0bd 6 Serial pc(USBTX, USBRX); // tx, rx
keithbehrman 1:8e7e9ef6b0bd 7
keithbehrman 2:a215212e9a78 8 //FastAnalogIn ain(p20); //Fast&Furious:Tokyo Drift Analog Input to PDmux
keithbehrman 2:a215212e9a78 9 AnalogIn ain(p20); //Analog Input to PDmux
keithbehrman 1:8e7e9ef6b0bd 10
keithbehrman 0:d83ac315a24c 11 DigitalOut LEDout(p8); //5V output to LED mux
keithbehrman 0:d83ac315a24c 12 DigitalOut LEDmux0(p9); //s0
keithbehrman 0:d83ac315a24c 13 DigitalOut LEDmux1(p10); //s1
keithbehrman 0:d83ac315a24c 14 DigitalOut LEDmux2(p11); //s2
keithbehrman 0:d83ac315a24c 15 DigitalOut LEDmux3(p12); //s3
keithbehrman 0:d83ac315a24c 16
keithbehrman 0:d83ac315a24c 17 DigitalOut PDmux0(p14); //s0
keithbehrman 0:d83ac315a24c 18 DigitalOut PDmux1(p15); //s1
keithbehrman 0:d83ac315a24c 19 DigitalOut PDmux2(p16); //s2
keithbehrman 0:d83ac315a24c 20 DigitalOut PDmux3(p17); //s3
keithbehrman 1:8e7e9ef6b0bd 21 AnalogOut aout(p18);
keithbehrman 0:d83ac315a24c 22
keithbehrman 2:a215212e9a78 23 int LED; //counter for LEDs
keithbehrman 0:d83ac315a24c 24
keithbehrman 1:8e7e9ef6b0bd 25 double voltageOut;
keithbehrman 1:8e7e9ef6b0bd 26 double readIn[5];
keithbehrman 1:8e7e9ef6b0bd 27
keithbehrman 2:a215212e9a78 28 double alpha; //dummy variable for ADC timing
keithbehrman 0:d83ac315a24c 29
keithbehrman 0:d83ac315a24c 30
keithbehrman 1:8e7e9ef6b0bd 31
keithbehrman 0:d83ac315a24c 32 int main()
keithbehrman 0:d83ac315a24c 33 {
keithbehrman 1:8e7e9ef6b0bd 34 pc.baud(921600);
keithbehrman 1:8e7e9ef6b0bd 35 //pc.format();
keithbehrman 1:8e7e9ef6b0bd 36
keithbehrman 0:d83ac315a24c 37 // double ADCtime=.000000116; //1.6 us
keithbehrman 2:a215212e9a78 38 double time=.000029; // ~10kHz
keithbehrman 0:d83ac315a24c 39 // double time=.0000029; //100 kHz
keithbehrman 1:8e7e9ef6b0bd 40 // double time=.0003;
keithbehrman 1:8e7e9ef6b0bd 41
keithbehrman 0:d83ac315a24c 42
keithbehrman 0:d83ac315a24c 43
keithbehrman 0:d83ac315a24c 44 //boolean bits for multiplexing
keithbehrman 0:d83ac315a24c 45 LEDmux0=0;
keithbehrman 0:d83ac315a24c 46 LEDmux1=0;
keithbehrman 0:d83ac315a24c 47 LEDmux2=0;
keithbehrman 0:d83ac315a24c 48 LEDmux3=0; //MSB is always 0
keithbehrman 0:d83ac315a24c 49 PDmux0=0;
keithbehrman 0:d83ac315a24c 50 PDmux1=0;
keithbehrman 0:d83ac315a24c 51 PDmux2=0;
keithbehrman 0:d83ac315a24c 52 PDmux3=0; //MSB is always 0
keithbehrman 0:d83ac315a24c 53
keithbehrman 0:d83ac315a24c 54
keithbehrman 0:d83ac315a24c 55 //while loop that runs continously through code to constantly give measuremtn while MCU is on
keithbehrman 0:d83ac315a24c 56 while(1) {
keithbehrman 0:d83ac315a24c 57
keithbehrman 0:d83ac315a24c 58
keithbehrman 1:8e7e9ef6b0bd 59 //loop to mux through photodiodes
keithbehrman 1:8e7e9ef6b0bd 60
keithbehrman 1:8e7e9ef6b0bd 61 for(int pd=0; pd<6; pd++) {
keithbehrman 0:d83ac315a24c 62 //loop will take 5 measurements for the selected LED/PD combo
keithbehrman 1:8e7e9ef6b0bd 63 for(int i=0; i<5; i++) {
keithbehrman 0:d83ac315a24c 64 LEDout = 1;
keithbehrman 1:8e7e9ef6b0bd 65 readIn[i]=ain.read();
keithbehrman 0:d83ac315a24c 66 wait(time);
keithbehrman 0:d83ac315a24c 67
keithbehrman 2:a215212e9a78 68 LEDout = 0;
keithbehrman 2:a215212e9a78 69 alpha=ain.read();
keithbehrman 2:a215212e9a78 70 wait(time);
keithbehrman 0:d83ac315a24c 71 }
keithbehrman 1:8e7e9ef6b0bd 72
keithbehrman 2:a215212e9a78 73 voltageOut=(readIn[2]+readIn[3]+readIn[4])/3; //Average of last three values
keithbehrman 2:a215212e9a78 74 aout=voltageOut; //Sets Voltage out to Pin 18 for debugging on scope
keithbehrman 0:d83ac315a24c 75
keithbehrman 2:a215212e9a78 76 //send the diode readings to MATlab in format: LED,PD,Voltageout
keithbehrman 2:a215212e9a78 77 //I think this is where you want to report voltageOut to ROS for the PD/LED combo
keithbehrman 4:ae2202b25d49 78
keithbehrman 2:a215212e9a78 79 pc.printf("%d,%d,%f \n",LED,pd,voltageOut);
keithbehrman 1:8e7e9ef6b0bd 80
keithbehrman 1:8e7e9ef6b0bd 81
keithbehrman 1:8e7e9ef6b0bd 82 //PD multiplexing
keithbehrman 1:8e7e9ef6b0bd 83 if((PDmux0==0) && (PDmux1==0) && (PDmux2==0)) {
keithbehrman 1:8e7e9ef6b0bd 84 PDmux0=1;
keithbehrman 1:8e7e9ef6b0bd 85 } else if((PDmux0==1) && (PDmux1==0) && (PDmux2==0)) {
keithbehrman 1:8e7e9ef6b0bd 86 PDmux0=0;
keithbehrman 1:8e7e9ef6b0bd 87 PDmux1=1;
keithbehrman 1:8e7e9ef6b0bd 88 } else if((PDmux0==0) && (PDmux1==1) && (PDmux2==0)) {
keithbehrman 1:8e7e9ef6b0bd 89 PDmux0=1;
keithbehrman 1:8e7e9ef6b0bd 90 } else if((PDmux0==1) && (PDmux1==1) && (PDmux2==0)) {
keithbehrman 1:8e7e9ef6b0bd 91 PDmux0=0;
keithbehrman 1:8e7e9ef6b0bd 92 PDmux1=0;
keithbehrman 1:8e7e9ef6b0bd 93 PDmux2=1;
keithbehrman 1:8e7e9ef6b0bd 94 } else if((PDmux0==0) && (PDmux1==0) && (PDmux2==1)) {
keithbehrman 1:8e7e9ef6b0bd 95 PDmux0=1;
keithbehrman 0:d83ac315a24c 96 } else {
keithbehrman 1:8e7e9ef6b0bd 97 PDmux0=0;
keithbehrman 1:8e7e9ef6b0bd 98 PDmux2=0;
keithbehrman 0:d83ac315a24c 99 }
keithbehrman 4:ae2202b25d49 100
keithbehrman 4:ae2202b25d49 101
keithbehrman 2:a215212e9a78 102 }//end of PD for loop
keithbehrman 0:d83ac315a24c 103
keithbehrman 1:8e7e9ef6b0bd 104
keithbehrman 2:a215212e9a78 105 //LED multiplexing
keithbehrman 2:a215212e9a78 106 if((LEDmux0==0) && (LEDmux1==0) && (LEDmux2==0)) {
keithbehrman 2:a215212e9a78 107 LEDmux0=1;
keithbehrman 2:a215212e9a78 108 LED=1;
keithbehrman 2:a215212e9a78 109 } else if((LEDmux0==1) && (LEDmux1==0) && (LEDmux2==0)) {
keithbehrman 2:a215212e9a78 110 LEDmux0=0;
keithbehrman 2:a215212e9a78 111 LEDmux1=1;
keithbehrman 2:a215212e9a78 112 LED=2;
keithbehrman 2:a215212e9a78 113 } else if((LEDmux0==0) && (LEDmux1==1) && (LEDmux2==0)) {
keithbehrman 2:a215212e9a78 114 LEDmux0=1;
keithbehrman 2:a215212e9a78 115 LED=3;
keithbehrman 2:a215212e9a78 116 } else if((LEDmux0==1) && (LEDmux1==1) && (LEDmux2==0)) {
keithbehrman 2:a215212e9a78 117 LEDmux0=0;
keithbehrman 2:a215212e9a78 118 LEDmux1=0;
keithbehrman 2:a215212e9a78 119 LEDmux2=1;
keithbehrman 2:a215212e9a78 120 LED=4;
keithbehrman 2:a215212e9a78 121 } else if((LEDmux0==0) && (LEDmux1==0) && (LEDmux2==1)) {
keithbehrman 2:a215212e9a78 122 LEDmux0=1;
keithbehrman 2:a215212e9a78 123 LED=5;
keithbehrman 2:a215212e9a78 124 } else {
keithbehrman 2:a215212e9a78 125 LEDmux0=0;
keithbehrman 2:a215212e9a78 126 LEDmux2=0;
keithbehrman 2:a215212e9a78 127 LED=0;
keithbehrman 2:a215212e9a78 128 }
keithbehrman 0:d83ac315a24c 129
keithbehrman 2:a215212e9a78 130 }//end of While(1) loop
keithbehrman 0:d83ac315a24c 131 }
keithbehrman 1:8e7e9ef6b0bd 132
keithbehrman 1:8e7e9ef6b0bd 133