Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Scheduler.h>
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #include <LiquidCrystal_I2C.h>
- #define LCD_ROWS 4
- #define LCD_COLUMNS 20
- #define LCD_ADDRESS 0x3F
- #define RELAY_PIN D8
- #define POWER_RESOLUTION 100
- #define POWER_PERCENTAGE 50
- #define HEATER_TIME_FRAME_IN_SECONDS 2
- #define SENSOR_PIN D5
- class HeaterTask : public Task {
- public:
- HeaterTask(int relayPin, int powerResolution, int percentagePower, int heaterTimeFrameInSeconds) {
- _relayPin = relayPin;
- UpdateHeaterParameters(powerResolution, percentagePower, heaterTimeFrameInSeconds);
- }
- void setup() {
- pinMode(RELAY_PIN, OUTPUT);
- digitalWrite(RELAY_PIN, LOW);
- }
- void loop() {
- if (_percentagePower > 0 ) {
- turnAndWait(_highTimeInMiliseconds, HIGH);
- }
- if (_percentagePower < 100) {
- turnAndWait(_lowTimeInMiliseconds, LOW);
- }
- }
- void UpdateHeaterParameters(int powerResolution, int percentagePower, int heaterTimeFrameInSeconds) {
- _powerResolution = powerResolution;
- _percentagePower = percentagePower;
- _heaterTimeFrameInSeconds = heaterTimeFrameInSeconds;
- _highTimeInMiliseconds = _percentagePower * _heaterTimeFrameInSeconds * 1000 / _powerResolution;
- _lowTimeInMiliseconds = (_powerResolution - _percentagePower) * _heaterTimeFrameInSeconds * 1000 / _powerResolution;
- }
- private:
- int _relayPin, _powerResolution, _percentagePower, _heaterTimeFrameInSeconds, _highTimeInMiliseconds, _lowTimeInMiliseconds;
- void turnAndWait(int timeInMiliseconds, int state) {
- digitalWrite(RELAY_PIN, state);
- delay(timeInMiliseconds);
- }
- };
- class LcdService {
- public:
- LcdService(LiquidCrystal_I2C *lcd) {
- _lcd = lcd;
- _lcd->init();
- _lcd->backlight();
- }
- void Print(String text) {
- _lcd->setCursor(0, 0);
- _lcd->print(text);
- }
- void Print(float text) {
- _lcd->setCursor(0, 0);
- _lcd->print(text);
- }
- private:
- LiquidCrystal_I2C *_lcd;
- };
- class SensorTask : public Task {
- public:
- SensorTask(int sensorPin, DallasTemperature *sensors, LcdService *lcdService) {
- _sensorPin = sensorPin;
- _sensors = sensors;
- _lcdService = lcdService;
- }
- void setup() {
- _sensors->setResolution(12);
- _sensors->begin();
- }
- void loop() {
- _sensors->requestTemperatures();
- float temperatureC = _sensors->getTempCByIndex(0);
- _lcdService->Print(temperatureC);
- delay(1000);
- }
- private:
- int _sensorPin;
- DallasTemperature* _sensors;
- LcdService *_lcdService;
- };
- void setup() {
- Serial.begin(115200);
- LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMNS, LCD_ROWS);
- LcdService lcdService(&lcd);
- OneWire oneWire(SENSOR_PIN);
- DallasTemperature sensors(&oneWire);
- static SensorTask sensor_task(SENSOR_PIN, &sensors, &lcdService);
- Scheduler.start(&sensor_task);
- static HeaterTask heater_task(RELAY_PIN, POWER_RESOLUTION, POWER_PERCENTAGE, HEATER_TIME_FRAME_IN_SECONDS);
- Scheduler.start(&heater_task);
- Scheduler.begin();
- }
- void loop() {
- }
Advertisement
Add Comment
Please, Sign In to add comment