Управление DC двигателем кнопками

Привествую. Я новичок по ардуино но очень хочется собирать робот с двумя двигателем пожалуйста помогите писать код для этого:

Ардуино уно

2 дс двигатель 12 воль

Акб 12.в

2 драйвер BTS7960

И 4 кнопки

Задача такая чтобы робот двигался с кнопками перед назад направо налево

Спасибо!

4 светодиода зажигать через ардуино по нажатию кнопок на пульте умеете?

1 лайк

[quote=“Sunat, post:1, topic:18168”]
Привествую. Я новичок по ардуино но очень хочется собирать робот с двумя двигателем пожалуйста помогите писать код для этого:

Ардуино уно

2 дс двигатель 12 воль

Акб 12.в

2 драйвер BTS7960

И 4 кнопки

Задача такая чтобы робот двигался с кнопками перед назад направо налево

Спасибо!

// Определение пинов для двигателей (через драйвер L298N)
int enA = 9; // ШИМ-пины для скорости двигателя A (например, левого)
int in1A = 8; // Управляющий пин 1 для двигателя A
int in2A = 7; // Управляющий пин 2 для двигателя A

int enB = 3; // ШИМ-пины для скорости двигателя B (например, правого)
int in1B = 5; // Управляющий пин 1 для двигателя B
int in2B = 4; // Управляющий пин 2 для двигателя B

// Определение пинов для кнопок
int forwardButton = 10; // Кнопка “Вперед”
int backwardButton = 11; // Кнопка “Назад”
int leftButton = 12; // Кнопка “Влево”
int rightButton = 13; // Кнопка “Вправо”

void setup() {
// Инициализация пинов двигателей как выходов
pinMode(enA, OUTPUT);
pinMode(in1A, OUTPUT);
pinMode(in2A, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1B, OUTPUT);
pinMode(in2B, OUTPUT);

// Инициализация пинов кнопок как входов с подтягивающим резистором
pinMode(forwardButton, INPUT_PULLUP);
pinMode(backwardButton, INPUT_PULLUP);
pinMode(leftButton, INPUT_PULLUP);
pinMode(rightButton, INPUT_PULLUP);
}

void loop() {
// Чтение состояния кнопок
int forwardState = digitalRead(forwardButton);
int backwardState = digitalRead(backwardButton);
int leftState = digitalRead(leftButton);
int rightState = digitalRead(rightButton);

// Логика движения
if (forwardState == LOW) { // Если кнопка “Вперед” нажата (LOW при использовании INPUT_PULLUP)
moveForward();
} else if (backwardState == LOW) { // Если кнопка “Назад” нажата
moveBackward();
} else if (leftState == LOW) { // Если кнопка “Влево” нажата
turnLeft();
} else if (rightState == LOW) { // Если кнопка “Вправо” нажата
turnRight();
} else { // Если ни одна кнопка не нажата
stopMotors();
}
}

// Функции управления двигателями
void moveForward() {
// Вперед
digitalWrite(in1A, HIGH);
digitalWrite(in2A, LOW);
digitalWrite(in1B, HIGH);
digitalWrite(in2B, LOW);
// Устанавливаем максимальную скорость
analogWrite(enA, 255);
analogWrite(enB, 255);
}

void moveBackward() {
// Назад
digitalWrite(in1A, LOW);
digitalWrite(in2A, HIGH

Там просто нужно чтобы плавно начал двигаться двигатели. :downcast_face_with_sweat::downcast_face_with_sweat:

А что умеете делать на ардуино?

Элементарный вещи с несколькими сторок кода
С релейм работал. Светодиод. Сервопривод.

У меня тупить голова в условии задача именно в этом
Разделе

// Логика движения
  if (forwardState == LOW) { // Если кнопка "Вперед" нажата (LOW при использовании INPUT_PULLUP)
    moveForward();
  } else if (backwardState == LOW) { // Если кнопка "Назад" нажата
    moveBackward();
  } else if (leftState == LOW) { // Если кнопка "Влево" нажата
    turnLeft();
  } else if (rightState == LOW) { // Если кнопка "Вправо" нажата
    turnRight();
  } else { // Если ни одна кнопка не нажата
    stopMotors();
  }
}

// Функции управления двигателями
void moveForward() {
  // Вперед
  digitalWrite(in1A, HIGH);
  digitalWrite(in2A, LOW);
  digitalWrite(in1B, HIGH);
  digitalWrite(in2B, LOW);
  // Устанавливаем максимальную скорость
  analogWrite(enA, 255);
  analogWrite(enB, 255);

Соберите простейшую схему с одной кнопкой и одним светодиодом.

Научитесь при нажатой кнопке плавно зажигать светодиод. Когда кнопка отпускается, светящийся светодиод плавно затухает.

Пока вы не освоите этот прием на светодиоде, с двигателями вам будет сложно.

И совет: код написанный нейросетью тут не любят - пишите свой.

а так:

 // Устанавливаем максимальную скорость
  analogWrite(enA, 25);
  analogWrite(enB, 25);
  delay(25);
  analogWrite(enA, 50);
  analogWrite(enB, 50);
  delay(25);
  analogWrite(enA, 75);
  analogWrite(enB, 75);
  delay(25);
  analogWrite(enA, 125);
  analogWrite(enB, 125);
  delay(35);
  analogWrite(enA, 255);
  analogWrite(enB, 255);

1 лайк

“Делейные” алгоритмы для оперативного управления “роботами” не красивы.

там 100 миллисекунд, слон даже моргнуть не успеет, как вариант каждую миллисекунду поднимать DUTY до 255

Спасибо. Начинаю со светодиодом :handshake::folded_hands:t2: