Implement RC calibration, common for the real drone and the simulation

This commit is contained in:
Oleg Kalachev
2024-01-02 11:54:09 +03:00
parent 78f3f6e3b3
commit f520b57abe
9 changed files with 74 additions and 20 deletions

View File

@@ -5,9 +5,9 @@
#include <SBUS.h>
// NOTE: this should be changed to the actual calibration values
const uint16_t channelNeutral[] = {995, 883, 200, 972, 512, 512};
const uint16_t channelMax[] = {1651, 1540, 1713, 1630, 1472, 1472};
// NOTE: use `cr` command and replace with the actual values
int channelNeutral[] = {995, 883, 200, 972, 512, 512};
int channelMax[] = {1651, 1540, 1713, 1630, 1472, 1472};
SBUS RC(Serial2);
@@ -25,8 +25,31 @@ void readRC() {
}
}
static void normalizeRC() {
void normalizeRC() {
for (uint8_t i = 0; i < RC_CHANNELS; i++) {
controls[i] = mapf(channels[i], channelNeutral[i], channelMax[i], 0, 1);
}
}
void calibrateRC() {
Serial.println("Calibrate RC: move all sticks to maximum positions within 4 seconds");
Serial.println("··o ··o\n··· ···\n··· ···");
delay(4000);
for (int i = 0; i < 30; i++) readRC(); // ensure the values are updated
for (uint8_t i = 0; i < RC_CHANNELS; i++) {
channelMax[i] = channels[i];
}
Serial.println("Calibrate RC: move all sticks to neutral positions within 4 seconds");
Serial.println("··· ···\n··· ·o·\n·o· ···");
delay(4000);
for (int i = 0; i < 30; i++) readRC(); // ensure the values are updated
for (uint8_t i = 0; i < RC_CHANNELS; i++) {
channelNeutral[i] = channels[i];
}
printRCCal();
}
void printRCCal() {
printArray(channelNeutral, RC_CHANNELS);
printArray(channelMax, RC_CHANNELS);
}