Почему моя кнопка всегда возвращается 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);
    
}

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

Правка: ...Я не до конца вдавил кнопку в макет. Я пойду поплачу немного в углу. А потом вернуться к кодированию, я думаю, лол. Спасибо за ответы.

, 👍3

Обсуждение

Является ли ваш макет одним из разновидностей "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


1 ответ


3

Не нажал на кнопку всю дорогу, лол

,

это случилось со мной. иногда я забывал включить UNO или подключить USB!!, @ArduinoFan