You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #include "AppCore.h"
  2. #include "Logs.h"
  3. #include "defines.h"
  4. #include "Boiler.h"
  5. #include "globals.h"
  6. #include "HomeActivity.h"
  7. #include "MenuItemActivity.h"
  8. #include "LoaderActivity.h"
  9. #define xstr(s) str(s)
  10. #define str(s) #s
  11. Button g_btnCancel(PIN_BTN_CANCEL);
  12. Button g_btnOk(PIN_BTN_OK);
  13. Button g_btnMinus(PIN_BTN_MINUS);
  14. Button g_btnPlus(PIN_BTN_PLUS);
  15. HibernateService g_hibernateService;
  16. LiquidCrystal g_lcd{PIN_LCD_RS, PIN_LCD_ENABLE, PIN_LCD_D4, PIN_LCD_D5, PIN_LCD_D6, PIN_LCD_D7};
  17. DigitalOutput g_lcdLed{PIN_LCD_LED};
  18. DigitalOutput g_relay1{PIN_RELAY1};
  19. DigitalOutput g_relay2{PIN_RELAY2};
  20. OneWire g_oneWire{PIN_ONEWIRE};
  21. DallasTemperature g_dallasTemperature{&g_oneWire};
  22. TempInput g_tempInput1{0};
  23. TempInput g_tempInput2{1};
  24. BoilerTankService g_tankService1{&g_appState.tanks[0]};
  25. BoilerTankService g_tankService2{&g_appState.tanks[1]};
  26. AppCoreState g_appState{
  27. .tanks = {
  28. {
  29. .mode = BoilerTankState::Auto,
  30. .setting = 0,
  31. .tempTrigger = TEMP_TRIGGER,
  32. .input = &g_tempInput1,
  33. .relay = &g_relay1
  34. },
  35. {
  36. .mode = BoilerTankState::Auto,
  37. .setting = 0,
  38. .tempTrigger = TEMP_TRIGGER,
  39. .input = &g_tempInput2,
  40. .relay = &g_relay2
  41. }
  42. }
  43. };
  44. Storage g_storage;
  45. LoaderActivity g_loaderActivity;
  46. HomeActivity g_homeActivity;
  47. BoilerTankMenuActivity g_menuWaterActivity(&g_homeActivity, &g_menuVersionActivity, &g_menuHeaterActivity, "Sanitaire",
  48. "", &g_appState.tanks[0]);
  49. BoilerTankMenuActivity g_menuHeaterActivity(&g_homeActivity, &g_menuWaterActivity, &g_menuVersionActivity, "Chauffage",
  50. "", &g_appState.tanks[1]);
  51. MenuItemActivity g_menuVersionActivity(&g_homeActivity, nullptr, &g_menuHeaterActivity, &g_menuWaterActivity, "Version",
  52. xstr(APP_CORE_VERSION) " - " xstr(APP_CORE_COMMIT));
  53. IActivity* g_currentActivity = nullptr;
  54. int freeRam()
  55. {
  56. extern int __heap_start, * __brkval;
  57. int v;
  58. return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
  59. }
  60. void AppCore::begin()
  61. {
  62. Serial.begin(9600);
  63. LOG_FN_BEGIN(1);
  64. LOG(1, "Free RAM: %i bytes", freeRam());
  65. g_btnCancel.begin();
  66. g_btnOk.begin();
  67. g_btnMinus.begin();
  68. g_btnPlus.begin();
  69. g_hibernateService.begin();
  70. g_lcd.begin(16, 2);
  71. byte sensorChar[8] = {
  72. B00100,
  73. B01010,
  74. B01010,
  75. B01010,
  76. B01010,
  77. B10001,
  78. B11111,
  79. B01110,
  80. };
  81. g_lcd.createChar(LCD_CHAR_SENSOR, sensorChar);
  82. g_lcdLed.begin();
  83. g_relay1.begin();
  84. g_relay2.begin();
  85. g_dallasTemperature.begin();
  86. g_dallasTemperature.setWaitForConversion(false);
  87. LOG(1, "Found %i sensors", g_dallasTemperature.getDeviceCount());
  88. g_tempInput1.begin();
  89. g_tempInput2.begin();
  90. g_tankService1.begin();
  91. g_tankService2.begin();
  92. setActivity(&g_loaderActivity);
  93. LOG_FN_END(1);
  94. }
  95. void AppCore::loop()
  96. {
  97. LOG_FN_BEGIN(50);
  98. g_btnCancel.read();
  99. g_btnOk.read();
  100. g_btnMinus.read();
  101. g_btnPlus.read();
  102. g_tempInput1.loop();
  103. g_tempInput2.loop();
  104. g_tankService1.loop();
  105. g_tankService2.loop();
  106. g_hibernateService.loop();
  107. if (g_currentActivity)
  108. {
  109. g_currentActivity->loop();
  110. }
  111. LOG_FN_END(50);
  112. }
  113. void AppCore::setActivity(IActivity* activity)
  114. {
  115. g_currentActivity = activity;
  116. g_currentActivity->begin();
  117. }