Конечно, я помогу вам с этим проектом! Для этой задачи нам понадобятся:
Arduino
Кнопка
Коллекторный мотор
Н-мост (например, L298N или L293D) для управления направлением вращения мотора
Ниже приведен пример кода для реализации этой задачи. Он предполагает использование одного входа для кнопки, одного выхода для управления направлением и одного выхода для управления питанием мотора.
Схема подключения
Подключите один вывод кнопки к цифровому пину Arduino (например, D2) и другой вывод к GND.
Подключите выводы мотора к выходам Н-моста.
Подключите входы Н-моста к цифровым пинам Arduino (например, D3 и D4 для управления направлением, D5 для включения питания мотора).
Подключите питание Н-моста и мотора к внешнему источнику питания.
// Определяем пины
const int buttonPin = 2; // Пин для кнопки
const int motorPin1 = 3; // Пин для управления направлением мотора (прямое направление)
const int motorPin2 = 4; // Пин для управления направлением мотора (обратное направление)
const int enablePin = 5; // Пин для включения мотора
int buttonState = 0; // Переменная для хранения состояния кнопки
int motorDirection = 1; // Переменная для хранения направления вращения (1 - вперед, -1 - назад)
unsigned long previousMillis = 0; // Переменная для хранения времени начала работы мотора
const unsigned long motorRunTime = 5000; // Время работы мотора (в миллисекундах)
void setup() {
// Настраиваем пины
pinMode(buttonPin, INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(enablePin, OUTPUT);
// Инициализируем мотор выключенным
digitalWrite(enablePin, LOW);
}
void loop() {
// Читаем состояние кнопки
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
// Если кнопка нажата, начинаем вращение мотора
previousMillis = millis(); // Запоминаем время начала работы мотора
if (motorDirection == 1) {
// Вращение вперед
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
} else {
// Вращение назад
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
}
digitalWrite(enablePin, HIGH); // Включаем мотор
// Ждем окончания времени работы мотора
while (millis() - previousMillis < motorRunTime) {
// Ничего не делаем, ждем
}
// Останавливаем мотор
digitalWrite(enablePin, LOW);
// Меняем направление вращения на противоположное
motorDirection = -motorDirection;
// Ждем, пока кнопка будет отпущена, чтобы избежать многократных срабатываний
while (digitalRead(buttonPin) == HIGH) {
// Ничего не делаем, ждем
}
}
}
Объяснение кода
В функции setup() мы настраиваем пины для кнопки, управления мотором и включения мотора.
В функции loop() мы постоянно проверяем состояние кнопки.
Если кнопка нажата, мы запоминаем текущее время и начинаем вращение мотора в текущем направлении.
Мотор вращается в течение заданного времени (5 секунд), после чего останавливается.
Мы меняем направление вращения на противоположное и ждем, пока кнопка будет отпущена, чтобы избежать многократных срабатываний.
Этот код можно доработать в зависимости от конкретных требований и условий вашего проекта.