Помогите с кодом для кнопки, подключенной к adafruit motorshield v2
Может ли кто-нибудь помочь мне с кодом? Я использую arduino uno с моторным щитом adafruit v2, установленным сверху. Я использую кнопку и один двигатель постоянного тока, и я хочу, чтобы состояние кнопки изменилось после того, как она была нажата в течение нескольких секунд. То есть я хочу, чтобы двигатель перестал работать, даже если кнопка все еще нажата.
Вот код, который я использую:
/*
Это тестовый скетч для собранного Adafruit Motor Shield для Arduino v2.
Это не будет работать с моторными шилдами v1.x! Только для v2 со встроенным ШИМ
контроль
Для использования с Adafruit Motor Shield v2
----> http://www.adafruit.com/products/1438
*/
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "утилита/Adafruit_MS_PWMServoDriver.h"
// Создаем объект моторного щита с адресом I2C по умолчанию
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Или создайте его с другим адресом I2C (скажем, для стекирования)
// Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61);
// Выберите «порт» M1, M2, M3 или M4. В этом случае М1
Adafruit_DCMotor *myMotor = AFMS.getMotor(1);
// Вы также можете сделать еще один мотор на порту M2
//Adafruit_DCMotor *myOtherMotor = AFMS.getMotor(2);
// к цифровому выводу 2 прикреплена кнопка. Дайте ему имя:
инт пушкноп = 4;
недействительная установка () {
Серийный.начать(9600); // настраиваем последовательную библиотеку на 9600 бит/с
Serial.println("Adafruit Motorshield v2 - Тест двигателя постоянного тока!");
// сделать контакт кнопки входом:
pinMode (кнопка, ВВОД);
AFMS.начать(); // создаем с частотой по умолчанию 1,6 кГц
//AFMS.begin(1000); // ИЛИ с другой частотой, скажем, 1 кГц
// Установить начальную скорость от 0 (выкл.) до 255 (максимальная скорость)
myMotor->setSpeed(150);
myMotor->run(ВПЕРЕД);
// включаем мотор
myMotor->run(RELEASE);
}
недействительный цикл () {
uint8_t я;
// прочитать входной контакт:
int buttonState = цифровое чтение (кнопка);
// вывести состояние кнопки:
Serial.println (состояние кнопки);
задержка (0); // задержка между чтениями для стабильности
если (buttonState==1){
delay(1000);
myMotor->run(ВПЕРЕД);
myMotor->setSpeed(150);
delay(1000);
}
иначе если (buttonState==0){
myMotor->run(ВПЕРЕД);
мой мотор->setSpeed(0);
}
}
@Ólöf, 👍-1
Обсуждение1 ответ
Вам нужно делать разные вещи:
Вам нужно изменить свою логику, чтобы не использовать задержку. Выполните поиск по «Arduino Blink Without Delay», чтобы найти примеры выполнения действий по времени с помощью millis() вместо использования задержки.
Затем вам нужно настроить логику таким образом, чтобы двигатель запускался, когда пользователь нажимает кнопку, и останавливался, когда либо пользователь отпускал кнопку, либо по прошествии достаточного времени.
- Почему Adafruit motor shield не крутит моторы?
- Мой моторный щит сломан?
- Adafruit Motorshield v2.3 не работает
- Как заставить сервопривод вращаться на угол больше 180°
- В чем разница между драйвером двигателя (motor driver) и щитом двигателя?
- Статус выхода 1 ожидаемое первичное выражение перед ']' Arduino
- Задача управления скоростью двигателя постоянного тока с помощью L298N
- Библиотека программных материалов для плат SAMD
перестаньте думать: «Я хочу, чтобы состояние кнопки изменилось после того, как она была нажата в течение нескольких секунд» ........ начните думать: «Я хочу, чтобы состояние переменной изменилось, когда кнопка нажата и Я хочу, чтобы состояние переменной оставалось неизменным в течение нескольких секунд`, @jsotola