Закрыть
Видеоурок 2. Arduino — кнопки, PWM, функции

Видеоурок 2. Arduino — кнопки, PWM, функции

Сегодня публикую второй видеоурок, посвященный основам работы с Arduino. Этот урок посвящен подключению кнопок для ввода сигналов, PWM-входам Arduino и использованию функций в языке Arduino.

В этом уроке Джереми Блюм подключает к PWM-входу Arduino кнопку, при помощи которой управляет яркостью свечения светодиода.

PWM, сокращение от Pulse-Width Modulation — это широтно-импульсная модуляция. Я планирую посвятить этому отдельную публикацию, поэтому не буду заострять здесь внимание на этом понятии. Просто посмотрите видео.

Для этого урока потребуются:

  • Плата Arduino
  • Кнопка
  • Светодиод
  • 2 резистора
  • Соединительные провода

Итак, смотрим видео.

Часть 1.

 

Часть 2.

Тип boolean — это тип данных, принимающих только два значения. Эти значения 1 или 0 (например для обозначения истинно-ложно, есть сигнал-нет сигнала). В языке Arduino есть константы, принадлежащие типу boolean: HIGH-LOW, TRUE-FALSE. В действительности, HIGH = 1, LOW = 0, TRUE = 1, FALSE = 0.

В примере есть, так называемые, операторы сравнения: == (равно), &&(и), а также логический оператор отрицания !, который «инвертирует» значение, т.е. в данном случае меняет значение ledPin на 0, если оно было равно 1 и устанавливает значение ledPin в 1, если оно было равно 0. Также здесь рассмотрена условная управляющая конструкция if-else.

Код с комментариями ко второму видео

const int LED=9;          // Светодиод подключаем к 9 выводу
const int BUTTON=2;       // Кнопка подключена ко 2 выводу
boolean lastButton = LOW; // Предыдущее состояние кнопки

boolean currentButton=LOW; // Текущее состояние кнопки

boolean ledOn=false;       // Текущее состояние светодиода

void setup() {
 pinMode(LED, OUTPUT);     // Пин со светодиодом в режиме выхода
 pinMode(BUTTON, INPUT);   // Пин с кнопкой в режиме входа
}

// Функция для устранения дребезга
// принимает в качестве аргумента предыдущее состояние кнопки
// и выдает фактическое
boolean debounce(boolean last) {
 boolean current=digitalRead(BUTTON); // считываем состояние кнопки
 // если изменилось...
 if (last != current) {
  delay(5);                       // Ждем 5 мс
  current=digitalRead(BUTTON);    // Считываем состояние кнопки
  return current;                // Возвращаем состояние кнопки
 }
}
void loop() {
  currentButton=debounce(lastButton);
  // если нажатие
  if (lastButton == LOW && currentButton == HIGH){
   ledOn = !ledOn;  // Меняем состояние светодиода на противоположное
  }
  lastButton=currentButton; // предыдущее состояние кнопки теперь равно текущему
  digitalWrite(LED, ledOn); // реализуем текущее состояние светодиода
}

Если возникнут вопросы — задавайте.

Видеоурок 1. Первые шаги с Arduino

Видеоурок 3. Основы схемотехники

Видеоурок 4. Аналоговые входы Arduino

Видеоурок 5. Моторы и транзисторы

Видеоурок 6. Serial и Processing

[add_ratings]

5 thoughts on “Видеоурок 2. Arduino — кнопки, PWM, функции

  1. Привет.

    Я не понял какую роль выполняет «last» в функции debounce, «last» это произвольное название или оператор такой? После if сравнивается «last» с «current», но откуда программа знает чему равен «last»??

    1. Михаил, привет. last и current — это названия переменных. В last хранится состояние кнопки в предыдущий момент времени, а в current — текущее состояние кнопки. last передается в качестве параметра в функцию debounce. Когда мы вызываем debounce (lastButton), то внутри функции debounce, переменная last будет равна значению lastButton.

      1. То есть значение «last» устанавливается с помощью строчки «return current;» и каждый раз когда функция debounce срабатывает в цикле void loop считывается прежнее значение? Я правильно понял?

        1. Я добавил код с комментариями в тексте статьи. Значение last устанавливается в 28 строке

          currentButton=debounce(lastButton);

          После этого выполнение программы переходит в функцию debounce и last получает значение lastButton

  2. Добрый день! Такое дело у меня. Я хочу управлять ик пультом LED прожектор. Но когда я использую вместе библиотеки irremote (для ик пульта) и SimpleDmx (для прожектора) то прожектор не работает. В чем может быть проблема?

    /* * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv * An IR detector/demodulator must be connected to the input RECV_PIN. * Version 0.1 July, 2009 * Copyright 2009 Ken Shirriff * <a href="http://arcfn.com">arcfn.com</a> */ #include #include int RECV_PIN = 11; int LED = 4; int onoff = 0; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { DmxSimple.usePin(A0); DmxSimple.write(1, 255); DmxSimple.write(8, 255); pinMode(LED,OUTPUT); Serial.begin(9600); // In case the interrupt driver crashes on setup, give a clue // to the user what's going on. Serial.println("Enabling IRin"); irrecv.enableIRIn(); // Start the receiver Serial.println("Enabled IRin"); } void loop() { /* if (irrecv.decode(&results)) { Serial.println(results.value); if (results.value == 16724175 && onoff == 0){ digitalWrite(LED,HIGH); onoff = 1; Serial.println('OK'); } else if (results.value == 16724175 && onoff == 1){ digitalWrite(LED,LOW); onoff = 0; Serial.println('OK'); } irrecv.resume(); // Receive the next value }*/ delay(100); }

Оставить ответ

Ваш email не будет опубликован.Обязательны поля помечены *