Thanks!!!
But it is not working
I tested PWMParabolaOvernight(23,0,8,0,10,90,5) and got this:
Code: Select all
23 0 5
23 1 5
23 2 5
23 3 5
23 4 5
23 5 5
23 6 5
23 7 5
23 8 5
23 9 5
23 10 5
23 11 5
23 12 5
23 13 5
23 14 5
23 15 5
23 16 5
23 17 5
23 18 5
23 19 5
23 20 5
23 21 5
23 22 5
23 23 5
23 24 5
23 25 5
23 26 5
23 27 5
23 28 5
23 29 5
23 30 5
23 31 5
23 32 5
23 33 5
23 34 5
23 35 5
23 36 5
23 37 5
23 38 5
23 39 5
23 40 5
23 41 5
23 42 5
23 43 5
23 44 5
23 45 5
23 46 5
23 47 5
23 48 5
23 49 5
23 50 5
23 51 5
23 52 5
23 53 5
23 54 5
23 55 5
23 56 5
23 57 5
23 58 5
23 59 5
0 0 37
0 1 37
0 2 37
0 3 38
0 4 38
0 5 38
0 6 39
0 7 39
0 8 39
0 9 41
0 10 41
0 11 41
0 12 42
0 13 42
0 14 42
0 15 43
0 16 43
0 17 43
0 18 45
0 19 45
0 20 45
0 21 46
0 22 46
0 23 46
0 24 47
0 25 47
0 26 47
0 27 48
0 28 48
0 29 48
0 30 50
0 31 50
0 32 50
0 33 51
0 34 51
0 35 51
0 36 52
0 37 52
0 38 52
0 39 53
0 40 53
0 41 53
0 42 54
0 43 54
0 44 54
0 45 55
0 46 55
0 47 55
0 48 57
0 49 57
0 50 57
0 51 58
0 52 58
0 53 58
0 54 59
0 55 59
0 56 59
0 57 60
0 58 60
0 59 60
then I went and tested PWMParabolaOvernight(22,0,8,0,10,90,5) and got this:
Code: Select all
22 0 5
22 1 5
22 2 5
22 3 5
22 4 5
22 5 5
22 6 5
22 7 5
22 8 5
22 9 5
22 10 5
22 11 5
22 12 5
22 13 5
22 14 5
22 15 5
22 16 5
22 17 5
22 18 5
22 19 5
22 20 5
22 21 5
22 22 5
22 23 5
22 24 5
22 25 5
22 26 5
22 27 5
22 28 5
22 29 5
22 30 5
22 31 5
22 32 5
22 33 5
22 34 5
22 35 5
22 36 5
22 37 5
22 38 5
22 39 5
22 40 5
22 41 5
22 42 5
22 43 5
22 44 5
22 45 5
22 46 5
22 47 5
22 48 5
22 49 5
22 50 5
22 51 5
22 52 5
22 53 5
22 54 5
22 55 5
22 56 5
22 57 5
22 58 5
22 59 5
23 0 34
23 1 34
23 2 34
23 3 34
23 4 36
23 5 36
23 6 36
23 7 37
23 8 37
23 9 37
23 10 38
23 11 38
23 12 38
23 13 38
23 14 39
23 15 39
23 16 39
23 17 41
23 18 41
23 19 41
23 20 42
23 21 42
23 22 42
23 23 42
23 24 43
23 25 43
23 26 43
23 27 45
23 28 45
23 29 45
23 30 46
23 31 46
23 32 46
23 33 46
23 34 47
23 35 47
23 36 47
23 37 48
23 38 48
23 39 48
23 40 50
23 41 50
23 42 50
23 43 50
23 44 51
23 45 51
23 46 51
23 47 52
23 48 52
23 49 52
23 50 53
23 51 53
23 52 53
23 53 53
23 54 54
23 55 54
23 56 54
23 57 55
23 58 55
23 59 55
0 0 57
0 1 57
0 2 57
0 3 57
0 4 58
0 5 58
0 6 58
0 7 59
0 8 59
0 9 59
0 10 60
0 11 60
0 12 60
0 13 60
0 14 61
0 15 61
0 16 61
0 17 62
0 18 62
0 19 62
0 20 63
0 21 63
0 22 63
0 23 63
0 24 64
0 25 64
0 26 64
0 27 65
0 28 65
0 29 65
0 30 66
0 31 66
0 32 66
0 33 66
0 34 67
0 35 67
0 36 67
0 37 68
0 38 68
0 39 68
0 40 69
0 41 69
0 42 69
0 43 69
0 44 70
0 45 70
0 46 70
0 47 71
0 48 71
0 49 71
0 50 72
0 51 72
0 52 72
0 53 72
0 54 73
0 55 73
0 56 73
0 57 73
0 58 73
0 59 73
Looks like it is missing the starting hour completely.
Here is the test code I used:
Code: Select all
#include <Salinity.h>
#include <ReefAngel_Features.h>
#include <Globals.h>
#include <RA_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <InternalEEPROM.h>
#include <RA_NokiaLCD.h>
#include <RA_ATO.h>
#include <RA_Joystick.h>
#include <LED.h>
#include <RA_TempSensor.h>
#include <Relay.h>
#include <RA_PWM.h>
#include <Timer.h>
#include <Memory.h>
#include <InternalEEPROM.h>
#include <RA_Colors.h>
#include <RA_CustomColors.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <ReefAngel.h>
int test=0;
void setup()
{
ReefAngel.Init();
}
void loop()
{
wdt_reset();
adjustTime(60);
Serial.print(hour());
Serial.print("\t");
Serial.print(minute());
Serial.print("\t");
Serial.println(PWMParabolaOvernight(22,0,8,0,10,90,5));
delay(10);
if (test++>2500)
while(1) wdt_reset();
}
byte PWMParabolaOvernight(byte startHour, byte startMinute, byte endHour,
byte endMinute, byte startPWM, byte endPWM, byte oldValue)
{
int start = NumMins(startHour, startMinute);
int end = NumMins(endHour, endMinute);
if (start > end) //Start is greater than End so its over midnight
{
//Example: 2300hrs to 0200hrs
if (hour() < endHour) start -= 1440; //past midnight
if (hour() > startHour) end += 1440; //before midnight
}
int current = NumMins(hour(), minute());
byte pwmDelta = endPWM - startPWM;
byte parabolaPhase = constrain(map(current, start, end, 0, 180), 0, 180);
if ( current <= start || current >= end)
return oldValue;
else
{
return startPWM + (pwmDelta * sin(radians(parabolaPhase)));
}
}
The only thing is that you will need to change the libraries to perform this test....
You need to change ReefAngel.cpp
From
Code: Select all
setSyncInterval(SECS_PER_HOUR*6); // Changed to sync every 6 hours.
To
Code: Select all
setSyncInterval(SECS_PER_HOUR*6000); // Changed to sync every 6 hours.
Or the clock will keep syncing with the RTC.
Roberto.