Я пытаюсь управлять сервоприводом нажатием кнопки, но это не работает ПОМОГИТЕ
Я новичок в Arduino и следую этому руководству: https://www.youtube.com/watch ?v=T2HMJiy9b_I, но проблема в том, что сервопривод просто продолжает двигаться вперед и назад сам по себе, а кнопка ничего не делает при нажатии, пожалуйста, помогите.
Код:
#include <Servo.h>
Servo myservo; // создаем сервообъект для управления сервоприводом
#define servoPin 3 //~
#define pushButtonPin 2
int angle =90; // начальный угол для сервопривода
int angleStep =5;
const int minAngle = 50;
const int maxAngle = 110;
int buttonPushed =0;
void setup() {
// Демонстрация серво кнопки от Robojax.com
Serial.begin(9600); // установить серийный номер
myservo.attach(servoPin); // прикрепляем сервопривод к контакту 3 к объекту сервопривода
pinMode(pushButtonPin,INPUT_PULLUP);
Serial.println("Robojax Servo Button ");
}
void loop() {
if(digitalRead(pushButtonPin) == LOW){
buttonPushed = 1;
}
if( buttonPushed ){
// изменить угол для следующего раза в цикле:
angle = angle + angleStep;
// реверс направления движения на концах угла:
if (angle <= minAngle || angle >= maxAngle) {
angleStep = -angleStep;
buttonPushed = 0;
}
myservo.write(angle); // перемещаем сервопривод на нужный угол
Serial.print("Moved to: ");
Serial.print(angle); // напечатать угол
Serial.println(" degree");
delay(100); // ждем пока сервопривод туда доберется
}
}
@SABLE MOTION, 👍0
Обсуждение1 ответ
Это условие ниже никогда не выполняется, поскольку подразумевается логическое сравнение:
if( buttonPushed ){
и buttonPushed объявляется как :
int buttonPushed =0;
Правильное сравнение должно быть допустимым:
if( buttonPushed == 1)
{
// Сделать что-нибудь
}
Кроме того, кнопки нуждаются в надлежащем устранении дребезга, иначе push-событие будет иметь незаметные результаты:
https://dduino.blogspot.com/2012/03/arduino-button-debouncing .html
C++ будет рассматривать любое ненулевое значение как истинное, а 0 — как ложное. Совершенно законно использовать int внутри оператора if таким образом. Если вы хотите, я могу опубликовать демонстрационный код, чтобы доказать это. Это не лучший стиль кодирования, но он не приведет к сбою., @Delta_G
Оператор if работает с целыми числами!, @Sim Son
Mea culpa вы правы: https://www.arduino.cc/reference/en/language/variables/constants/constants/, @skourkos
- Контроллер радиоуправляемой машины с использованием библиотеки RC-switch
- Попытка переместить серводвигатель с помощью 3 кнопок
- Arduino ждет, пока кнопка не будет отпущена для активации
- Почему мой серводвигатель всегда включен?
- Имитация нажатия кнопки с помощью последовательного монитора для запуска сервопривода
- Нажмите кнопку для подачи питания на сервопривод
- Как добавить задержку, закрыть сервопривод и снова перейти к началу?
- Пусть серво вращается когда файл был загружен на веб страницу
Я разместил код: https://robojax.com/learn/arduino/?vid=robojax_Servo_PB2_move_one_direction. Мне нужна помощь с кодом, чтобы при нажатии кнопки сервопривод поворачивался от 0 до 180 градусов и останавливался, но кнопка не реагировала, а сервопривод продолжал двигаться вперед и назад., @SABLE MOTION
Отредактируйте свой вопрос. Выберите весь код и нажмите кнопку форматирования кода
{}
. Ваш код не читается, как опубликовано., @Duncan Cхорошо, как насчет сейчас, @SABLE MOTION
Как только вы нажмете кнопку один раз, и buttonPushed станет равным 1, сервопривод будет двигаться вечно, потому что ничто никогда не возвращает buttonPushed в 0. Вам нужно еще, чтобы установить его обратно в 0., @Delta_G
извините, но я действительно не знаю, как это сделать. :(, @SABLE MOTION
Также вы должны использовать подтягивающий резистор, если это еще не сделано., @Michel Keijzers
На самом деле этот код устанавливает buttonPushed в 0, когда угол достигает одного из пределов. Из этого кода я ожидаю, что сервопривод перейдет к одному из своих пределов и остановится, если вы нажмете кнопку в течение очень короткого времени. Пока вы удерживаете кнопку нажатой, я ожидаю, что сервопривод будет двигаться вперед и назад., @Duncan C
Похоже, что кнопка подключена через контакт к земле и использует режим INPUT_PULLUP на контакте. Это должно сработать. Пока вы удерживаете кнопку, сервопривод должен двигаться вперед и назад. Когда вы отпускаете кнопку, она должна останавливаться почти сразу (в течение 1/10 секунды)., @Duncan C
я разместил некоторый код, который показывает, как определить, что кнопка нажата в тот момент, когда вы ее нажимаете, но он не продолжает обнаруживать нажатие кнопки, если вы удерживаете кнопку.... https://arduino.stackexchange.com/questions /74876/последовательность перезапуска неопиксельного стика с помощью кнопки в любое время/74949#74949, @jsotola