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);
}
}
@john papp, 👍-1
Обсуждение1 ответ
Я думаю, это потому, что вы используете подтягивающий резистор, поэтому он постоянно ВЫСОКИЙ, а не постоянно НИЗКИЙ. Попробуйте изменить ВЫСОКИЙ и НИЗКИЙ уровни на противоположные.
Я попытался поменять местами HIGH и LOW, но ничего не произошло, поэтому я просто переключился обратно на high и изменил input_pullup на just input . Теперь сервопривод движется, но совершенно случайным образом, и я не знаю, почему это так непоследовательно., @john papp
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Как перезапустить счетчик в программе с помощью кнопки в настройке LDR Tripwire
- Удерживайте кнопку/нажмите кнопку/нажмите кнопку
- Определения целочисленных массивов: длина
- Нет функции сопоставления для вызова 'DS3231 (const uint8_t &, const uint8_t &)
- Попытка переместить серводвигатель с помощью 3 кнопок
- Считывание данных нескольких датчиков из текстового файла, расположенного на SD-карте в Arduino/ESP32
- Проблемы с IP-адресом esp8266
проверьте противоположный уровень сигнала на выводе кнопки, @jsotola
Подключите "выходные" сигналы (которые поступают на вывод Arduino 8/9) вместо этого к резистору и светодиоду, чтобы увидеть, ведет ли он себя так, как вы ожидаете. Это исключает возможность возникновения проблем с программным или аппаратным обеспечением., @Michel Keijzers