Запустить двигатель постоянного тока с помощью кнопки, используя Arduino Uno
Я пытаюсь запустить один двигатель постоянного тока с помощью кнопки. Что я хочу, так это то, что когда я нажимаю кнопку, мотор начинает работать в соответствии с моей потребностью, а когда я нажимаю снова, и только тогда, он останавливается, иначе он продолжит работать. Я пробовал с кодом ниже. Он работает, но проблема в том, что когда я нажимаю кнопку "Стоп", он не останавливается.
const int ENA_PIN = 6; // контакт Arduino, подключенный к контакту EN1 L298N
const int IN1_PIN = 7; // контакт Arduino подключен к контакту IN1 L298N
const int IN2_PIN = 8; // контакт Arduino подключен к контакту IN2 L298N
const int BUTTON_PIN = 2;
bool buttonState = false;
bool buttonBefore = false;
bool pressed = false;
// функция настройки запускается один раз, когда вы нажимаете сброс или питание платы
void setup() {
// инициализируем цифровые контакты как выход, а контакт кнопки как вход
pinMode(BUTTON_PIN, INPUT_PULLUP);
// задержка (100);
pinMode(ENA_PIN, OUTPUT);
pinMode(IN1_PIN, OUTPUT);
pinMode(IN2_PIN, OUTPUT);
}
// функция цикла запускается снова и снова навсегда
void loop() {
buttonState = digitalRead(BUTTON_PIN);
if (buttonState > buttonBefore) {
pressed = !pressed;
}
if (pressed) {
digitalWrite(IN1_PIN, HIGH); // управляющий мотор А вращается по часовой стрелке
digitalWrite(IN2_PIN, LOW); // управляющий мотор А вращается по часовой стрелке
analogWrite(ENA_PIN, 255); // контролируем скорость
delay(2000); // вращать с максимальной скоростью 2 секунды по часовой стрелке
// изменить направление
digitalWrite(IN1_PIN, LOW); // управляющий двигатель А вращается против часовой стрелки
digitalWrite(IN2_PIN, HIGH); // управляющий двигатель А вращается против часовой стрелки
delay(2500); // вращать с максимальной скоростью 2,5 секунды против часовой стрелки
analogWrite(ENA_PIN, 255); // контролируем скорость
}
buttonBefore = buttonState;
}
@Kishan Boghara, 👍0
Обсуждение1 ответ
▲ 0
const int ENA_PIN = 6; // контакт Arduino, подключенный к контакту EN1 L298N
const int IN1_PIN = 7; // контакт Arduino подключен к контакту IN1 L298N
const int IN2_PIN = 8; // контакт Arduino подключен к контакту IN2 L298N
const int BUTTON_PIN = 2;
int motorState = 0; // Двигатель изначально выключен
int buttonNew;
int buttonOld = 1;
//инт дт = 100;
// функция настройки запускается один раз, когда вы нажимаете сброс или питание платы
void setup() {
Serial.begin (9600);
// инициализируем цифровые контакты как выход, а контакт кнопки как вход
pinMode(BUTTON_PIN, INPUT);
// задержка (100);
pinMode(ENA_PIN, OUTPUT);
pinMode(IN1_PIN, OUTPUT);
pinMode(IN2_PIN, OUTPUT);
}
// функция цикла запускается снова и снова навсегда
void loop() {
buttonNew = digitalRead(BUTTON_PIN); //контакт кнопки будет считывать новое состояние кнопки
// мы сделаем оператор if, чтобы состояние кнопки всегда менялось с 0 на 1
if(buttonOld == 0 && buttonNew == 1){
if(motorState == 0){
digitalWrite(IN1_PIN, HIGH); // управляющий мотор А вращается по часовой стрелке
digitalWrite(IN2_PIN, LOW); // управляющий мотор А вращается по часовой стрелке
analogWrite(ENA_PIN, 255); // контролируем скорость
delay(2000); // вращать с максимальной скоростью 2 секунды по часовой стрелке
// изменить направление
digitalWrite(IN1_PIN, LOW); // управляющий двигатель А вращается против часовой стрелки
digitalWrite(IN2_PIN, HIGH); // управляющий двигатель А вращается против часовой стрелки
analogWrite(ENA_PIN, 255); // контролируем скорость
delay(2500); // вращать с максимальной скоростью 2,5 секунды против часовой стрелки
motorState = 1;
}
else{
digitalWrite(IN1_PIN, LOW);
digitalWrite(IN2_PIN, LOW);
analogWrite(ENA_PIN, 0);
motorState = 0;
}
}
buttonOld = buttonNew;
// задержка (дт); //чтобы убрать дребезг
}
,
@Kishan Boghara
Смотрите также:
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Почему вы используете задержки, когда вы не хотите делать что-либо по времени с двигателем? Задержки делают вашу кнопку невосприимчивой. Пожалуйста, взгляните на функцию
millis()
и примерBlinkWithoutDelay
в Arduino IDE., @chrislдобавьте переменную состояния... назовите ее как-нибудь вроде motorOn... кнопка устанавливает свое значение... мотор реагирует на свое значение, @jsotola
почему вы ожидаете, что двигатель остановится? ... ваша программа не содержит никакого кода, который останавливает двигатель, @jsotola
Как я это делаю, когда кнопка нажата и отпущена, дополняет флаг состояния двигателя и включает/выключает двигатель в соответствии с флагом. Это в основном то, что сказал jsotola. Обязательно устраните задержки, как упомянул Крис., @Gil
хорошо. Спасибо за ответ. Я попробовал это с кодом любви, и теперь он работает., @Kishan Boghara
В этом новом коде, когда я нажимаю кнопку, двигатель запускается и завершает цикл по часовой стрелке, против часовой стрелки, который я хочу, и останавливается. проблема в том, что когда я хочу начать снова, мне приходится нажимать кнопку 2 раза. какое-нибудь решение, чтобы запустить двигатель с одним нажатием снова?, @Kishan Boghara