Помогите с кодом для кнопки, подключенной к 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
- Библиотека программных материалов для плат SAMD
- Определение относительно точной скорости с помощью ИДУ
перестаньте думать: «Я хочу, чтобы состояние кнопки изменилось после того, как она была нажата в течение нескольких секунд» ........ начните думать: «Я хочу, чтобы состояние переменной изменилось, когда кнопка нажата и Я хочу, чтобы состояние переменной оставалось неизменным в течение нескольких секунд`, @jsotola