|
31 | 31 | #define STATUS_CYCLETIME 100 // cycletime for refresh analog and digital Statusvalues |
32 | 32 | #define UI_SET_LED_CYCLETIME 1000 // cycletime for refresh UI status LEDs |
33 | 33 |
|
34 | | -#define LIFT_EMERGENCY_MILLIS 500 // Time for wheels to be lifted in order to count as emergency. This is to filter uneven ground. |
| 34 | +#define TILT_EMERGENCY_MILLIS 2500 // Time for a single wheel to be lifted in order to count as emergency. This is to filter uneven ground. |
| 35 | +#define LIFT_EMERGENCY_MILLIS 100 // Time for both wheels to be lifted in order to count as emergency. This is to filter uneven ground. |
35 | 36 | #define BUTTON_EMERGENCY_MILLIS 20 // Time for button emergency to activate. This is to debounce the button if triggered on bumpy surfaces |
36 | 37 |
|
37 | 38 | // Define to stream debugging messages via USB |
@@ -86,6 +87,7 @@ unsigned long last_heartbeat_millis = 0; |
86 | 87 | unsigned long last_UILED_millis = 0; |
87 | 88 |
|
88 | 89 | unsigned long lift_emergency_started = 0; |
| 90 | +unsigned long tilt_emergency_started = 0; |
89 | 91 | unsigned long button_emergency_started = 0; |
90 | 92 |
|
91 | 93 | // Stock UI |
@@ -141,7 +143,8 @@ void updateEmergency() { |
141 | 143 |
|
142 | 144 | uint8_t emergency_state = 0; |
143 | 145 |
|
144 | | - bool is_lifted = emergency1 || emergency2; |
| 146 | + bool is_tilted = emergency1 || emergency2; |
| 147 | + bool is_lifted = emergency1 && emergency2; |
145 | 148 | bool stop_pressed = emergency3 || emergency4; |
146 | 149 |
|
147 | 150 | if (is_lifted) { |
@@ -173,6 +176,24 @@ void updateEmergency() { |
173 | 176 | emergency_state |= 0b10000; |
174 | 177 | } |
175 | 178 |
|
| 179 | + if (is_tilted) { |
| 180 | + // We just tilted, store the timestamp |
| 181 | + if (tilt_emergency_started == 0) { |
| 182 | + tilt_emergency_started = millis(); |
| 183 | + } |
| 184 | + } else { |
| 185 | + // Not tilted, reset the time |
| 186 | + tilt_emergency_started = 0; |
| 187 | + } |
| 188 | + |
| 189 | + if (tilt_emergency_started > 0 && (millis() - tilt_emergency_started) >= TILT_EMERGENCY_MILLIS) { |
| 190 | + // Emergency bit 2 (lift wheel 1)set? |
| 191 | + if (emergency1) |
| 192 | + emergency_state |= 0b01000; |
| 193 | + // Emergency bit 1 (lift wheel 2)set? |
| 194 | + if (emergency2) |
| 195 | + emergency_state |= 0b10000; |
| 196 | + } |
176 | 197 | if (button_emergency_started > 0 && (millis() - button_emergency_started) >= BUTTON_EMERGENCY_MILLIS) { |
177 | 198 | // Emergency bit 2 (stop button) set? |
178 | 199 | if (emergency3) |
|
0 commit comments