Arduino ждет, пока кнопка не будет отпущена для активации

Я довольно новичок в arduino, и самостоятельно я пытаюсь перемещать сервопривод влево и вправо с помощью 2 кнопок. По большей части у меня это работает, однако, когда я удерживаю нажатой кнопку, ничего не происходит, и когда я, наконец, отпускаю сервопривод, он перемещается на определенную величину в зависимости от того, как долго я удерживал кнопку нажатой. Однако я бы хотел, чтобы сервопривод двигался, когда кнопка удерживается нажатой. Сервопривод также иногда движется странно и спорадически. Я думаю, что это, скорее всего, логическая ошибка в коде, но я не могу в этом разобраться. Не мог бы кто-нибудь, пожалуйста, сказать мне, что, по их мнению, я сделал не так? Спасибо.

код:

#include <Servo.h>
Servo servo;

#define right 9
#define left 8

int angle = 90;
int angStep = 5;



void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(right, INPUT_PULLUP);
  pinMode(left, INPUT_PULLUP);
  servo.attach(2);
  servo.write(angle);
  Serial.print("Begin");
  Serial.print('\n');
  Serial.print(angle);
  Serial.print(angle);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (digitalRead(left) == HIGH && angle < 180){
    angle += angStep;
    Serial.print(angle);
    Serial.print('\n');
    servo.write(angle);
    delay(50);
  }

  if (digitalRead(right) == HIGH && angle > 0){
    angle -= angStep;
    Serial.print(angle);
    Serial.print('\n');
    servo.write(angle);
    delay(50);
  }
}

, 👍-1

Обсуждение

проверьте противоположный уровень сигнала на выводе кнопки, @jsotola

Подключите "выходные" сигналы (которые поступают на вывод Arduino 8/9) вместо этого к резистору и светодиоду, чтобы увидеть, ведет ли он себя так, как вы ожидаете. Это исключает возможность возникновения проблем с программным или аппаратным обеспечением., @Michel Keijzers


1 ответ


2

Я думаю, это потому, что вы используете подтягивающий резистор, поэтому он постоянно ВЫСОКИЙ, а не постоянно НИЗКИЙ. Попробуйте изменить ВЫСОКИЙ и НИЗКИЙ уровни на противоположные.

,

Я попытался поменять местами HIGH и LOW, но ничего не произошло, поэтому я просто переключился обратно на high и изменил input_pullup на just input . Теперь сервопривод движется, но совершенно случайным образом, и я не знаю, почему это так непоследовательно., @john papp