Тест кнопки в симуляторе Arduino: проверяем без платы
Плата в пути, кружок завтра, а проверить кнопку хочется сегодня — сцену знаю на себе: мой первый стенд собрался на кухонном столе за месяц до заказа с Uno. Хорошая новость: кнопка — та деталь, чья логика целиком проверяется в браузере. Нужны схема из кнопки и провода, скетч на десяток строк и монитор порта вместо вольтметра. Теория чтения пина разобрана в уроке про digitalRead и первую кнопку — здесь же методика теста: что нажимать, что смотреть в мониторе и где кончается симуляция.
Всё нижеописанное работает в браузерном симуляторе без установки и регистрации: периферия подхватывается по коду — упомянули пин 2 в скетче, и кнопка встала на стенд сама. Тестовый скетч переносится на настоящую Uno без правок: INPUT_PULLUP и digitalRead — стандартные функции любой платы.
Схема теста: две детали и ноль пайки
Тестовая схема та же, что и на живой макетке: кнопка между пином 2 и GND, подтяжка встроенная, внешний резистор не нужен. В свободном состоянии внутренняя подтяжка тянет вход к 5 В, и digitalRead видит HIGH; нажатие замыкает пин на землю — читается LOW. Инвертированная логика путает каждого второго новичка, поэтому в тесте я печатаю в монитор слово целиком, а не голую цифру: путаница нулей и единиц исчезает сама. Железные варианты с внешними резисторами разобраны в материале про подключение кнопки — он в блоке ссылок внизу, здесь важнее, что в браузере схема собирается за минуту.
| Состояние кнопки | digitalRead() | Что видно в мониторе |
|---|---|---|
| Отпущена | HIGH (1) | тишина |
| Нажата | LOW (0) | строка «nazhatie #N» |
| Зажата три секунды | LOW всё время | одна строка: фронт, а не поток |
// Тест кнопки: пин 2, встроенная подтяжка, счёт фронтов.const byte BTN = 2;unsigned long nazhatij = 0; // сколько нажатий засчитаноbool derzhali = false; // кнопка была зажата на прошлом проходе void setup() { pinMode(BTN, INPUT_PULLUP); // подтяжка к 5 В внутри платы Serial.begin(9600); Serial.println("Test knopki: nazhimajte, monitor pokazhet schyot");} void loop() { bool nazhata = (digitalRead(BTN) == LOW); // при подтяжке нажатие = LOW if (nazhata && !derzhali) { // фронт: только что нажали nazhatij++; Serial.print("nazhatie #"); Serial.println(nazhatij); } derzhali = nazhata; delay(10); // черновая защита от дребезга}Как читать результат. Откройте монитор порта со скоростью 9600 — она совпадает со скетчем. Нажмите кнопку пять раз с паузой в полсекунды: счётчик должен выдать ровно пять строк «nazhatie #1…#5». Затем зажмите кнопку на три секунды и отпустите: строка прибавится одна. Если счётчик бежит сам, без нажатий, — вход не подтянут, проверьте INPUT_PULLUP в pinMode. Подключение монитора без промахов по скорости порта показывает урок про Serial.
Прежде чем рисовать кнопку в любом симуляторе, полезно читать схему глазами: половина затыков «кнопка не работает» — это провод мимо ноги или резистор не на своём месте. Тренажёр ниже даёт условные схемы: опознайте цепь или найдите брак раньше, чем это сделает симулятор.
Соберите цепь по условной схеме: светодиод, резистор, кнопка, земля.
Подгружаем интерактив…
Методика: пять проверок за десять минут
- Одиночное нажатие: счётчик растёт ровно на единицу — логика фронта работает.
- Зажатие на три секунды: строка прибавляется одна, а не тридцать — скетч не путает удержание с потоком.
- Пять нажатий за пять секунд: ни одно не потерялось — опрос в loop() успевает за пальцем.
- Две кнопки на пинах 2 и 3: срабатывают независимо, счётчики не мешают друг другу — пины не конфликтуют.
- Перезапуск стенда: счётчик стартует с нуля, кнопка не «залипла» в нажатом состоянии — старт скетча чистый.
Что покажет симулятор, а что только железо
| Проверка | Симулятор | Настоящая плата |
|---|---|---|
| Логика HIGH/LOW и подтяжка | видно полностью | то же |
| Счёт нажатий и фронты | считает чисто | с дребезгом: 3-7 срабатываний вместо одного |
| Дребезг контактов | не эмулируется | ловится только здесь |
| Наводки и плавающий вход | нет | вход без подтяжки читает воздух |
| Износ кнопки, плохой контакт | нет | кнопка за год теряет чёткость замыкания |
Расшифровка типовых затыков
- Счётчик молчит при нажатиях — кнопка в стенде стоит не на том пине: сверьте номер в скетче и в карточке устройства.
- «Nazhatie» сыпется потоком без нажатий — в pinMode стоит INPUT вместо INPUT_PULLUP: вход висит в воздухе.
- Одно нажатие считается как два — тест дошёл до железа: поднимите паузу защиты до 20-50 мс.
- Монитор пуст при живом счётчике — не открыт монитор порта или скорость не 9600 бод.
Когда пять проверок позади, у кнопки два направления: превращать нажатие в переключатель режимов — это урок про кнопку-тумблер, — или собрать её в первую настоящую схему со светодиодом, которую ведёт урок про макетку из блока ссылок. Приём из моего теста — фронт, защита, инкремент — потом же считает обороты энкодера и литры счётчика воды: выучили на кнопке, переиспользуете везде.