Кнопка и светодиод
Один вход и один выход: кнопка на D2 с подтяжкой 10 кОм к +5 В, светодиод на D13 через резистор 220 Ом. Отсюда видно, почему нажатая кнопка читается как LOW.
Программа
// Кнопка и светодиод — вход, выход и одна проверка между ними.
//
// Кнопка подключена «на землю» с подтяжкой 10 кОм к +5 В:
// отпущена — на D2 висит +5 В через резистор → digitalRead даёт HIGH;
// нажата — вывод замкнут на землю → LOW.
// Поэтому условие «нажата» пишется как == LOW, и это нормально.
const int BTN = 2;
const int LED = 13;
void setup() {
pinMode(BTN, INPUT);
pinMode(LED, OUTPUT);
Serial.begin(9600);
// Небольшая пауза перед первым чтением: пока питание и подтяжка не
// установились, на входе может оказаться что угодно.
delay(50);
Serial.println(digitalRead(BTN) == LOW ? "кнопка нажата" : "кнопка отпущена");
}
void loop() {
int now = digitalRead(BTN);
digitalWrite(LED, now == LOW ? HIGH : LOW);
// Печатаем только смену состояния, иначе монитор порта заливает одним и тем же.
// static — переменная объявляется ОДИН раз и живёт между вызовами loop();
// обычная локальная обнулялась бы каждый проход, и прошлое состояние помнить
// было бы негде. Строка с «=» тоже выполняется один раз, на первом проходе,
// поэтому was сразу получает настоящее состояние кнопки, а не выдумку.
static int was = digitalRead(BTN);
if (now != was) {
was = now;
Serial.println(now == LOW ? "нажата" : "отпущена");
}
delay(20); // заодно гасит дребезг контактов
}
Схема примера появится, когда загрузится страница: её собирает и считает движок цепей.