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
main.cpp
- Committer:
- mitchpang
- Date:
- 2015-11-24
- Revision:
- 0:bb537a3c7f2a
- Child:
- 2:819397348cd0
File content as of revision 0:bb537a3c7f2a:
#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()