Arcade PUB
  • Главная
  • Уроки
  • Датчики
  • Проекты
  • Справочник языка Ардуино
  • Справочник
  • Видео
  • Контакты
  • Поддержать
Уроки  /  27 февраля, 2020

Функции. Урок 3. Ардуино

by valentino
Схема подключения нескольких светодиодов
Схема подключения нескольких светодиодов

Привет. Сегодня поговорим про организацию своей функции в языке программирования ардуино.

Содержание

  • 1 Функции
  • 2 Программа
  • 3 Полный текст программы
  • 4 Заключение
  • 5 Похожее

В предыдущих статьях мы писали код непосредственно в две управляющие функции программы. На этот раз посмотрим как можно организовать код более удобным способом.

В прошлый раз мы рассматривали программу устранения дребезга кнопки. Если вы уже забыли или пропустили предыдущую статью, пожалуйста, посмотрите её.

Дребезг кнопки. Урок 2.3. Ардуино

Теперь попробуем изменить программу таким образом, чтобы выделить код отвечающий за устранение дребезга в отдельную функцию. Мы будем использовать эту функцию в будущем, и будет намного удобнее просто копировать уже написанный код в новую программу.

Кроме того используем старые наработки из предыдущих статей. А также подключим к ардуино несколько светодиодов и будем управлять всеми с помощью одной кнопки.

Чтобы выполнить этот урок нам понадобятся.

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • 4 Резистора номиналом 220 Ом
  • Резистор номиналом 10 кОм
  • Кнопка
  • 4 Светодиода 5 мм
  • Кабель USB

Функции

Мы уже встречались с функциями. Поэтому разобраться с этим будет довольно просто. В предыдущих проектах мы использовали функции delay(), millis(), pinMode(), digitalWrite(), setup() и loop().

Функция — это часть программы, которая выполняет определенные действия и предоставляет результат своей работы. У функций должно быть имя, чтобы к ним можно было обратиться. Функции могут принимать какие-то значения из основной части программы. И вызывать другие функции.

Давайте напишем простую функцию для примера.

int plus(int a, int b){
  return a+b;
}

Мы создали функцию plus(). Она получает на вход две переменные типа int и возвращает их сумму. Если мы присвоим другой переменной значение этой функции, то получим результат сложения.

int sum = plus(5,2); // sum = 7

Таким образом можно организовать любой код внутри программы с помощью функций. Но делать это лучше так, чтобы логика выполнения программы становилась более понятной. Часто в функции пишут код который должен выполняться в программе несколько раз. Тогда вы сможете просто вызвать функцию в нужный момент, передать ей необходимые значения и получить результат. А не писать одинаковый код в разных частях программы.

Теперь перейдем к нашей программе. Сегодня мы хотим подключить к ардуино несколько светодиодов, объединив их в массив. И управлять ими с помощью кнопки, устраняя дребезг. И составить программу из наших собственных функций.

Сначала соберем схему на макетной плате.

Принципиальная схема подключения светодиодов и кнопки
Принципиальная схема подключения светодиодов и кнопки

Аноды светодиодов подключаем к пинам на плате ардуино, используем 5,7,9 и 11 пины. Катоды светодиодов подключаем к земле через резисторы 220 Ом.

Кнопку подключаем ко 2 пину на ардуино с одной стороны. А также к шине 5 вольт и к земле через резистор 10 кОм.

Программа

Мы больше не будем использовать 13 пин и диод на плате, поэтому уберем связанные с ним переменные из кода. Но добавим массив пинов для светодиодов и счетчик.

const int buttonPin = 2;

int buttonState;            
int lastButtonState = LOW;

unsigned long lastDebounceTime = 0;  
unsigned long debounceDelay = 50;

int leds[] = {5, 7, 9, 11, 13};
int i = 0;

В массиве есть элемент 13. Однако мы не будем подключать к нему диод, а будем использовать его для флага, что все светодиоды нужно выключить.

В функции setup() настроим пины на ввод и вывод.

void setup() {
  pinMode(buttonPin, INPUT);
  
  pinMode(leds[0], OUTPUT);
  pinMode(leds[1], OUTPUT);
  pinMode(leds[2], OUTPUT);
  pinMode(leds[3], OUTPUT);
}

Теперь реорганизуем код устраняющий дребезг кнопки. Мы должны передать в функцию состояние кнопки в текущий момент и получить в ответ обработанное нажатие на кнопку, если оно было.

Кроме того упростим функцию. Избавимся от подсчета миллисекунд, а просто сделаем задержку между считыванием состояния кнопки.

boolean debounce(boolean last){
  boolean current = digitalRead(buttonPin);
  
  if (last != current){
    delay(50);
    current = digitalRead(buttonPin);
    return current;
  }
}

В основном цикле будем вызывать функцию debounce() и передавать в нее предыдущее значение кнопки. И если значения отличаются, а текущее значение = HIGH, то есть кнопка была нажата, вызываем другую функцию ledON().

void loop(){
  buttonState = debounce(lastButtonState);
  	if (lastButtonState == LOW && buttonState == HIGH){
      	  ledON();
  	}
  lastButtonState = buttonState;
}

Функция ledON() хранит текущее значение переменной счетчика i. И включает соответствующий светодиод из массива. Но до того, как включить нужный диод, функция выключает все. Если i = 4, это значение 13 в массиве, мы выключаем все диоды. А следующим нажатием, i = 5, сбрасываем счетчик на 0.

boolean ledON(){
  for( int j=0; j <= 5; j++){
      digitalWrite(leds[j], LOW);
  }
  if( i == 5 ){i = 0;}
  if(i != 4){
      digitalWrite(leds[i], HIGH);
  }
  i++;
}
Работа программы
Работа программы

Полный текст программы

const int buttonPin=2;

boolean lastButtonState = LOW;
boolean buttonState = LOW;

int leds[] = {5, 7, 9, 11, 13};
int i = 0;

void setup(){
  pinMode (buttonPin , INPUT);
  
  pinMode(leds[0], OUTPUT);
  pinMode(leds[1], OUTPUT);
  pinMode(leds[2], OUTPUT);
  pinMode(leds[3], OUTPUT);  
  
}

boolean ledON(){
  
  for( int j=0; j <= 5; j++){
      digitalWrite(leds[j], LOW);
  }
  if( i == 5 ){i = 0;}
  if(i != 4){
      digitalWrite(leds[i], HIGH);
  }
  i++;

}

boolean debounce(boolean last){
  
	boolean current = digitalRead(buttonPin );
  
	if (last != current){
        delay(5);
        current = digitalRead(buttonPin );
        return current;
	}
}

void loop(){
  buttonState = debounce(lastButtonState);
  	if (lastButtonState == LOW && buttonState == HIGH){
      	
      	ledON();
  	}
  lastButtonState = buttonState;
}

Заключение

В этом уроке мы рассмотрели использование собственной функции в ардуино. И собрали схему управления многими светодиодами с использованием кнопки с функцией подавления дребезга. Схемы и код программ становятся все сложнее, но намного интереснее. В следующий раз мы рассмотрим еще одну очень важную тему работы с ардуино — широтно-импульсную модуляцию.

Похожее

Tags

  • Основное

Навигация по записям

Дребезг кнопки. Урок 2.3. Ардуино
ШИМ. Урок 4. Ардуино

Share your thoughts Отменить ответ

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

Новое видео на канале

https://youtu.be/bvzX-edTdS0

Свежие записи

  • Четырехразрядный индикатор. Урок 24. Ардуино
  • 7 сегментный индикатор. Урок 23. Ардуино
  • Клавиатура. Урок 22. Ардуино
  • OLED дисплей. Урок 21. Ардуино
  • Много кнопок на одном пине. Урок 20. Ардуино

Метки

  • Bluetooth
  • RGB Светодиоды
  • WIFI
  • Двигатели
  • Звук
  • Игры
  • Интернет вещей
  • Лего
  • Основное
  • Программирование
  • Уроки

Купить стартовый набор Ардуино UNO на Aliexpress

Стартовый набор Ардуино Уно

Купить набор датчиков для Ардуино 45 штук на Aliexpress

набор датчиков для Ардуино

arcadepub

Do you know how this display works? It is pretty e Do you know how this display works? It is pretty easy to use it with #arduino.
#arduinouno #arduinoproject #arcadepub #ардуино #аркадныйпаб #ардуинопроект
How to use 7 segments indicator with #arduino its How to use 7 segments indicator with #arduino its pretty easy.
#arduinouno #arduinoproject #arcadepub
How to use 4x4 keypad with #arduino check it out. How to use 4x4 keypad with #arduino check it out. #arduinouno #arduinoproject #arcadepub
How to use oled display with #arduino it's pretty How to use oled display with #arduino it's pretty easy. #arcadepub #ардуино #ардуинопроект #arduinoproject #arduinouno
Hi there! How to control button debounce without c Hi there! How to control button debounce without code. Lets see.

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Hello there! Let's write a program to control ard Hello there!  Let's write a program to control arduino by ir.

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Hey! How are you doing? How do you think, we can c Hey! How are you doing? How do you think, we can control arduino program by ir? I bet we can. 

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Hello! There is a second video on my youtube chann Hello! There is a second video on my youtube channel. I've just added subtitles, so you can see how to use if and else structures and for() loop in arduino program. Enjoy, and do NOT forget to subscribe. 
https://youtu.be/8AHfAQyNAqU

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #youtube
Hi there! How is it going? Photo resistor and lase Hi there! How is it going? Photo resistor and laser are here. Look at graphics and try to understand how it works!

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Here is ky-039 heart beat arduino module. Do you l Here is ky-039 heart beat arduino module. Do you like it? Write in the comments below!

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Its Magic lights with ky-027 arduino module. Do yo Its Magic lights with ky-027 arduino module. Do you like it?  Write in the comments below!

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Arduino and #laser are together. Please subscribe Arduino and #laser are together.

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Do you know how gyroscope modul works with arduino Do you know how gyroscope modul works with arduino? 

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #rfid #arduinoproject
Do you know how you can use rfid module with ardui Do you know how you can use rfid module with arduino? 

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #rfid #arduinoproject
It is almost done Please subscribe to my youtube It is almost done

Please subscribe to my youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #flower #autowatering #arduinoproject #robot #spiderbot
Begin to make a spider bot. Please subscribe to Begin to make a spider bot. 

Please subscribe to my youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #flower #autowatering #arduinoproject #robot #spiderbot
Hello folks! There are 1000 of us on my instagram Hello folks! There are 1000 of us on my instagram account. And i want to tell thanks to each of you!
I'd like to tell more about this project. And that's why i made a video on youtube channel. 
It is in russian, but i have added english subtitles. 
I'm gonna tell you about many intriguing Arduino projects.
So, please, take a look at video. And subscribe to my youtube channel as well. 

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #flower #autowatering
How can we know that flower needs to be watered. L How can we know that flower needs to be watered. Like and Subscribe to know more.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #flower #autowatering
How to turn light on by clapping. Like and Subscri How to turn light on by clapping. Like and Subscribe to know more.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit
Is it possible to turn light on over the internet? Is it possible to turn light on over the internet? Like and Subscribe to know more.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit
Загрузи больше…

ArcadePUB @ 2020

arduino@arcadepub.ru

На сайте вы найдете уроки, проекты и обзоры всего, что связано с ардуино.

Аркадные игры и автоматы.

DIY проекты

Метки

  • Bluetooth
  • RGB Светодиоды
  • WIFI
  • Двигатели
  • Звук
  • Игры
  • Интернет вещей
  • Лего
  • Основное
  • Программирование
  • Уроки

Свежие записи

  • Четырехразрядный индикатор. Урок 24. Ардуино
  • 7 сегментный индикатор. Урок 23. Ардуино
  • Клавиатура. Урок 22. Ардуино
  • OLED дисплей. Урок 21. Ардуино
  • Много кнопок на одном пине. Урок 20. Ардуино

Навигация

  • Главная
  • Уроки
  • Датчики
  • Проекты
  • Справочник языка Ардуино
  • Справочник
  • Видео
  • Контакты
  • Поддержать

Дополнительно

Поддержать

Контакты

YouTube
Patreon
VK
Instagram
Twitter