forked from hjd1964/OnStep
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHome.ino
118 lines (98 loc) · 3.59 KB
/
Home.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// -----------------------------------------------------------------------------------
// functions related to Homing the mount
// moves telescope to the home position, then stops tracking
boolean goHome() {
if ((parkStatus!=NotParked) && (parkStatus!=Parking)) return false; // fail, moving to home not allowed if Parked
if (trackingState==TrackingMoveTo) return false; // fail, moving to home not allowed during a move
if (guideDirHA || guideDirDec) return false; // fail, moving to home not allowed while guiding
cli();
startHA =posHA;
startDec=posDec;
if (pierSide==PierSideWest) targetHA.part.m=-celestialPoleHA*StepsPerDegreeHA; else targetHA.part.m=celestialPoleHA*StepsPerDegreeHA; targetHA.part.f=0;
targetDec.part.m=celestialPoleDec*StepsPerDegreeDec; targetDec.part.f=0;
sei();
// pierSide = PierSideNone;
abortTrackingState= trackingState;
lastTrackingState = TrackingNone;
trackingState = TrackingMoveTo;
SetSiderealClockRate(siderealInterval);
homeMount = true;
return true;
}
// sets telescope home position; user manually moves to Hour Angle 90 and Declination 90 (CWD position),
// then the first gotoEqu will set the pier side and turn on tracking
boolean setHome() {
if (trackingState==TrackingMoveTo) return false; // fail, forcing home not allowed during a move
// default values for state variables
pierSide = PierSideNone;
dirDec = 1;
DecDir = DecDirEInit;
if (celestialPoleDec>0) HADir = HADirNCPInit; else HADir = HADirSCPInit;
dirHA = 1;
newTargetRA = 0;
newTargetDec = 0;
newTargetAlt = 0;
newTargetAzm = 0;
origTargetHA.fixed = 0;
origTargetDec = 0;
// reset pointing model
alignMode = AlignNone;
altCor = 0;
azmCor = 0;
doCor = 0;
pdCor = 0;
IH = 0;
IHS = 0;
ID = 0;
// reset Meridian Flip control
#ifdef MOUNT_TYPE_GEM
meridianFlip = MeridianFlipAlways;
#endif
#ifdef MOUNT_TYPE_FORK
meridianFlip = MeridianFlipAlign;
#endif
#ifdef MOUNT_TYPE_FORK_ALT
meridianFlip = MeridianFlipNever;
#endif
// where we are
homeMount = false;
atHome = true;
// reset tracking and rates
trackingState = TrackingNone;
lastTrackingState = TrackingNone;
timerRateHA = SiderealRate;
#ifdef DEC_RATIO_ON
timerRateDec =SiderealRate*timerRateRatio;
#else
timerRateDec =SiderealRate;
#endif
// not parked, but don't wipe the park position if it's saved - we can still use it
parkStatus = NotParked;
EEPROM.write(EE_parkStatus,parkStatus);
// reset PEC, unless we have an index to recover from this
#ifdef PEC_SENSE_OFF
PECstatus = IgnorePEC;
PECrecorded = false;
EEPROM.write(EE_PECstatus,PECstatus);
EEPROM.write(EE_PECrecorded,PECrecorded);
#else
PECstatus = IgnorePEC;
PECstatus =EEPROM.read(EE_PECstatus);
#endif
// the polar home position
startHA = celestialPoleHA*StepsPerDegreeHA;
startDec = celestialPoleDec*StepsPerDegreeDec;
// clear pulse-guiding state
guideDurationHA = 0;
guideDurationLastHA = 0;
guideDurationDec = 0;
guideDurationLastDec= 0;
cli();
targetHA.part.m = startHA; targetHA.part.f = 0;
posHA = startHA;
PEC_HA = 0;
targetDec.part.m = startDec; targetDec.part.f = 0;
posDec = startDec;
sei();
return true;
}