Педаль заменена на аналог, теперь скорость регулируется плавно
This commit is contained in:
+19
-19
@@ -8,9 +8,15 @@
|
|||||||
#define DEBUG 0 // Флаг отладки (0 - выключен, 1 - включен)
|
#define DEBUG 0 // Флаг отладки (0 - выключен, 1 - включен)
|
||||||
#define ESC_PIN 9 // Пин подключения ESC
|
#define ESC_PIN 9 // Пин подключения ESC
|
||||||
#define RECEIVER_ESC_PIN 5 // Пин подключения приёмника
|
#define RECEIVER_ESC_PIN 5 // Пин подключения приёмника
|
||||||
#define PEDAL_PIN 6 // Пин подключения педали
|
#define PEDAL_PIN 5 // Пин подключения педали
|
||||||
#define MAX_SPEED_POTENTIOMETER_PIN A0 // Пин потенциометра регулировки максимальной скорости
|
#define MAX_SPEED_POTENTIOMETER_PIN A0 // Пин потенциометра регулировки максимальной скорости
|
||||||
|
|
||||||
|
// Аналоговая педаль
|
||||||
|
#define PEDAL_ANALOG_PIN A5
|
||||||
|
#define PEDAL_MIN 175
|
||||||
|
#define PEDAL_MAX 880
|
||||||
|
#define PEDAL_THRESHOLD 30
|
||||||
|
|
||||||
// Константы управления ESC
|
// Константы управления ESC
|
||||||
#define ESC_NEUTRAL_POSITION 1500 // Нейтральное положение ESC (микросекунды)
|
#define ESC_NEUTRAL_POSITION 1500 // Нейтральное положение ESC (микросекунды)
|
||||||
#define ESC_NEUTRAL_POSITION_THRESHOLD 40 // Порог определения нейтрального положения
|
#define ESC_NEUTRAL_POSITION_THRESHOLD 40 // Порог определения нейтрального положения
|
||||||
@@ -21,8 +27,6 @@
|
|||||||
// Создание объектов
|
// Создание объектов
|
||||||
GyverOS<5> OS; // Создание планировщика задач
|
GyverOS<5> OS; // Создание планировщика задач
|
||||||
Servo esc; // Объект для управления ESC
|
Servo esc; // Объект для управления ESC
|
||||||
Bounce2::Button pedal_button = Bounce2::Button(); // Объект для обработки педали
|
|
||||||
int pedal_state = 0; // Состояние педали (для плавного разгона)
|
|
||||||
|
|
||||||
// Функция репликации сигнала с приёмника на ESC
|
// Функция репликации сигнала с приёмника на ESC
|
||||||
void replicate_receiver_for_esc() {
|
void replicate_receiver_for_esc() {
|
||||||
@@ -42,19 +46,14 @@ void replicate_receiver_for_esc() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Обработка нажатия педали
|
// Обработка нажатия педали
|
||||||
if (pedal_button.isPressed()) {
|
int pedal_state = analogRead(PEDAL_ANALOG_PIN);
|
||||||
// Увеличение состояния педали для плавного разгона
|
if (abs(pedal_state - PEDAL_MIN) > PEDAL_THRESHOLD) {
|
||||||
pedal_state++;
|
|
||||||
if (pedal_state > ACCELERATION_SPEED) {
|
|
||||||
pedal_state = ACCELERATION_SPEED;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Чтение настройки максимальной скорости с потенциометра
|
// Чтение настройки максимальной скорости с потенциометра
|
||||||
int rotate_value = analogRead(MAX_SPEED_POTENTIOMETER_PIN);
|
int rotate_value = analogRead(MAX_SPEED_POTENTIOMETER_PIN);
|
||||||
int max_speed_ms = map(rotate_value, 0, 1023, ESC_NEUTRAL_POSITION, PEDAL_MAX_THROTTLE);
|
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) {
|
if (DEBUG) {
|
||||||
Serial.print("Pedal is pressed; state: ");
|
Serial.print("Pedal is pressed; state: ");
|
||||||
@@ -67,12 +66,9 @@ void replicate_receiver_for_esc() {
|
|||||||
esc.writeMicroseconds(pedal_esc_state);
|
esc.writeMicroseconds(pedal_esc_state);
|
||||||
} else {
|
} else {
|
||||||
// Сброс состояния педали и установка нейтрали
|
// Сброс состояния педали и установка нейтрали
|
||||||
pedal_state = 0;
|
|
||||||
esc.writeMicroseconds(ESC_NEUTRAL_POSITION);
|
esc.writeMicroseconds(ESC_NEUTRAL_POSITION);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Если приёмник не в нейтрали, используем его сигнал напрямую
|
|
||||||
pedal_state = 0;
|
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Serial.print("Receiver ESC channel 2:");
|
Serial.print("Receiver ESC channel 2:");
|
||||||
Serial.println(current_receiver_esc_value);
|
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() {
|
void setup() {
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
pinMode(LED_PIN, OUTPUT);
|
pinMode(LED_PIN, OUTPUT);
|
||||||
@@ -88,10 +90,8 @@ void setup() {
|
|||||||
// Настройка приёмника
|
// Настройка приёмника
|
||||||
pinMode(RECEIVER_ESC_PIN, INPUT);
|
pinMode(RECEIVER_ESC_PIN, INPUT);
|
||||||
|
|
||||||
// Настройка педали
|
// Настройка аналоговой педали
|
||||||
pedal_button.attach(PEDAL_PIN, INPUT_PULLUP);
|
pinMode(PEDAL_ANALOG_PIN, INPUT);
|
||||||
pedal_button.interval(5);
|
|
||||||
pedal_button.setPressedState(LOW);
|
|
||||||
|
|
||||||
// Настройка потенциометра
|
// Настройка потенциометра
|
||||||
pinMode(MAX_SPEED_POTENTIOMETER_PIN, INPUT);
|
pinMode(MAX_SPEED_POTENTIOMETER_PIN, INPUT);
|
||||||
@@ -102,10 +102,10 @@ void setup() {
|
|||||||
|
|
||||||
// Подключение задачи репликации сигнала (выполняется каждые 40 мс)
|
// Подключение задачи репликации сигнала (выполняется каждые 40 мс)
|
||||||
OS.attach(0, replicate_receiver_for_esc, 40);
|
OS.attach(0, replicate_receiver_for_esc, 40);
|
||||||
|
//OS.attach(0, pedal_test, 240);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
OS.tick(); // Выполнение задач планировщика
|
OS.tick(); // Выполнение задач планировщика
|
||||||
pedal_button.update(); // Обновление состояния педали
|
|
||||||
delay(OS.getLeft()); // Ожидание до следующей задачи
|
delay(OS.getLeft()); // Ожидание до следующей задачи
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user