Guest User

Untitled

a guest
Oct 26th, 2020
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.17 KB | None | 0 0
  1. #include <Scheduler.h>
  2. #include <OneWire.h>
  3. #include <DallasTemperature.h>
  4. #include <LiquidCrystal_I2C.h>
  5.  
  6. #define LCD_ROWS 4
  7. #define LCD_COLUMNS 20
  8. #define LCD_ADDRESS 0x3F
  9.  
  10. #define RELAY_PIN D8
  11. #define POWER_RESOLUTION 100
  12. #define POWER_PERCENTAGE 50
  13. #define HEATER_TIME_FRAME_IN_SECONDS 2
  14.  
  15. #define SENSOR_PIN D5
  16.  
  17. class HeaterTask : public Task {
  18.   public:
  19.     HeaterTask(int relayPin, int powerResolution, int percentagePower, int heaterTimeFrameInSeconds) {
  20.       _relayPin = relayPin;
  21.       UpdateHeaterParameters(powerResolution, percentagePower, heaterTimeFrameInSeconds);
  22.     }
  23.  
  24.     void setup() {
  25.       pinMode(RELAY_PIN, OUTPUT);
  26.       digitalWrite(RELAY_PIN, LOW);
  27.     }
  28.  
  29.     void loop() {
  30.       if (_percentagePower > 0 ) {
  31.         turnAndWait(_highTimeInMiliseconds, HIGH);
  32.       }
  33.  
  34.       if (_percentagePower < 100) {
  35.         turnAndWait(_lowTimeInMiliseconds, LOW);
  36.       }
  37.     }
  38.  
  39.     void UpdateHeaterParameters(int powerResolution, int percentagePower, int heaterTimeFrameInSeconds) {
  40.       _powerResolution = powerResolution;
  41.       _percentagePower = percentagePower;
  42.       _heaterTimeFrameInSeconds = heaterTimeFrameInSeconds;
  43.  
  44.       _highTimeInMiliseconds = _percentagePower * _heaterTimeFrameInSeconds * 1000 / _powerResolution;
  45.       _lowTimeInMiliseconds = (_powerResolution - _percentagePower) * _heaterTimeFrameInSeconds * 1000 / _powerResolution;
  46.     }
  47.   private:
  48.     int _relayPin, _powerResolution, _percentagePower, _heaterTimeFrameInSeconds, _highTimeInMiliseconds, _lowTimeInMiliseconds;
  49.  
  50.     void turnAndWait(int timeInMiliseconds, int state) {
  51.       digitalWrite(RELAY_PIN, state);
  52.       delay(timeInMiliseconds);
  53.     }
  54. };
  55.  
  56. class LcdService {
  57.   public:
  58.     LcdService(LiquidCrystal_I2C *lcd) {
  59.       _lcd = lcd;
  60.      
  61.       _lcd->init();
  62.       _lcd->backlight();
  63.     }
  64.  
  65.     void Print(String text) {
  66.       _lcd->setCursor(0, 0);
  67.       _lcd->print(text);
  68.     }
  69.  
  70.     void Print(float text) {
  71.       _lcd->setCursor(0, 0);
  72.       _lcd->print(text);
  73.     }
  74.  
  75.   private:
  76.     LiquidCrystal_I2C *_lcd;
  77. };
  78.  
  79. class SensorTask : public Task {
  80.   public:
  81.     SensorTask(int sensorPin, DallasTemperature *sensors, LcdService *lcdService) {
  82.       _sensorPin = sensorPin;
  83.       _sensors = sensors;
  84.       _lcdService = lcdService;
  85.     }
  86.  
  87.     void setup() {
  88.       _sensors->setResolution(12);
  89.       _sensors->begin();
  90.     }
  91.  
  92.     void loop() {
  93.       _sensors->requestTemperatures();
  94.       float temperatureC = _sensors->getTempCByIndex(0);
  95.       _lcdService->Print(temperatureC);
  96.       delay(1000);
  97.     }
  98.  
  99.   private:
  100.     int _sensorPin;
  101.     DallasTemperature* _sensors;
  102.     LcdService *_lcdService;
  103.  
  104.  
  105. };
  106.  
  107. void setup() {
  108.   Serial.begin(115200);
  109.  
  110.   LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMNS, LCD_ROWS);
  111.   LcdService lcdService(&lcd);
  112.  
  113.   OneWire oneWire(SENSOR_PIN);
  114.   DallasTemperature sensors(&oneWire);
  115.  
  116.   static SensorTask sensor_task(SENSOR_PIN, &sensors, &lcdService);
  117.   Scheduler.start(&sensor_task);
  118.  
  119.   static HeaterTask heater_task(RELAY_PIN, POWER_RESOLUTION, POWER_PERCENTAGE, HEATER_TIME_FRAME_IN_SECONDS);
  120.   Scheduler.start(&heater_task);
  121.  
  122.   Scheduler.begin();
  123. }
  124.  
  125.  
  126. void loop() {
  127.  
  128.  
  129. }
Advertisement
Add Comment
Please, Sign In to add comment