Example #1
0
        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");
        }
Example #2
0
        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");
        }
Example #3
0
        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);
            }
        }