public void Display(ArrayList displayList, DS1307 clock, Schedule schedule) { var now = clock.Get(); displayList.Add("Time: " + now.ToString("U") + "\r\n"); displayList.Add("Heater Schedule Today: "); schedule.GetDayTimeSlots(now.DayOfWeek, displayList); displayList.Add("\r\n"); displayList.Add("Heater Status: "); if (schedule.GetHeaterStatus(now) == true) { displayList.Add("ON"); } else { displayList.Add("OFF"); } if (schedule.WaterHeaterManualOverride) { displayList.Add(" [manual override]"); } else { displayList.Add(" [scheduled]"); } displayList.Add("\r\n"); }
public void Display(ArrayList displayList, DS1307 clock, Schedule schedule) { var now = clock.Get(); displayList.Add("Time: " + now.ToString("U") + "\r\n"); displayList.Add("Heater Schedule Today: "); schedule.GetDayTimeSlots(now.DayOfWeek, displayList); displayList.Add("\r\n"); displayList.Add("Heater Status: "); if (schedule.GetHeaterStatus(now) == true) { displayList.Add("ON"); } else { displayList.Add("OFF"); } if (schedule.WaterHeaterManualOverride) { displayList.Add(" [manual override]"); } else { displayList.Add(" [scheduled]"); } displayList.Add("\r\n"); }
public static void Main() { const int millisecIncrement = 100; const int millisecElapsedLimit = 60000; var millisecCounter = 0; var currentHeat = HighHeat; var currentHeaterStatus = false; var previousHeaterStatus = true; var initialize = true; _ledHighHeat.SetDutyCycle(0); _ledLowHeat.SetDutyCycle(0); InitializeClock(); Log("\r\nWater Heater Controller v1.0\r\n"); Log("Initializing..."); LoadSchedule(); PowerServo(true); Log("Centering servo"); _servo.Center(); Log("Setting heater on high heat by default"); _servo.Move(Center, currentHeat); Log("Running..."); PowerServo(false); while (true) { if (_serialUI.SerialErrorReceived == true) { _serialUI.Dispose(); _serialUI = new SerialUserInterface(); _showMainMenu = true; Log("Serial error received: serial UI object recycled"); } if (_showMainMenu == true) { _showMainMenu = false; MainMenu(null); } millisecCounter += millisecIncrement; if (millisecCounter >= millisecElapsedLimit || _scheduleChange == true) { millisecCounter = 0; currentHeaterStatus = _schedule.GetHeaterStatus(_clock.Get()); } if (currentHeaterStatus != previousHeaterStatus || _scheduleChange == true || initialize == true) { Log("Heater state change"); _ledOverride.Write(_schedule.WaterHeaterManualOverride); if (currentHeaterStatus) { Log("Setting heater on high"); PowerServo(true); _servo.Move(currentHeat, HighHeat); PowerServo(false); _ledHighHeat.SetDutyCycle(50); _ledLowHeat.SetDutyCycle(0); currentHeat = HighHeat; } else { Log("Setting heater on low"); PowerServo(true); _servo.Move(currentHeat, LowHeat); PowerServo(false); _ledHighHeat.SetDutyCycle(0); _ledLowHeat.SetDutyCycle(50); currentHeat = LowHeat; } previousHeaterStatus = currentHeaterStatus; _scheduleChange = false; initialize = false; } if (_shutdown) { Log("Shutting down"); Log("Moving servo to center..."); _ledHighHeat.SetDutyCycle(50); _ledLowHeat.SetDutyCycle(50); PowerServo(true); _servo.Move(currentHeat, Center); PowerServo(false); Log("Shutdown complete"); Log("Cycle power to restart."); var dutyCycle = 0; var direction = 1; while (true) { _ledHighHeat.SetDutyCycle((uint)dutyCycle); _ledLowHeat.SetDutyCycle((uint)dutyCycle); dutyCycle += direction; if (dutyCycle == 50) { direction = -1; } else if (dutyCycle == 0) { direction = 1; } Thread.Sleep(50); } } Thread.Sleep(millisecIncrement); } }