mirror of
https://github.com/okalachev/flix.git
synced 2026-02-16 23:21:31 +00:00
Make rc channel numbers and calibration params use int instead of float
As parameter subsystems supports int now, and int is much more natural here.
This commit is contained in:
@@ -6,9 +6,9 @@
|
|||||||
#include <Preferences.h>
|
#include <Preferences.h>
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
extern float channelZero[16];
|
extern int channelZero[16];
|
||||||
extern float channelMax[16];
|
extern int channelMax[16];
|
||||||
extern float rollChannel, pitchChannel, throttleChannel, yawChannel, armedChannel, modeChannel;
|
extern int rollChannel, pitchChannel, throttleChannel, yawChannel, armedChannel, modeChannel;
|
||||||
extern int wifiMode, udpLocalPort, udpRemotePort;
|
extern int wifiMode, udpLocalPort, udpRemotePort;
|
||||||
extern float rcLossTimeout, descendTime;
|
extern float rcLossTimeout, descendTime;
|
||||||
|
|
||||||
|
|||||||
31
flix/rc.ino
31
flix/rc.ino
@@ -9,15 +9,14 @@
|
|||||||
SBUS rc(Serial2);
|
SBUS rc(Serial2);
|
||||||
|
|
||||||
uint16_t channels[16]; // raw rc channels
|
uint16_t channels[16]; // raw rc channels
|
||||||
float channelZero[16]; // calibration zero values
|
int channelZero[16]; // calibration zero values
|
||||||
float channelMax[16]; // calibration max values
|
int channelMax[16]; // calibration max values
|
||||||
|
|
||||||
float controlRoll, controlPitch, controlYaw, controlThrottle; // pilot's inputs, range [-1, 1]
|
float controlRoll, controlPitch, controlYaw, controlThrottle; // pilot's inputs, range [-1, 1]
|
||||||
float controlMode = NAN;
|
float controlMode = NAN;
|
||||||
float controlTime = NAN; // time of the last controls update
|
float controlTime = NAN; // time of the last controls update
|
||||||
|
|
||||||
// Channels mapping (nan means not assigned):
|
int rollChannel = -1, pitchChannel = -1, throttleChannel = -1, yawChannel = -1, modeChannel = -1; // channel mapping
|
||||||
float rollChannel = NAN, pitchChannel = NAN, throttleChannel = NAN, yawChannel = NAN, modeChannel = NAN;
|
|
||||||
|
|
||||||
void setupRC() {
|
void setupRC() {
|
||||||
print("Setup RC\n");
|
print("Setup RC\n");
|
||||||
@@ -41,11 +40,11 @@ void normalizeRC() {
|
|||||||
controls[i] = mapf(channels[i], channelZero[i], channelMax[i], 0, 1);
|
controls[i] = mapf(channels[i], channelZero[i], channelMax[i], 0, 1);
|
||||||
}
|
}
|
||||||
// Update control values
|
// Update control values
|
||||||
controlRoll = rollChannel >= 0 ? controls[(int)rollChannel] : 0;
|
controlRoll = rollChannel < 0 ? 0 : controls[rollChannel];
|
||||||
controlPitch = pitchChannel >= 0 ? controls[(int)pitchChannel] : 0;
|
controlPitch = pitchChannel < 0 ? 0 : controls[pitchChannel];
|
||||||
controlYaw = yawChannel >= 0 ? controls[(int)yawChannel] : 0;
|
controlYaw = yawChannel < 0 ? 0 : controls[yawChannel];
|
||||||
controlThrottle = throttleChannel >= 0 ? controls[(int)throttleChannel] : 0;
|
controlThrottle = throttleChannel < 0 ? 0 : controls[throttleChannel];
|
||||||
controlMode = modeChannel >= 0 ? controls[(int)modeChannel] : NAN; // mode switch should not have affect if not set
|
controlMode = modeChannel < 0 ? NAN : controls[modeChannel]; // mode control is ineffective if not mapped
|
||||||
}
|
}
|
||||||
|
|
||||||
void calibrateRC() {
|
void calibrateRC() {
|
||||||
@@ -64,7 +63,7 @@ void calibrateRC() {
|
|||||||
printRCCalibration();
|
printRCCalibration();
|
||||||
}
|
}
|
||||||
|
|
||||||
void calibrateRCChannel(float *channel, uint16_t in[16], uint16_t out[16], const char *str) {
|
void calibrateRCChannel(int *channel, uint16_t in[16], uint16_t out[16], const char *str) {
|
||||||
print("%s", str);
|
print("%s", str);
|
||||||
pause(3);
|
pause(3);
|
||||||
for (int i = 0; i < 30; i++) readRC(); // try update 30 times max
|
for (int i = 0; i < 30; i++) readRC(); // try update 30 times max
|
||||||
@@ -85,15 +84,15 @@ void calibrateRCChannel(float *channel, uint16_t in[16], uint16_t out[16], const
|
|||||||
channelZero[ch] = in[ch];
|
channelZero[ch] = in[ch];
|
||||||
channelMax[ch] = out[ch];
|
channelMax[ch] = out[ch];
|
||||||
} else {
|
} else {
|
||||||
*channel = NAN;
|
*channel = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void printRCCalibration() {
|
void printRCCalibration() {
|
||||||
print("Control Ch Zero Max\n");
|
print("Control Ch Zero Max\n");
|
||||||
print("Roll %-7g%-7g%-7g\n", rollChannel, rollChannel >= 0 ? channelZero[(int)rollChannel] : NAN, rollChannel >= 0 ? channelMax[(int)rollChannel] : NAN);
|
print("Roll %-7d%-7d%-7d\n", rollChannel, rollChannel < 0 ? 0 : channelZero[rollChannel], rollChannel < 0 ? 0 : channelMax[rollChannel]);
|
||||||
print("Pitch %-7g%-7g%-7g\n", pitchChannel, pitchChannel >= 0 ? channelZero[(int)pitchChannel] : NAN, pitchChannel >= 0 ? channelMax[(int)pitchChannel] : NAN);
|
print("Pitch %-7d%-7d%-7d\n", pitchChannel, pitchChannel < 0 ? 0 : channelZero[pitchChannel], pitchChannel < 0 ? 0 : channelMax[pitchChannel]);
|
||||||
print("Yaw %-7g%-7g%-7g\n", yawChannel, yawChannel >= 0 ? channelZero[(int)yawChannel] : NAN, yawChannel >= 0 ? channelMax[(int)yawChannel] : NAN);
|
print("Yaw %-7d%-7d%-7d\n", yawChannel, yawChannel < 0 ? 0 : channelZero[yawChannel], yawChannel < 0 ? 0 : channelMax[yawChannel]);
|
||||||
print("Throttle %-7g%-7g%-7g\n", throttleChannel, throttleChannel >= 0 ? channelZero[(int)throttleChannel] : NAN, throttleChannel >= 0 ? channelMax[(int)throttleChannel] : NAN);
|
print("Throttle %-7d%-7d%-7d\n", throttleChannel, throttleChannel < 0 ? 0 : channelZero[throttleChannel], throttleChannel < 0 ? 0 : channelMax[throttleChannel]);
|
||||||
print("Mode %-7g%-7g%-7g\n", modeChannel, modeChannel >= 0 ? channelZero[(int)modeChannel] : NAN, modeChannel >= 0 ? channelMax[(int)modeChannel] : NAN);
|
print("Mode %-7d%-7d%-7d\n", modeChannel, modeChannel < 0 ? 0 : channelZero[modeChannel], modeChannel < 0 ? 0 : channelMax[modeChannel]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ void doCommand(String str, bool echo);
|
|||||||
void handleInput();
|
void handleInput();
|
||||||
void normalizeRC();
|
void normalizeRC();
|
||||||
void calibrateRC();
|
void calibrateRC();
|
||||||
void calibrateRCChannel(float *channel, uint16_t zero[16], uint16_t max[16], const char *str);
|
void calibrateRCChannel(int *channel, uint16_t zero[16], uint16_t max[16], const char *str);
|
||||||
void printRCCalibration();
|
void printRCCalibration();
|
||||||
void printLogHeader();
|
void printLogHeader();
|
||||||
void printLogData();
|
void printLogData();
|
||||||
|
|||||||
Reference in New Issue
Block a user