-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathAlarm.pde
110 lines (104 loc) · 3.12 KB
/
Alarm.pde
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
void DoAlarmUpdate() {
//TODO: Move these into their respective object control functions, not alarm
if (P_reactorLevel != OFF) {
if (fuel_demand) {
// fuel_demand on
fuel_demand_on_length++;
fuel_demand_off_length = 0;
} else {
// fuel_demand off
fuel_demand_off_length++;
fuel_demand_on_length = 0;
}
} else {
fuel_demand_on_length = 0;
fuel_demand_off_length = 0;
}
if ((pRatioReactorLevel == PR_LOW || pRatioReactorLevel == PR_HIGH) && (P_reactorLevel != OFF && P_reactorLevel != LITE)) { //from DoGrate()
pressureRatioAccumulator += 1; //use
} else {
pressureRatioAccumulator -= 5;
}
pressureRatioAccumulator = max(0,pressureRatioAccumulator); //keep value above 0
pressureRatioAccumulator = min(pressureRatioAccumulator, 65); //keep value below 100
if (boot_state == EMPTY) {
boot_empty_length++;
} else {
boot_empty_length = 0;
}
if (boot_state == UNKNOWN){
boot_unknown_length++;
} else {
boot_unknown_length = 0;
}
}
void DoAlarm() {
alarm = ALARM_NONE;
if (P_reactorLevel != OFF) { //alarm only if reactor is running
if (fuel_demand_on_length >= fuel_demand_on_alarm_point) {
alarm = ALARM_FUEL_DEMAND_ON_LONG;
Serial.print("# ");
Serial.println(display_alarm[alarm]);
}
if (fuel_demand_off_length >= fuel_demand_off_alarm_point) {
alarm = ALARM_FUEL_DEMAND_OFF_LONG;
Serial.print("# ");
Serial.println(display_alarm[alarm]);
}
if (pressureRatioAccumulator > 60) {
alarm = ALARM_BAD_REACTOR;
Serial.print("# ");
Serial.println(display_alarm[alarm]);
}
if (filter_pratio_accumulator > 100) {
alarm = ALARM_BAD_FILTER;
Serial.print("# ");
Serial.println(display_alarm[alarm]);
}
if (boot_empty_length > 120) {
alarm = ALARM_BOOT_EMPTY_LONG;
Serial.print("# ");
Serial.println(display_alarm[alarm]);
}
if (boot_unknown_length > 60) {
alarm = ALARM_BOOT_UNKNOWN_STATE;
Serial.print("# ");
Serial.println(display_alarm[alarm]);
}
// #if T_LOW_FUEL != ABSENT
// if (Temp_Data[T_LOW_FUEL] > 230) {
// Serial.println("# Reactor fuel may be low");
// alarm = ALARM_LOW_FUEL_REACTOR;
// }
// #endif
}
if (engine_state == ENGINE_ON) {
if (T_rest1Level != HOT && T_rest1Level != EXCESSIVE) {
alarm = ALARM_LOW_TREST;
Serial.print("# ");
Serial.println(display_alarm[alarm]);
}
if ((Temp_Data[T_RED1] == EXCESSIVE)) {
alarm = ALARM_HIGH_RED1;
Serial.print("# ");
Serial.println(display_alarm[alarm]);
}
// #if ANA_OIL_PRESSURE != ABSENT
// if (P_reactorLevel == OIL_P_LOW && millis()-engine_state_entered>10000) {
// Serial.println("# Bad oil pressure");
// alarm = ALARM_BAD_OIL_PRESSURE;
// }
// #endif
// #if LAMBDA_SIGNAL_CHECK == TRUE
// if (lambda_input < 0.52) {
// Serial.println("# No O2 Sensor Signal");
// alarm = ALARM_O2_NO_SIG;
// }
// #endif
}
if (alarm != ALARM_NONE) {
digitalWrite(FET_ALARM, HIGH);
} else {
digitalWrite(FET_ALARM,LOW);
}
}