Почему моя кнопка всегда возвращается HIGH?
Я пытаюсь понять это уже пару часов, несмотря на то, насколько это должно быть до смешного просто. Я понятия не имею, почему он всегда возвращает 1, даже когда я нажимаю кнопку. Фрицевский скетч:
Мой код:
#include <Servo.h>
#define button 3
Servo myservo1;
Servo myservo2;
Servo myservo3;
char incomingByte = "";
int timer;
int timer2;
int interval;
int numservo = 3;
int press1 = 90;
int letup = 0;
int val = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
myservo1.attach(9);
myservo1.write(0);
myservo2.attach(7);
myservo2.write(0);
myservo3.attach(5);
myservo3.write(0);
pinMode(button, INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
val = digitalRead(button);
Serial.println(val);
//checkerthing();
while (Serial.available() > 0) {
incomingByte = Serial.read();
timer = incomingByte - '0';
Serial.println(timer);
timer2 = timer * 60;
interval = timer2/numservo;
motor1_control(press1, letup, interval);
checkerthing();
motor2control(press1, letup, interval);
checkerthing();
motor3control(press1, letup, interval);
checkerthing();
timer = 0;
timer2 = 0;
interval = 0;
}
}
void checkerthing() {
val = digitalRead(button);
if (val == LOW){
Serial.println("Stopped");
timer = 0;
timer2 = 0;
interval = 0;
}
if (val == HIGH){
Serial.println("Still going");
}
}
void motor1_control(int angle, int originalangle, int lengthoftime){
myservo1.write(angle);
delay(1000);
myservo1.write(originalangle);
delay(lengthoftime * 1000);
}
void motor2control(int angle, int originalangle, int lengthoftime){
myservo1.write(angle);
delay(1000);
myservo1.write(originalangle);
delay(lengthoftime * 1000);
}
void motor3control(int angle, int originalangle, int lengthoftime){
myservo1.write(angle);
delay(1000);
myservo1.write(originalangle);
delay(lengthoftime * 1000);
}
По сути, смысл этого заключается в том, чтобы серводвигатели включались с определенными интервалами, как указано пользователем на последовательном мониторе. Кнопка существует для того, чтобы пользователь мог перезапустить таймер в любой момент кода. Но проблема в том, что я даже не могу заставить его зарегистрировать нажатую кнопку. Он всегда возвращает "ВЫСОКИЙ", что наводит меня на мысль, что с цепями что-то не так. Я пробовал использовать несколько разных методов, но безуспешно. Кто-нибудь может сказать мне, в чем здесь проблема?
Правка: ...Я не до конца вдавил кнопку в макет. Я пойду поплачу немного в углу. А потом вернуться к кодированию, я думаю, лол. Спасибо за ответы.
@Crystal, 👍3
Обсуждение1 ответ
Не нажал на кнопку всю дорогу, лол
это случилось со мной. иногда я забывал включить UNO или подключить USB!!, @ArduinoFan
- Функция random() вообще не случайна
- Условие «если» проблема/вопрос
- Программа счетчик
- Arduino Sleep для экономии заряда батареи - Как подключить его к существующему скетчу
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
Является ли ваш макет одним из разновидностей "split power rail"?, @Majenko
@Majenko нет, это полная мощность, @Crystal
Что ж, если ваша реальная схема совпадает с рисунком, то она должна работать., @Majenko
Вы проверили, что используете правильные клеммы на кнопке, и она правильно контактирует с макетом ?, @Bra1n
Что сказал Бра1н. Я должен проверять эти 4-свинцовые кнопки каждый... каждый... раз... потому что они похожи на разъемы Micro USB; требуется три попытки, чтобы правильно ориентироваться. Проверьте непрерывность, чтобы убедиться, что вы используете правильные провода., @Dave Newton
@Bra1n О боже, я не нажал на кнопку до конца. . Спасибо., @Crystal
@Crystal Для этих кнопок я сглаживаю провода; они поставляются с "шишкой", которая отлично подходит для печатных плат, а не столько для макетных плат-раздавите их плоскогубцами., @Dave Newton
Для людей, у которых есть проблемы с этими переключателями, я видел, что предлагается просто всегда соединять их противоположными (диагональными) углами., @timemage
@DaveNewton Честно говоря, все USB-разъемы имеют 3 стороны..., @Sacha
у вас есть INPUT_PULLUP, поэтому он должен возвращаться ВЫСОКО, если кнопка не подключает штырь к земле, @Juraj
Вы можете попробовать использовать простой провод, чтобы потянуть штырь вниз к земле (подключив его к GND на плате arduino); если это работает, то это проводка или кнопка, если нет, то что-то другое., @frarugi87
- Я не нажимал на кнопку всю дорогу. - Вы можете написать это как ответ и принять его. Это покажет, что она была решена, плюс это предотвратит вечное воскрешение вопроса в ожидании принятого ответа, который никогда не придет., @JRobert
https://meta.stackexchange.com/questions/116101/is-it-ok-to-add-solved-to-the-title-of-a-question, @Dave Newton