dd

Dependencies:   BufferedSerial FastAnalogIn FastPWM mbed SHT75

Revision:
1:5c42ec7f1aeb
Parent:
0:9bfc4aea91e2
Child:
2:4c51394fb35b
--- a/controlt.cpp	Fri Feb 19 07:07:26 2016 +0000
+++ b/controlt.cpp	Mon Feb 22 06:03:11 2016 +0000
@@ -14,6 +14,13 @@
 
 control_t::control_t(temp_sensor_t* _temp_sensor, peltier_t* _peltier)
 {
+	log_count=0;
+	
+	target_temp=15;
+	P_value=0;
+	I_value=0;
+	D_value=0;
+	
 	temp_sensor=_temp_sensor;	
 	peltier=_peltier;
 }
@@ -34,11 +41,118 @@
 
 void control_t::control_temp()
 {
+	PWM_value+=calc_P();
 	
+	PWM_value+=calc_I();
 	
+	PWM_value+=calc_D();
+	
+	if(PWM_value>1)
+	{
+		PWM_value=1;	
+	}
+	if(PWM_value<-1)
+	{
+		PWM_value=-1;	
+	}
+	peltier->set_PWM(PWM_value);
 }
 
 void control_t::set_mode(int _mode)
 {
 	mode=_mode;	
+}
+
+void control_t::set_PWM_value(float _PWM_value)
+{
+	PWM_value=_PWM_value;
+}
+
+void control_t::set_target_temp(float _target_temp)
+{
+	target_temp=_target_temp;	
+}
+
+void control_t::set_P_value(float _P_value)
+{
+	P_value=_P_value;	
+}
+
+void control_t::set_I_value(float _I_value)
+{
+	I_value=_I_value;	
+}
+
+void control_t::set_D_value(float _D_value)
+{
+	D_value=_D_value;	
+}
+
+void control_t::refresh_PWM()
+{
+	write_log();
+	if(mode==0)
+	{
+		PWM_value=0;
+		control_PWM(0);
+	}
+	else if(mode==1)
+	{
+	}
+	else if(mode==2)
+	{
+		control_temp();
+	}
+}
+
+int control_t::get_mode()
+{
+	return mode;
+}
+float control_t::get_target_temp()
+{
+	return target_temp;	
+}
+float control_t::get_P_value()
+{
+	return P_value;	
+}
+float control_t::get_I_value()
+{
+	return I_value;	
+}
+float control_t::get_D_value()
+{
+	return D_value;	
+}
+float control_t::get_PWM_value()
+{
+	return PWM_value;	
+}
+
+float control_t::calc_P()
+{
+	return (target_temp-temp_sensor->get_temp())*P_value;
+}
+
+float control_t::calc_I()
+{
+	float data=0;
+	for(int i=0;i<10;i++)
+	{
+		data+=temp_log[i];	
+	}
+	return data*I_value;
+}
+
+float control_t::calc_D()
+{
+	return -(temp_log[log_count]-temp_log[(log_count-1)%10])*D_value;
+}
+
+void control_t::write_log()
+{
+	log_count++;
+	log_count=log_count%10;
+	temp_log[log_count]=temp_sensor->get_temp();
 }
\ No newline at end of file