Помогите с кодом для кнопки, подключенной к 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);

}


}

, 👍-1

Обсуждение

перестаньте думать: «Я хочу, чтобы состояние кнопки изменилось после того, как она была нажата в течение нескольких секунд» ........ начните думать: «Я хочу, чтобы состояние переменной изменилось, когда кнопка нажата и Я хочу, чтобы состояние переменной оставалось неизменным в течение нескольких секунд`, @jsotola


1 ответ


0

Вам нужно делать разные вещи:

Вам нужно изменить свою логику, чтобы не использовать задержку. Выполните поиск по «Arduino Blink Without Delay», чтобы найти примеры выполнения действий по времени с помощью millis() вместо использования задержки.

Затем вам нужно настроить логику таким образом, чтобы двигатель запускался, когда пользователь нажимает кнопку, и останавливался, когда либо пользователь отпускал кнопку, либо по прошествии достаточного времени.

,