Compare commits
2 Commits
dev-crsf
...
8aab304e5f
| Author | SHA1 | Date | |
|---|---|---|---|
| 8aab304e5f | |||
| 76fa76f5b8 |
24
air/main.cpp
24
air/main.cpp
@@ -85,6 +85,8 @@ struct SbusData {
|
|||||||
bool failsafe = false;
|
bool failsafe = false;
|
||||||
bool ch17 = false, ch18 = false;
|
bool ch17 = false, ch18 = false;
|
||||||
static constexpr size_t NUM_CH = 16;
|
static constexpr size_t NUM_CH = 16;
|
||||||
|
static constexpr int16_t SBUS_CH_MIN = 173;
|
||||||
|
static constexpr int16_t SBUS_CH_MAX = 1812;
|
||||||
int16_t ch[NUM_CH];
|
int16_t ch[NUM_CH];
|
||||||
|
|
||||||
/* Message len */
|
/* Message len */
|
||||||
@@ -253,16 +255,24 @@ int main(int argc, char* argv[]) {
|
|||||||
packet_count++;
|
packet_count++;
|
||||||
|
|
||||||
for (int i = 0; i < data.size() && i < SbusData::NUM_CH; ++i) {
|
for (int i = 0; i < data.size() && i < SbusData::NUM_CH; ++i) {
|
||||||
auto item = static_cast<int16_t>(data[i]);
|
auto item = static_cast<double>(data[i]);
|
||||||
sb.ch[i] = static_cast<int16_t>((item - 1000.0) * 2);
|
item -= 1000.0;
|
||||||
if (sb.ch[i] < 50) {
|
item = std::min(item, 1000.0);
|
||||||
sb.ch[i] = 50; // минимальное число
|
item = std::max(item, 0.0);
|
||||||
} else if (sb.ch[i] > 1900) {
|
item *= (SbusData::SBUS_CH_MAX - SbusData::SBUS_CH_MIN) / 1000.0;
|
||||||
sb.ch[i] = 1900; // максимальное число
|
item += SbusData::SBUS_CH_MIN;
|
||||||
|
|
||||||
|
sb.ch[i] = static_cast<int16_t>(item);
|
||||||
|
if (sb.ch[i] < SbusData::SBUS_CH_MIN) {
|
||||||
|
sb.ch[i] = SbusData::SBUS_CH_MIN; // минимальное число
|
||||||
|
} else if (sb.ch[i] > SbusData::SBUS_CH_MAX) {
|
||||||
|
sb.ch[i] = SbusData::SBUS_CH_MAX; // максимальное число
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sb.fillDataBuf();
|
sb.fillDataBuf();
|
||||||
serial.write(sb.buf_);
|
if (!serial.write(sb.buf_)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Выводим статистику каждые 100 пакетов
|
// Выводим статистику каждые 100 пакетов
|
||||||
if (packet_count % 100 == 0) {
|
if (packet_count % 100 == 0) {
|
||||||
|
|||||||
@@ -64,13 +64,12 @@ bool JoystickReader::readData(std::vector<uint16_t>& data) {
|
|||||||
// Читаем кнопки
|
// Читаем кнопки
|
||||||
int buttons = SDL_JoystickNumButtons(joystick);
|
int buttons = SDL_JoystickNumButtons(joystick);
|
||||||
for (int i = 0; i < buttons && i < data.size() - axes; ++i) {
|
for (int i = 0; i < buttons && i < data.size() - axes; ++i) {
|
||||||
auto buttonState = SDL_JoystickGetButton(joystick, i);
|
data[axes + i] = SDL_JoystickGetButton(joystick, i) ? 2000 : 1000;
|
||||||
data[axes + i] = static_cast<uint16_t>(1000.0 + (buttonState * (1000.0 / 255.0)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& i: data) {
|
for (auto& i: data) {
|
||||||
if (i < 950) i = 950;
|
if (i < 1000) i = 1000;
|
||||||
if (i > 2050) i = 2050;
|
if (i > 2000) i = 2000;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ int main(int argc, char* argv[]) {
|
|||||||
|
|
||||||
JoystickReader reader;
|
JoystickReader reader;
|
||||||
const int64_t timeInterval = 1000 / frequency;
|
const int64_t timeInterval = 1000 / frequency;
|
||||||
while (!reader.initialize()) {
|
if (!reader.initialize()) {
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
UDPSocket udp(sendAddress, 1066);
|
UDPSocket udp(sendAddress, 1066);
|
||||||
|
|||||||
Reference in New Issue
Block a user