sbus invertion in config
This commit is contained in:
@ -7,7 +7,7 @@ Professional LED controller firmware for ESP32. Designed for model aircraft with
|
|||||||
### Hardware Support
|
### Hardware Support
|
||||||
- **ESP32 DevKitC** and **ESP32-C3 MINI** Development Board
|
- **ESP32 DevKitC** and **ESP32-C3 MINI** Development Board
|
||||||
- Dual WS2812B LED strip support (configurable GPIOs)
|
- Dual WS2812B LED strip support (configurable GPIOs)
|
||||||
- PWM signal input for RC control
|
- PWM or SBUS signal input for RC control
|
||||||
- Real-time LED animation at 60 FPS
|
- Real-time LED animation at 60 FPS
|
||||||
|
|
||||||
### Animation Modes
|
### Animation Modes
|
||||||
@ -35,7 +35,7 @@ led-controller-firmware/
|
|||||||
│ ├── control.c/h # initialization
|
│ ├── control.c/h # initialization
|
||||||
│ ├── config.c/h # NVS
|
│ ├── config.c/h # NVS
|
||||||
│ ├── led.c/h # WS2812B control (RMT driver)
|
│ ├── led.c/h # WS2812B control (RMT driver)
|
||||||
│ ├── rcsignal.c/h # PWM signal reading
|
│ ├── rcsignal.c/h # PWM/SBUS signal reading
|
||||||
│ ├── localbtn.c/h # Local btn reading
|
│ ├── localbtn.c/h # Local btn reading
|
||||||
│ └── animation.c/h # LED animation patterns
|
│ └── animation.c/h # LED animation patterns
|
||||||
├── CMakeLists.txt
|
├── CMakeLists.txt
|
||||||
@ -80,7 +80,7 @@ ESP32 Pin -> Component
|
|||||||
----------- ----------
|
----------- ----------
|
||||||
GPIO XX -> WS2812B Strip A Data
|
GPIO XX -> WS2812B Strip A Data
|
||||||
GPIO XX -> WS2812B Strip B Data
|
GPIO XX -> WS2812B Strip B Data
|
||||||
GPIO XX -> RC PWM Signal
|
GPIO XX -> RC PWM/SBUS Signal
|
||||||
GPIO XX -> Local button Signal
|
GPIO XX -> Local button Signal
|
||||||
GND -> Common Ground
|
GND -> Common Ground
|
||||||
5V -> LED Strip Power (if current < 500mA)
|
5V -> LED Strip Power (if current < 500mA)
|
||||||
|
|||||||
@ -31,6 +31,7 @@ static const char *TAG = "CONFIG";
|
|||||||
#define HARDCODED_CONFIG_SBUS_TRIGGER_CHANNEL 3U // Channel 4
|
#define HARDCODED_CONFIG_SBUS_TRIGGER_CHANNEL 3U // Channel 4
|
||||||
#define HARDCODED_CONFIG_SBUS_THRESHOLD_LOW 800U
|
#define HARDCODED_CONFIG_SBUS_THRESHOLD_LOW 800U
|
||||||
#define HARDCODED_CONFIG_SBUS_THRESHOLD_HIGH 1100U
|
#define HARDCODED_CONFIG_SBUS_THRESHOLD_HIGH 1100U
|
||||||
|
#define HARDCODED_CONFIG_SBUS_INVERTED true // Set inverted RX for FrSky receivers (they output inverted SBUS)
|
||||||
|
|
||||||
#if defined(CONFIG_IDF_TARGET_ESP32C3)
|
#if defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||||
#define HARDCODED_CONFIG_LOCALBTN_PIN 9
|
#define HARDCODED_CONFIG_LOCALBTN_PIN 9
|
||||||
@ -54,6 +55,7 @@ static config_t current_config = {
|
|||||||
.sbus_trigger_channel = 3,
|
.sbus_trigger_channel = 3,
|
||||||
.sbus_threshold_low = 800,
|
.sbus_threshold_low = 800,
|
||||||
.sbus_threshold_high = 1100,
|
.sbus_threshold_high = 1100,
|
||||||
|
.sbus_inverted = false,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void calculate_config_hash(const config_t *cfg, uint8_t *out_hash);
|
static void calculate_config_hash(const config_t *cfg, uint8_t *out_hash);
|
||||||
@ -197,6 +199,7 @@ esp_err_t config_init(void)
|
|||||||
current_config.sbus_trigger_channel = HARDCODED_CONFIG_SBUS_TRIGGER_CHANNEL;
|
current_config.sbus_trigger_channel = HARDCODED_CONFIG_SBUS_TRIGGER_CHANNEL;
|
||||||
current_config.sbus_threshold_low = HARDCODED_CONFIG_SBUS_THRESHOLD_LOW;
|
current_config.sbus_threshold_low = HARDCODED_CONFIG_SBUS_THRESHOLD_LOW;
|
||||||
current_config.sbus_threshold_high = HARDCODED_CONFIG_SBUS_THRESHOLD_HIGH;
|
current_config.sbus_threshold_high = HARDCODED_CONFIG_SBUS_THRESHOLD_HIGH;
|
||||||
|
current_config.sbus_inverted = HARDCODED_CONFIG_SBUS_INVERTED;
|
||||||
|
|
||||||
save_config_to_nvs();
|
save_config_to_nvs();
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -29,6 +29,7 @@ typedef struct
|
|||||||
uint8_t sbus_trigger_channel; // SBUS channel for mode trigger (0-15, typically 3 for CH4)
|
uint8_t sbus_trigger_channel; // SBUS channel for mode trigger (0-15, typically 3 for CH4)
|
||||||
uint16_t sbus_threshold_low; // SBUS low threshold (default 800)
|
uint16_t sbus_threshold_low; // SBUS low threshold (default 800)
|
||||||
uint16_t sbus_threshold_high; // SBUS high threshold (default 1100)
|
uint16_t sbus_threshold_high; // SBUS high threshold (default 1100)
|
||||||
|
bool sbus_inverted; // true = SBUS in inverted mode (like FrSky), false = normal mode
|
||||||
|
|
||||||
uint8_t hash[CONFIG_HASH_LEN]; // SHA256 Hash of config
|
uint8_t hash[CONFIG_HASH_LEN]; // SHA256 Hash of config
|
||||||
} config_t;
|
} config_t;
|
||||||
|
|||||||
@ -269,8 +269,11 @@ esp_err_t rcsignal_init(const config_t *config)
|
|||||||
ESP_ERROR_CHECK(uart_set_pin(UART_NUM, UART_PIN_NO_CHANGE, rcsignal.gpio_pin, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
|
ESP_ERROR_CHECK(uart_set_pin(UART_NUM, UART_PIN_NO_CHANGE, rcsignal.gpio_pin, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE));
|
||||||
ESP_ERROR_CHECK(uart_driver_install(UART_NUM, UART_BUF_SIZE * 2, 0, 0, NULL, 0));
|
ESP_ERROR_CHECK(uart_driver_install(UART_NUM, UART_BUF_SIZE * 2, 0, 0, NULL, 0));
|
||||||
|
|
||||||
|
if (config->sbus_inverted)
|
||||||
|
{
|
||||||
// Set inverted RX for FrSky receivers (they output inverted SBUS)
|
// Set inverted RX for FrSky receivers (they output inverted SBUS)
|
||||||
ESP_ERROR_CHECK(uart_set_line_inverse(UART_NUM, UART_SIGNAL_RXD_INV));
|
ESP_ERROR_CHECK(uart_set_line_inverse(UART_NUM, UART_SIGNAL_RXD_INV));
|
||||||
|
}
|
||||||
|
|
||||||
ESP_LOGI(TAG, "SBUS UART configured with inverted RX");
|
ESP_LOGI(TAG, "SBUS UART configured with inverted RX");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user