Skip to content

Commit 980c11b

Browse files
committed
Move beeper to state machine
Supports multiple beeps. See beepMultiple().
1 parent 8c01bb2 commit 980c11b

File tree

4 files changed

+89
-18
lines changed

4 files changed

+89
-18
lines changed

Firmware/RTK_Everywhere/RTK_Everywhere.ino

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,10 @@ unsigned long um980BaseStartTimer; // Tracks how long the base averaging mode ha
737737

738738
RtkMode_t rtkMode; // Mode of operation
739739

740-
unsigned long beepStopMs; // Time at which to turn off beeper
740+
unsigned long beepLengthMs; // Number of ms to make noise
741+
unsigned long beepQuietLengthMs; // Number of ms to make reset between multiple beeps
742+
unsigned long beepNextEventMs; // Time at which to move the beeper to the next state
743+
unsigned long beepCount; // Number of beeps to do
741744

742745
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
743746

Firmware/RTK_Everywhere/System.ino

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,15 @@ void finishDisplay()
3939
// Start the beeper and limit its beep length using the tickerBeepUpdate task
4040
void beepDurationMs(uint16_t lengthMs)
4141
{
42-
beepStopMs = millis() + lengthMs;
43-
beepOn();
42+
beepMultiple(1, lengthMs, 0); // Number of beeps, length of beep, length of quiet
43+
}
44+
45+
// Number of beeps, length of beep ms, length of quiet ms
46+
void beepMultiple(int numberOfBeeps, int lengthOfBeepMs, int lengthOfQuietMs)
47+
{
48+
beepCount = numberOfBeeps;
49+
beepLengthMs = lengthOfBeepMs;
50+
beepQuietLengthMs = lengthOfQuietMs;
4451
}
4552

4653
void beepOn()

Firmware/RTK_Everywhere/Tasks.ino

Lines changed: 75 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,7 @@ void handleGnssDataTask(void *e)
10421042
slowConsumer = "SD card";
10431043
}
10441044
} // bytesToSend
1045-
} // End connected
1045+
} // End connected
10461046

10471047
//----------------------------------------------------------------------
10481048
// Update the available space in the ring buffer
@@ -1230,18 +1230,74 @@ void tickerBatteryLedUpdate()
12301230
}
12311231
}
12321232

1233+
enum BeepState
1234+
{
1235+
BEEP_OFF = 0,
1236+
BEEP_ON,
1237+
BEEP_QUIET,
1238+
};
1239+
BeepState beepState = BEEP_OFF;
1240+
12331241
// Control the length of time the beeper makes noise
1242+
// We move through a simple state machine in order to handle multiple types of beeps (see beepMultiple())
12341243
void tickerBeepUpdate()
12351244
{
12361245
if (present.beeper == true)
12371246
{
1238-
if (beepStopMs > 0)
1247+
switch (beepState)
12391248
{
1240-
if (millis() >= beepStopMs)
1249+
default:
1250+
if (beepState != BEEP_OFF)
1251+
beepState = BEEP_OFF;
1252+
break;
1253+
1254+
case BEEP_OFF:
1255+
if (beepLengthMs > 0)
1256+
{
1257+
beepNextEventMs = millis() + beepLengthMs;
1258+
beepOn();
1259+
beepState = BEEP_ON;
1260+
}
1261+
break;
1262+
1263+
case BEEP_ON:
1264+
if (millis() >= beepNextEventMs)
1265+
{
1266+
if (beepCount == 1)
1267+
{
1268+
beepLengthMs = 0; // Stop state machine
1269+
beepState = BEEP_OFF;
1270+
beepOff();
1271+
}
1272+
else
1273+
{
1274+
beepNextEventMs = millis() + beepQuietLengthMs;
1275+
beepState = BEEP_QUIET;
1276+
beepOff();
1277+
}
1278+
}
1279+
break;
1280+
1281+
case BEEP_QUIET:
1282+
if (millis() >= beepNextEventMs)
12411283
{
1242-
beepStopMs = 0; // Signal the beeper is off
1243-
beepOff();
1284+
beepCount--;
1285+
1286+
if (beepCount == 0)
1287+
{
1288+
// We should not be here, but just in case
1289+
beepLengthMs = 0; // Stop state machine
1290+
beepState = BEEP_OFF;
1291+
beepOff();
1292+
}
1293+
else
1294+
{
1295+
beepNextEventMs = millis() + beepLengthMs;
1296+
beepState = BEEP_ON;
1297+
beepOn();
1298+
}
12441299
}
1300+
break;
12451301
}
12461302
}
12471303
}
@@ -1359,18 +1415,23 @@ void buttonCheckTask(void *e)
13591415

13601416
// The RTK Torch uses a shutdown IC configured to turn off ~3s
13611417
// Beep shortly before the shutdown IC takes over
1362-
else if (userBtn->pressedFor(2500))
1418+
else if (userBtn->pressedFor(2100))
13631419
{
1364-
// Beep if we are not locally compiled or a release candidate
1365-
if (ENABLE_DEVELOPER == false)
1366-
beepDurationMs(500); // Announce powering down
1367-
13681420
tickerStop(); // Stop controlling LEDs via ticker task
13691421

13701422
gnssStatusLedOn();
13711423
bluetoothLedOn();
1424+
1425+
// Beep if we are not locally compiled or a release candidate
1426+
if (ENABLE_DEVELOPER == false)
1427+
{
1428+
// Announce powering down
1429+
beepMultiple(3, 100, 50); // Number of beeps, length of beep ms, length of quiet ms
1430+
1431+
delay(500); //We will be shutting off during this delay but this prevents another beepMultiple() from firing
1432+
}
13721433
}
1373-
} // End productVariant == Torch
1434+
} // End productVariant == Torch
13741435
else // RTK EVK, RTK Facet v2, RTK Facet mosaic
13751436
{
13761437
if (systemState == STATE_SHUTDOWN)
@@ -1477,7 +1538,7 @@ void buttonCheckTask(void *e)
14771538
// requestChangeState(STATE_BASE_NOT_STARTED);
14781539
break;
14791540
} // End singleTap switch (systemState)
1480-
} // End singleTap
1541+
} // End singleTap
14811542
else if (doubleTap && (firstRoverStart == false) && (settings.disableSetupButton == false))
14821543
{
14831544
switch (systemState)
@@ -1516,8 +1577,8 @@ void buttonCheckTask(void *e)
15161577
// requestChangeState(STATE_BASE_NOT_STARTED);
15171578
break;
15181579
} // End doubleTap switch (systemState)
1519-
} // End doubleTap
1520-
} // End productVariant != Torch
1580+
} // End doubleTap
1581+
} // End productVariant != Torch
15211582

15221583
feedWdt();
15231584
taskYIELD();

Firmware/RTK_Everywhere/Tilt.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ void tiltUpdate()
141141
// Check to see if tilt compensation is active
142142
if (tiltSensor->isCorrecting())
143143
{
144-
beepDurationMs(2000); // Audibly indicate the start of tilt
144+
beepMultiple(2, 500, 500); //Number of beeps, length of beep ms, length of quiet ms
145145

146146
lastTiltBeepMs = millis();
147147

0 commit comments

Comments
 (0)