Педаль заменена на аналог, теперь скорость регулируется плавно
This commit is contained in:
+19
-19
@@ -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()); // Ожидание до следующей задачи
|
||||
}
|
||||
Reference in New Issue
Block a user