Проблема со скетчем

oktu
Offline
Зарегистрирован: 16.01.2019

Добрый день.

Собрана простая схема подключения светодиода (9 пин) через кнопку (2 пин). Предполагалось: нажал кнопку - загрелось, отпустил - погасло.

Вот скетч:

const int LED = 9;
const int button = 2;
int buttonState = LOW;

void setup() {

  pinMode (LED, OUTPUT);
  pinMode (button, INPUT);

}

void loop() {

 buttonState = digitalRead(button);

 if(buttonState == HIGH){
  digitalWrite(LED, HIGH);
 }else {
  digitalWrite(LED, LOW);
 }  

}

Но по факту работает так: подал питание, диод загорелся, НАЖАЛ КНОПКУ - ДИОД ПОГАС, ОТПУСТИЛ КНОПКУ - ОПЯТЬ ЗАГОРЕЛСЯ. 

Ведь по идее, когда кнопка нажата на 2 pin приходит HIGH, и диод должен тоже загораться.... А работает с точностью наоборот.

Я, честно сказать, растерян, прошу помощи

PRC
Offline
Зарегистрирован: 03.02.2019

Обычно кнопка замыкает на землю, т.е. при нажатии приходит как раз 0. Во вторых смотря как подключен диод. Он может и 1 и 0 включаться. В общем нужна схема.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
const int ledPin = 9;
const int btnPin = 2;
int state = 0;

void setup() {
  pinMode (ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  pinMode (btnPin, INPUT_PULLUP);
}

void loop() {
  switch (state) {
    case 0:
      if (!digitalRead(btnPin)) {
        delay(100);
        state = 1;
        digitalWrite(ledPin, HIGH);
      }
      break;
    case 1:
      if (digitalRead(btnPin)) {
        delay(100);
        state = 2;
      }
      break;
    case 2:
      if (!digitalRead(btnPin)) {
        delay(100);
        state = 3;
        digitalWrite(ledPin, LOW);
      }
      break;
    case 3:
      if (digitalRead(btnPin)) {
        delay(100);
        state = 0;
      }
      break;
  }
}