This repository has been archived on 2025-02-01. You can view files and clone it, but cannot push or open issues or pull requests.
reprapfirmware-dc42/Heat.h
Adrian Bowyer 708822a54e A couple of tidyings and additions:
1. Z home now moves home, rather than just setting the coordinate.
2. Wait for temps implemented.

Also the JSON requests for the g code filelist has been temporarily commented
out in reprap.htm.  It was causing the firmware to hang sometimes.  To be investigated.

Machine now prints nicely...
2013-10-22 18:27:12 +01:00

184 lines
3.5 KiB
C++

/****************************************************************************************************
RepRapFirmware - Heat
This is all the code to deal with heat and temperature.
-----------------------------------------------------------------------------------------------------
Version 0.1
18 November 2012
Adrian Bowyer
RepRap Professional Ltd
http://reprappro.com
Licence: GPL
****************************************************************************************************/
#ifndef HEAT_H
#define HEAT_H
class PID
{
public:
PID(Platform* p, int8_t h);
void Init();
void Spin();
void SetActiveTemperature(const float& t);
float GetActiveTemperature();
void SetStandbyTemperature(const float& t);
float GetStandbyTemperature();
void Activate();
void Standby();
bool Active();
float GetTemperature();
private:
Platform* platform;
float activeTemperature;
float standbyTemperature;
float temperature;
float lastTemperature;
float temp_iState;
float temp_dState;
bool active;
int8_t heater;
};
class Heat
{
public:
Heat(Platform* p, GCodes* g);
void Spin();
void Init();
void Exit();
void SetActiveTemperature(int8_t heater, const float& t);
float GetActiveTemperature(int8_t heater);
void SetStandbyTemperature(int8_t heater, const float& t);
float GetStandbyTemperature(int8_t heater);
void Activate(int8_t heater);
void Standby(int8_t heater);
float GetTemperature(int8_t heater);
bool AllHeatersAtSetTemperatures();
void Diagnostics();
private:
Platform* platform;
GCodes* gCodes;
bool active;
PID* pids[HEATERS];
float lastTime;
};
//***********************************************************************************************************
inline bool PID::Active()
{
return active;
}
inline void PID::SetActiveTemperature(const float& t)
{
activeTemperature = t;
}
inline float PID::GetActiveTemperature()
{
return activeTemperature;
}
inline void PID::SetStandbyTemperature(const float& t)
{
standbyTemperature = t;
}
inline float PID::GetStandbyTemperature()
{
return standbyTemperature;
}
inline float PID::GetTemperature()
{
return temperature;
}
inline void PID::Activate()
{
active = true;
}
inline void PID::Standby()
{
active = false;
}
inline void Heat::SetActiveTemperature(int8_t heater, const float& t)
{
pids[heater]->SetActiveTemperature(t);
}
inline float Heat::GetActiveTemperature(int8_t heater)
{
return pids[heater]->GetActiveTemperature();
}
inline void Heat::SetStandbyTemperature(int8_t heater, const float& t)
{
pids[heater]->SetStandbyTemperature(t);
}
inline float Heat::GetStandbyTemperature(int8_t heater)
{
return pids[heater]->GetStandbyTemperature();
}
inline float Heat::GetTemperature(int8_t heater)
{
return pids[heater]->GetTemperature();
}
inline void Heat::Activate(int8_t heater)
{
pids[heater]->Activate();
}
inline void Heat::Standby(int8_t heater)
{
pids[heater]->Standby();
}
inline bool Heat::AllHeatersAtSetTemperatures()
{
float dt;
for(int8_t heater = 0; heater < HEATERS; heater++)
{
dt = GetTemperature(heater);
if(pids[heater]->Active())
{
if(GetActiveTemperature(heater) < TEMPERATURE_LOW_SO_DONT_CARE)
dt = 0;
else
dt = fabs(dt - GetActiveTemperature(heater));
} else
{
if(GetStandbyTemperature(heater) < TEMPERATURE_LOW_SO_DONT_CARE)
dt = 0;
else
dt = fabs(dt - GetStandbyTemperature(heater));
}
if(dt > TEMPERATURE_CLOSE_ENOUGH)
return false;
}
return true;
}
#endif