Я делаю пистолет с резиновой лентой, но я не могу заставить кнопку работать с моим кодом, чтобы включить сервопривод?

#include <Servo.h>
const int buttonPin = 3;
int buttonState = 0;

Servo myservo;   
void setup() {
    myservo.attach(2);    
    pinMode(buttonPin, INPUT);
}

void loop() {
    buttonState = digitalRead(buttonPin);   
    if (buttonState == HIGH){ myservo.write(90); }   
    else { myservo.write(155); }   
    delay(1000); 
}

, 👍0

Обсуждение

А что именно не работает? Что, по вашему мнению, происходит или не происходит? Чего вы ожидали?, @chrisl

Таким образом, предполагается, что сервопривод перемещается, когда я нажимаю кнопку, но сервопривод просто перемещается взад и вперед случайным образом., @Jonah W

Плавающий ввод. Покажи свою проводку., @Majenko

Вы также можете распечатать buttonState и проверить его значение в последовательном мониторе., @Paul


2 ответа


1

Просто поместите кнопку между контактом 3 и GND и используйте внутренний подтягивающий резистор следующим образом:

#include <Servo.h>
const int buttonPin = 3;
int buttonState = 0;

Servo myservo;   
void setup()
{
    myservo.attach(2);    
    pinMode(buttonPin, INPUT_PULLUP);
}

void loop()
{
    buttonState = digitalRead(buttonPin);
    if(buttonState == LOW)
    {
      myservo.write(90);
    }
    else
    {
      myservo.write(155);
    }   
    delay(1000); 
}
,

0

Есть две проблемы, на которые следует обратить внимание при использовании кнопки:

  • Плавающий вход: => с использованием подтягивающего или подтягивающего резистора, см. раздел Использование подтягивающего/подтягивающего резистора
  • Явление дребезга => Отказ См. устранение дребезга кнопки
,

Поскольку частота импульсов сервопривода составляет около 50 Гц, период синхронизации составляет около 20 мс. Этого более чем достаточно для устранения дребезга кнопок, так что в этом нет необходимости., @the busybee