READY FOR ROS
Dependencies: FastAnalogIn mbed
Fork of Fast_blink by
main.cpp@2:a215212e9a78, 2017-03-08 (annotated)
- Committer:
- keithbehrman
- Date:
- Wed Mar 08 16:48:24 2017 +0000
- Revision:
- 2:a215212e9a78
- Parent:
- 1:8e7e9ef6b0bd
- Child:
- 4:ae2202b25d49
READY FOR ROS
Who changed what in which revision?
User | Revision | Line number | New 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 | 2:a215212e9a78 | 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 | 2:a215212e9a78 | 100 | |
keithbehrman | 2:a215212e9a78 | 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 |