![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Fork of expo day code. Fires on every detected particle to calibrate delay time to solenoid firing, and solenoid on time.
Dependencies: Regrind RioRandHBridge Solenoid mbed
Fork of ECE4012-PHD by
Diff: main.cpp
- Revision:
- 0:bb537a3c7f2a
- Child:
- 2:819397348cd0
diff -r 000000000000 -r bb537a3c7f2a main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Nov 24 09:36:53 2015 +0000 @@ -0,0 +1,139 @@ +#include "mbed.h" +#include "Regrind.h" +#include "TB6612FNG.h" +#include "Solenoid.h" + +#define OG1_TO_OG2_DIST 1 +#define OG1_TO_OG3_DIST 2 +#define SOLENOID_ON_DELAY 0.001 +#define SOLENOID_OFF_DELAY 0.0 +#define LED_ON_DELAY 0.5 +#define LED_OFF_DELAY 0.0 +#define REGRIND_ARRAY_SIZE 1 + +DigitalOut led1(LED1,0); //Used as 1pps out indicator +Solenoid led2(LED2, LED_ON_DELAY, LED_OFF_DELAY); +Solenoid led3(LED3, LED_ON_DELAY, LED_OFF_DELAY); +Solenoid led4(LED4, LED_ON_DELAY, LED_OFF_DELAY); +DigitalOut onePPS_out(p29); +Solenoid solenoid(p30, SOLENOID_ON_DELAY, SOLENOID_OFF_DELAY); //Solenoid(PinName pin, float ondelay, float offdelay) +TB6612FNG augerMotors(p21, p26, p25, p22, p24, p23, p27); //TB6612FNG( PinName pinPwmA, PinName pinAin1, PinName pinAin2, PinName pinPwmB, PinName pinBin1, PinName pinBin2, PinName pinNStby ); +AnalogIn topMotorAdjuster(p15); +AnalogIn bottomMotorAdjuster(p16); +DigitalOut unused1(p17); +AnalogIn og1(p20); +AnalogIn og2(p19); +AnalogIn og3(p18); +Timer totalT; +//Ticker 1pps; + +Serial pc(USBTX,USBRX); //used for debugging + +float og1Threshold = 0; +float og2Threshold = 0; +float og3Threshold = 0; +int og1Oneshot = 0; +int og2Oneshot = 0; +int og3Oneshot = 0; +float og1_adc = 0; +float og2_adc = 0; +float og3_adc = 0; +int og1Ndx = 0; +int og2Ndx = 0; +int og3Ndx = 0; +float og1_min = 0; +float og1_max = 0; +float og2_min = 0; +float og2_max = 0; +float og3_min = 0; +float og3_max = 0; + +Regrind regrindArray[REGRIND_ARRAY_SIZE]; +/* +void flip(){ + led1 = !led1; + 1pps_out = !1pps_out; + } +*/ + +int main() { + //Start Clock + totalT.start(); + //Setup Information + /* + led1 = 0; + 1pps_out = 0; + 1pps.attach(&flip, 1.0); + */ + //Setup motors + augerMotors.setPwmApulsewidth(0.0); + augerMotors.setPwmBpulsewidth(0.0); + augerMotors.motorA_ccw(); + augerMotors.motorB_ccw(); + + //Spin up Motors until fluctuation of 10% seen + + + //Calibrate the ADC + //Done by spinning augers and measuring min and max then setting threshold as 0.9*(max-min) + min + + while(1) { + //Sample ADCs + og1_adc = og1; + og2_adc = og2; + og3_adc = og3; + + if((og1_adc < og1Threshold) && (og1Oneshot != 1)){ //Something passed through og1 + og1Oneshot = 1; + pc.printf("Regrind seen at OG 1 : %dV\n\r", 3.3*og1_adc); + led2 = 1; + //Create Regrind + regrindArray[og1Ndx%REGRIND_ARRAY_SIZE] = Regrind(totalT.read_us(), 1, 0, 0, 0, 0); + + } //if(og1...) + else if(og1_adc > 0.95*og1_max){ //Regrind has passed ok to reset og + og1Oneshot = 0; + + }//else if(og1 ...) + + if((og2_adc < og2Threshold) && (og2Oneshot != 1)){ + og2Oneshot = 1; + regrindArray[og2Ndx%REGRIND_ARRAY_SIZE].setVelocity(OG1_TO_OG2_DIST); + led3 = 1; + }//if(og2..) + else if(og2_adc > 0.95*og2_max){ //Regrind has passed ok to reset og + og2Oneshot = 0; + + }//else if(og2 ...) + + if((og3_adc < og3Threshold) && (og3Oneshot != 1)){ + og3Oneshot = 1; + led4 = 1; + regrindArray[og3Ndx].setAcceleration(OG1_TO_OG3_DIST); + if(regrindArray[og3Ndx].divert == 1){//Regrind has been selected to be diverted. Turn on solenoid. + solenoid = 1; + } + }//if(og3..) + else if(og3_adc > 0.95*og3_max){ //Regrind has passed ok to reset og + og3Oneshot = 0; + + }//else if(og3 ...) + + //Check on 1pps clock + if((totalT.read_us() % 2000000) < 1000000){ + led1 = 1; + onePPS_out = 1; + } + else {//timer is in off cycle + led1 = 0; + onePPS_out = 0; + } + + //Check if data writing flag is set - if so, write to SD card + + //Adjust PWM as necessary + augerMotors.setPwmApulsewidth(topMotorAdjuster.read()); + augerMotors.setPwmBpulsewidth(bottomMotorAdjuster.read()); + } //while(1) + totalT.stop(); +}// int main()