Для сообщения контроллеру о событиях во внешнем мире (въехали в стену, пользователь чего-то хочет и т.п.) служат датчики — а самый простой из них — кнопка.
Схема включения может быть такой:
При отпущенной кнопке будет низкий уровень (лог.»0″, LOW), при нажатой — появится высокий (лог.»1″, HIGH)
Скетч для выдачи в COM-порт состояния кнопки:
//кнопка подключена к цифровому пину #2 const int buttonPin = 2; // назавём этот пин человеко-понятно, согласно назначению // заведём переменную для хранения состояния кнопки int buttonState = 0; //и сразу запишем туда "0" - не нажата void setup() { Serial.begin(9600); // включим COM-порт pinMode(buttonPin, INPUT); //и настроем наш кнопочный пин, как вход } void loop(){ buttonState = digitalRead(buttonPin); //читаем состояние кнопочного пина if (buttonState == HIGH) { //и если там лог.1 (кнопка нажата) Serial.println("1"); //печатаем это дело в порт } else{ //в противном случае Serial.println("0"); // напишем в порт нолик } delay(200); //что бы значения не летели в порт как сумашедшие - сделаем задержку }
Соберём схему на макетке:
При запуске «Монитора Порта» (Serial Monitor-а), увидим приблизительно следующее:
Можно включить кнопку и наоборот:
Теперь не нажатая кнопка у нас даёт HIGH, нажатая — LOW
Скетч можно и не переписывать, но результат будет обратный. А ноль при нажатой кнопке, несколько странно=)
//кнопка так же подключена к цифровому пину #2, но уже притянута к земле const int buttonPin = 2; // обзавём пин // переменную состояния кнопки инициализируем уже "1" //- теперь она соответствует не нажатому состоянию int buttonState = 1; void setup() { Serial.begin(9600); // включим COM-порт pinMode(buttonPin, INPUT); //и настроим наш кнопочный пин, как вход } void loop(){ buttonState = digitalRead(buttonPin); //читаем состояние кнопки if (buttonState == LOW) { //и если там лог.0 (кнопка нажата) Serial.println("1"); //печатаем это дело в порт } else{ //в противном случае Serial.println("0"); // напишем в порт нолик } delay(200); //задержка }
На макетке:
Окно монитора порта теперь будет выглядеть так же как в первом примере.
Кстати, внешний резистор можно и не подключать, а просто включить подтяжку порта к питанию:
pinMode(buttonPin, INPUT_PULLUP);
Попробуйте.
Но правильнее, всё же, с внешним — внутренний резистор довольно высокоомный и в случае сильных помех-наводок или большой длинны проводов, может ловит случайные нажатия.