Re: Moon rise/set implementation
Posted: Sat Mar 23, 2013 8:01 am
17:13 to 5:29 for today's schedule...
looks good so far
looks good so far
Community discussion about Reef Angel Controllers and reefing related subjects
https://forum.reefangel.com/
Code: Select all
byte moonPhase = MoonPhase();
byte moonPWM = 0;
if(moonPhase > 0)
moonPWM = PWMParabola(Moon.riseH, Moon.riseM, Moon.setH, Moon.setM, 10, ((moonPhase / 10) + 11), 0);
Code: Select all
byte PWMParabolaOvernight(byte startHour, byte startMinute, byte endHour, byte endMinute, byte startPWM, byte endPWM, byte oldValue)
{
unsigned long Start = previousMidnight(now())+((unsigned long)NumMins(startHour, startMinute)*60);
unsigned long End = nextMidnight(now())+((unsigned long)NumMins(endHour, endMinute)*60);
boolean isOvernight=NumMins(startHour,startMinute)>NumMins(endHour,endMinute);
int Now = NumMins(hour(), minute());
if (hour()<startHour && isOvernight) Start-=86400;
if (hour()<startHour || !isOvernight) End-=86400;
byte PWMDelta = endPWM-startPWM;
byte ParabolaPhase=constrain(map(Now,Start,End,0,180),0,180);
if ( Now <= Start || Now >= End)
return oldValue;
else
{
return startPWM+(PWMDelta*sin(radians(ParabolaPhase)));
}
}
Code: Select all
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)
{
//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)));
}
}
Code: Select all
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)));
}
}
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
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
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)));
}
}
Code: Select all
setSyncInterval(SECS_PER_HOUR*6); // Changed to sync every 6 hours.Code: Select all
setSyncInterval(SECS_PER_HOUR*6000); // Changed to sync every 6 hours.Code: Select all
if (hour() > startHour) end += 1440; //before midnight
Code: Select all
if (hour() >= startHour) end += 1440; //before midnight
Code: Select all
byte PWMSlopeOvernight(byte startHour, byte startMinute, byte endHour, byte endMinute, byte startPWM, byte endPWM, byte Duration, 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());
int startD = start + Duration;
int stopD = end - Duration;
if ( current >= start && current <= startD )
return constrain(map(current, start, startD, startPWM, endPWM),startPWM, endPWM);
else if ( current >= stopD && current <= end )
{
byte v = constrain(map(current, stopD, end, startPWM, endPWM),startPWM, endPWM);
return endPWM - v + startPWM;
}
else if ( current > startD && current < stopD )
return endPWM;
// lastly return the existing value
return oldValue;
}
Code: Select all
#included moon.hCode: Select all
moon_init(21,-73); Code: Select all
moon_test.ino: In function 'void loop()':
moon_test:26: error: 'moon_init' was not declared in this scopeWelcome and good luck. Try this instead..Aemornion wrote:
I have putCode: Select all
#included moon.h
Code: Select all
#include "moon.h"Code: Select all
#included moon.hCode: Select all
#included <moon.h>Code: Select all
#included moon.hCode: Select all
moon_test.ino:5:10: error: #include expects "FILENAME" or <FILENAME>Code: Select all
#include "moon.h"Code: Select all
moon_test.ino:5:18: error: moon.h: No such file or directoryCode: Select all
moon_init(21,-73); Code: Select all
/////////moon.h test Program//////////
#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <moon.h>
void setup()
{
//moon_init(21,-73);
setSyncProvider(RTC.get); // the function to get the time from the RTC
}
void loop()
{
//moon_init(21,-73);
}