
Для сообщения контроллеру о событиях во внешнем мире (въехали в стену, пользователь чего-то хочет и т.п.) служат датчики — а самый простой из них — кнопка.
Схема включения может быть такой:

При отпущенной кнопке будет низкий уровень (лог.«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);
Попробуйте.
Но правильнее, всё же, с внешним — внутренний резистор довольно высокоомный и в случае сильных помех-наводок или большой длинны проводов, может ловит случайные нажатия.
Комментарии (0)
RSS свернуть / развернутьТолько зарегистрированные и авторизованные пользователи могут оставлять комментарии.