Origin firmware.
Dependencies: PID QEI SB1602E mbed-rtos mbed
Fork of PreHeater by
Diff: main.cpp
- Revision:
- 1:f974481c37b6
- Parent:
- 0:b1d44d6f9adf
- Child:
- 2:387240c58110
--- a/main.cpp Sat Jun 13 00:05:45 2015 +0000 +++ b/main.cpp Sat Jun 13 04:30:15 2015 +0000 @@ -12,50 +12,56 @@ #define OV_HL 1.0 //PID calcurate output value 1.0 = 100% #define SV_LL 0.0 //PID setpoint % value for lo limit #define SV_HL 100.0 //PID setpoint % value for high limit -#define P 1.0 -#define I 0.2 -#define D 0.1 -#define RATE 0.1 -#define Bias 0.2 +#define P 1.0 //propotional band +#define I 0.2 //Integral +#define D 0.1 //Devide +#define RATE 0.1 //update time sec +#define Bias 0.2 //control output bias #define InitialSP 50.0 // PID initial setpoint -#define RangeSPL 30.0 -#define RangeSPH 120.0 +#define RangeSPL 30.0 //calcurate celcius range +#define RangeSPH 120.0 //same above //Kc, Ti, Td, interval PID TIC(P, I, D, RATE); +//GPIO initilaize AnalogIn THAI(dp4); PwmOut out(dp1); DigitalOut led1(dp14),led2(dp28); DigitalIn Run(dp17,PullUp); -QEI wheel(dp11, PullUp, dp13,PullUp, NC, ROTATE_PER_REVOLUTIONS, QEI::X2_ENCODING); + +//Rotary encode pin, pinmode and sppecification instance +QEI wheel(dp11, PullUp, dp13, PullUp,NC, ROTATE_PER_REVOLUTIONS, QEI::X2_ENCODING); + float temp_sv_input; double temp_pv,temp_cal; -void LCD_thread(void const *args) { +void TempCal_thread(void const *args) { while (true) { - led2 = !led2; - Thread::wait(1000); - } -} - - -int main(){ //input for change to 0 to 100% range by 50C to 120C temp_sv_input = wheel.getPulses() * 0.5 + RangeSPL; - if (temp_sv_input <= RangeSPL){ temp_sv_input = RangeSPL; - } + } else if (temp_sv_input >= RangeSPH){ temp_sv_input = RangeSPH; } - - temp_cal = THAI.read(); //six order polynomial temp_pv =-0.7964*pow(temp_cal,6.0) - 2.5431*pow(temp_cal,5.0) +63.605*pow(temp_cal,4.0) - 274.1*pow(temp_cal,3.0) + 522.57*pow(temp_cal,2.0) - 539.26*temp_cal + 405.76; + Thread::wait(500); + +//Insert LCD code +/*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +*/ + } + } + +int main(){ +Thread thread(TempCal_thread); + while (1){ //Analog input from 50.0C to 120.0C TIC.setInputLimits(SV_LL, SV_HL); //Pwm output from 0.0 to 1.0 @@ -66,22 +72,17 @@ //We want the process variable to be 1.7V TIC.setSetPoint(temp_sv_input); - while(Run == 1){ + if (Run == 1){ + out = OV_LL; + } + else if (Run == 0){ //Update the process variable. TIC.setProcessValue(temp_cal); //Set the new output. out = TIC.compute(); //Wait for another loop calculation. - wait(RATE); + Thread::wait(RATE); + } - Thread thread(LCD_thread); - -/* while (true) { - led1 = !led1; - Thread::wait(500); - } */ - -out = OV_LL; - } - -} + } + } \ No newline at end of file