Кнопки


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

При отпущенной кнопке будет низкий уровень (лог.»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);

Попробуйте.
Но правильнее, всё же, с внешним — внутренний резистор довольно высокоомный и в случае сильных помех-наводок или большой длинны проводов, может ловит случайные нажатия.


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение