From 6d203331cec7efb1856446fc1fee4227f3c87e70 Mon Sep 17 00:00:00 2001 From: kislovdm Date: Sat, 28 Jun 2025 10:53:31 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D0=B4=D0=B0=D0=BB=D1=8C=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3,=20=D1=82=D0=B5=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D1=8C=20=D1=81=D0=BA=D0=BE=D1=80=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20=D1=80=D0=B5=D0=B3=D1=83=D0=BB=D0=B8=D1=80=D1=83=D0=B5?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D0=BF=D0=BB=D0=B0=D0=B2=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.cpp | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 5864b26..765be65 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,9 +8,15 @@ #define DEBUG 0 // Флаг отладки (0 - выключен, 1 - включен) #define ESC_PIN 9 // Пин подключения ESC #define RECEIVER_ESC_PIN 5 // Пин подключения приёмника -#define PEDAL_PIN 6 // Пин подключения педали +#define PEDAL_PIN 5 // Пин подключения педали #define MAX_SPEED_POTENTIOMETER_PIN A0 // Пин потенциометра регулировки максимальной скорости +// Аналоговая педаль +#define PEDAL_ANALOG_PIN A5 +#define PEDAL_MIN 175 +#define PEDAL_MAX 880 +#define PEDAL_THRESHOLD 30 + // Константы управления ESC #define ESC_NEUTRAL_POSITION 1500 // Нейтральное положение ESC (микросекунды) #define ESC_NEUTRAL_POSITION_THRESHOLD 40 // Порог определения нейтрального положения @@ -21,8 +27,6 @@ // Создание объектов GyverOS<5> OS; // Создание планировщика задач Servo esc; // Объект для управления ESC -Bounce2::Button pedal_button = Bounce2::Button(); // Объект для обработки педали -int pedal_state = 0; // Состояние педали (для плавного разгона) // Функция репликации сигнала с приёмника на ESC void replicate_receiver_for_esc() { @@ -42,19 +46,14 @@ void replicate_receiver_for_esc() { } // Обработка нажатия педали - if (pedal_button.isPressed()) { - // Увеличение состояния педали для плавного разгона - pedal_state++; - if (pedal_state > ACCELERATION_SPEED) { - pedal_state = ACCELERATION_SPEED; - } - + int pedal_state = analogRead(PEDAL_ANALOG_PIN); + if (abs(pedal_state - PEDAL_MIN) > PEDAL_THRESHOLD) { // Чтение настройки максимальной скорости с потенциометра int rotate_value = analogRead(MAX_SPEED_POTENTIOMETER_PIN); int max_speed_ms = map(rotate_value, 0, 1023, ESC_NEUTRAL_POSITION, PEDAL_MAX_THROTTLE); // Расчет текущей скорости с учетом разгона - int pedal_esc_state = PEDAL_SHIFT_FROM_NEUTRAL + map(pedal_state, 0, ACCELERATION_SPEED, ESC_NEUTRAL_POSITION, max_speed_ms); + int pedal_esc_state = PEDAL_SHIFT_FROM_NEUTRAL + map(pedal_state, PEDAL_MIN, PEDAL_MAX, ESC_NEUTRAL_POSITION, max_speed_ms); if (DEBUG) { Serial.print("Pedal is pressed; state: "); @@ -67,12 +66,9 @@ void replicate_receiver_for_esc() { esc.writeMicroseconds(pedal_esc_state); } else { // Сброс состояния педали и установка нейтрали - pedal_state = 0; esc.writeMicroseconds(ESC_NEUTRAL_POSITION); } } else { - // Если приёмник не в нейтрали, используем его сигнал напрямую - pedal_state = 0; if (DEBUG) { Serial.print("Receiver ESC channel 2:"); Serial.println(current_receiver_esc_value); @@ -81,6 +77,12 @@ void replicate_receiver_for_esc() { } } +void pedal_test() { + int pedal_state = analogRead(PEDAL_ANALOG_PIN); + Serial.print("pedal_state: "); + Serial.println(pedal_state); +} + void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); @@ -88,10 +90,8 @@ void setup() { // Настройка приёмника pinMode(RECEIVER_ESC_PIN, INPUT); - // Настройка педали - pedal_button.attach(PEDAL_PIN, INPUT_PULLUP); - pedal_button.interval(5); - pedal_button.setPressedState(LOW); + // Настройка аналоговой педали + pinMode(PEDAL_ANALOG_PIN, INPUT); // Настройка потенциометра pinMode(MAX_SPEED_POTENTIOMETER_PIN, INPUT); @@ -102,10 +102,10 @@ void setup() { // Подключение задачи репликации сигнала (выполняется каждые 40 мс) OS.attach(0, replicate_receiver_for_esc, 40); + //OS.attach(0, pedal_test, 240); } void loop() { OS.tick(); // Выполнение задач планировщика - pedal_button.update(); // Обновление состояния педали delay(OS.getLeft()); // Ожидание до следующей задачи } \ No newline at end of file