Написание кода для ардуино

Написание кода для ардуино

Содержание

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

Тут я постараюсь дать сжатый минимум для того, что бы вы понимали принципы работы с Arduino. Для более полного погружения в мир программируемых микроконтроллеров обратите внимание на другие разделы и статьи этого сайта. Я буду оставлять ссылки на другие материалы этого сайта для более подробного изучения некоторых аспектов.

Что такое Arduino и для чего оно нужно?

Arduino — это электронный конструктор, который позволяет любому человеку создавать разнообразные электро-механические устройства. Ардуино состоит из программной и аппаратной части. Программная часть включает в себя среду разработки (программа для написания и отладки прошивок), множество готовых и удобных библиотек, упрощенный язык программирования. Аппаратная часть включает в себя большую линейку микроконтроллеров и готовых модулей для них. Благодаря этому, работать с Arduino очень просто!

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

проекты на Arduino

Стартовый набор Arduino

Для того что бы начать изучать Arduino необходимо обзавестись самой платой микроконтроллера и дополнительными деталями. Лучше всего приобрести стартовый набор Ардуино, но можно и самостоятельно подобрать все необходимое. Я советую выбрать набор, потому что это проще и зачастую дешевле. Вот ссылки на лучшие наборы и на отдельные детали, которые обязательно пригодятся вам для изучения:

Читайте также:  Наушники не играют в компе
Базовый набор ардуино для начинающих: Купить
Большой набор для обучения и первых проектов: Купить
Набор дополнительных датчиков и модулей: Купить
Ардуино Уно самая базовая и удобная модель из линейки: Купить
Беспаечная макетная плата для удобного обучения и прототипирования: Купить
Набор проводов с удобными коннекторами: Купить
Комплект светодиодов: Купить
Комплект резисторов: Купить
Кнопки: Купить
Потенциометры: Купить

Среда разработки Arduino IDE

Для написания, отладки и загрузки прошивок необходимо скачать и установить Arduino IDE. Это очень простая и удобная программа. На моем сайте я уже описывал процесс загрузки, установки и настройки среды разработки. Поэтому здесь я просто оставлю ссылки на последнюю версию программы и на статью с подробной инструкцией.

Версия Windows Mac OS X Linux
1.8.2

Язык программирования Ардуино

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

Для программирования Arduino используется упрощенная версия языка C++ с предопределенными функциями. Как и в других Cи-подобных языках программирования есть ряд правил написания кода. Вот самые базовые из них:

  • После каждой инструкции необходимо ставить знак точки с запятой (;)
  • Перед объявлением функции необходимо указать тип данных, возвращаемый функцией или void если функция не возвращает значение.
  • Так же необходимо указывать тип данных перед объявлением переменной.
  • Комментарии обозначаются: // Строчный и /* блочный */

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

Все прошивки для Arduino должны содержать минимум 2 функции. Это setup() и loop().

Функция setup

Функция setup() выполняется в самом начале и только 1 раз сразу после включения или перезагрузки вашего устройства. Обычно в этой функции декларируют режимы пинов, открывают необходимые протоколы связи, устанавливают соединения с дополнительными модулями и настраивают подключенные библиотеки. Если для вашей прошивки ничего подобного делать не нужно, то функция все равно должна быть объявлена. Вот стандартный пример функции setup():


Картинка для привлечения внимания

На днях появилась подработка, поступил заказ записать скетч на ардуино. Простенький, но объёмный. С повторяющимися блоками. Нужно было управлять каждым портом Arduino Mega отдельно, при получении команды по Uart. Отправляешь символ — и светодиод (к примеру) загорается на определенное время. Написал скетч на 2 команды, скинул заказчику для тестов, получил предоплату. Дальше, нужно было масштабировать на все порты.

Для начала я честно попробовал руками. Написав первые 26 #define, энтузиазм иссяк. Я пошел подышать свежим воздухом, и вспомнил, что у меня на ПК (Win 7 x64), уже установлен Python 3.6 из дистрибутива Anaconda. Кстати, это наиболее удобный способ установки Python`а на Windows, т.к. всё уже включено и настроено по умолчанию, и есть пакетный менеджер.

Итак, приступим.

Создаем папку, в ней пустой файл, я назвал его «arduino_gen.py» и bat файл «start_py.bat» со следующим содержимым:

python.exe arduino_gen.py > code_out.txt
@pause

Этот файл нам потребуется, для запуска программы на Python`е
Теперь мы напишем программку, которая сгенерирует нам необходимый код для Arduino.

Для начала, создадим два списка со всеми необходимыми нам значениями, которые мы будем подставлять в код. Имена могут быть любыми, дело вкуса.

И две переменные, для перебора списков

И теперь создадим цикл для генерации #define PIN_a 2… #define PIN_Z 53

Сохраняем, запускаем файл «start_py.bat»

Если мы хотим вывести результат сразу в файл, тогда допишем:

python.exe arduino_gen.py > code_out.txt
@pause

В результате, мы получим файл «code_out.txt » из которого, код удобно копировать в скетч в лучших традициях Arduino.

Уже на этом этапе, у меня возник вопрос, хватит ли у Arduino памяти, если сгенерировать большое количество переменных. Однако, забегая вперед, скажу, что памяти вполне хватило, в чем можно убедиться про компиляции скетча.

Далее, я приведу остальной код, в котором несложно разобраться. Но, для начала, рассмотрим

Здесь, нужно сгенерировать 4 блока кода в начале. И два блока в конце. В последствии, заказчик захотел изменить логику работы, чтобы при приходе заглавной буквы менялось состояние выхода. Я переписал участок кода:

И масштабировал при помощи Python’а

Вот, что в итоге получилось.

// Задаем пины
#define PIN_a 2
#define PIN_b 3
#define PIN_c 4
#define PIN_d 5
#define PIN_e 6
#define PIN_f 7
#define PIN_g 8
#define PIN_h 9
#define PIN_i 10
#define PIN_j 11
#define PIN_k 12
#define PIN_l 13
#define PIN_m 14
#define PIN_n 15
#define PIN_o 16
#define PIN_p 17
#define PIN_q 18
#define PIN_r 19
#define PIN_s 20
#define PIN_t 21
#define PIN_u 22
#define PIN_v 23
#define PIN_w 24
#define PIN_x 25
#define PIN_y 26
#define PIN_z 27
#define PIN_A 28
#define PIN_B 29
#define PIN_C 30
#define PIN_D 31
#define PIN_E 32
#define PIN_F 33
#define PIN_G 34
#define PIN_H 35
#define PIN_I 36
#define PIN_J 37
#define PIN_K 38
#define PIN_L 39
#define PIN_M 40
#define PIN_N 41
#define PIN_O 42
#define PIN_P 43
#define PIN_Q 44
#define PIN_R 45
#define PIN_S 46
#define PIN_T 47
#define PIN_U 48
#define PIN_V 49
#define PIN_W 50
#define PIN_X 51
#define PIN_Y 52
#define PIN_Z 53

//Задаем время
//Здесь, скорее всего, потребуется поправка
//Например, 1 секунда может быть не 1000, а 865, к примеру.
//Нужно будет секундомером померить, и, если необходимо,
// уменьшить на некий коофициент
#define TIME_a 1000
#define TIME_b 1000
#define TIME_c 1000
#define TIME_d 1000
#define TIME_e 1000
#define TIME_f 1000
#define TIME_g 1000
#define TIME_h 1000
#define TIME_i 1000
#define TIME_j 1000
#define TIME_k 1000
#define TIME_l 1000
#define TIME_m 1000
#define TIME_n 1000
#define TIME_o 1000
#define TIME_p 1000
#define TIME_q 1000
#define TIME_r 1000
#define TIME_s 1000
#define TIME_t 1000
#define TIME_u 1000
#define TIME_v 1000
#define TIME_w 1000
#define TIME_x 1000
#define TIME_y 1000
#define TIME_z 1000
#define TIME_A 1000
#define TIME_B 1000
#define TIME_C 1000
#define TIME_D 1000
#define TIME_E 1000
#define TIME_F 1000
#define TIME_G 1000
#define TIME_H 1000
#define TIME_I 1000
#define TIME_J 1000
#define TIME_K 1000
#define TIME_L 1000
#define TIME_M 1000
#define TIME_N 1000
#define TIME_O 1000
#define TIME_P 1000
#define TIME_Q 1000
#define TIME_R 1000
#define TIME_S 1000
#define TIME_T 1000
#define TIME_U 1000
#define TIME_V 1000
#define TIME_W 1000
#define TIME_X 1000
#define TIME_Y 1000
#define TIME_Z 1000

//логическое состояние светодиода (да / нет)
boolean ledState_a = false;
boolean ledState_b = false;
boolean ledState_c = false;
boolean ledState_d = false;
boolean ledState_e = false;
boolean ledState_f = false;
boolean ledState_g = false;
boolean ledState_h = false;
boolean ledState_i = false;
boolean ledState_j = false;
boolean ledState_k = false;
boolean ledState_l = false;
boolean ledState_m = false;
boolean ledState_n = false;
boolean ledState_o = false;
boolean ledState_p = false;
boolean ledState_q = false;
boolean ledState_r = false;
boolean ledState_s = false;
boolean ledState_t = false;
boolean ledState_u = false;
boolean ledState_v = false;
boolean ledState_w = false;
boolean ledState_x = false;
boolean ledState_y = false;
boolean ledState_z = false;
boolean ledState_A = false;
boolean ledState_B = false;
boolean ledState_C = false;
boolean ledState_D = false;
boolean ledState_E = false;
boolean ledState_F = false;
boolean ledState_G = false;
boolean ledState_H = false;
boolean ledState_I = false;
boolean ledState_J = false;
boolean ledState_K = false;
boolean ledState_L = false;
boolean ledState_M = false;
boolean ledState_N = false;
boolean ledState_O = false;
boolean ledState_P = false;
boolean ledState_Q = false;
boolean ledState_R = false;
boolean ledState_S = false;
boolean ledState_T = false;
boolean ledState_U = false;
boolean ledState_V = false;
boolean ledState_W = false;
boolean ledState_X = false;
boolean ledState_Y = false;
boolean ledState_Z = false;

//Переменные, для хранения времени
int time_a = 0;
int time_b = 0;
int time_c = 0;
int time_d = 0;
int time_e = 0;
int time_f = 0;
int time_g = 0;
int time_h = 0;
int time_i = 0;
int time_j = 0;
int time_k = 0;
int time_l = 0;
int time_m = 0;
int time_n = 0;
int time_o = 0;
int time_p = 0;
int time_q = 0;
int time_r = 0;
int time_s = 0;
int time_t = 0;
int time_u = 0;
int time_v = 0;
int time_w = 0;
int time_x = 0;
int time_y = 0;
int time_z = 0;
int time_A = 0;
int time_B = 0;
int time_C = 0;
int time_D = 0;
int time_E = 0;
int time_F = 0;
int time_G = 0;
int time_H = 0;
int time_I = 0;
int time_J = 0;
int time_K = 0;
int time_L = 0;
int time_M = 0;
int time_N = 0;
int time_O = 0;
int time_P = 0;
int time_Q = 0;
int time_R = 0;
int time_S = 0;
int time_T = 0;
int time_U = 0;
int time_V = 0;
int time_W = 0;
int time_X = 0;
int time_Y = 0;
int time_Z = 0;

void setup() <
// не стал переписывать инициализацию
Serial.begin(9600);
for (int i = 2; i 0) <
int x = Serial.read();

//Проверяем, что у нас пришло

//a
if(x == ‘a’) <
ledState_a = true;
time_a = TIME_a;
x = 0;
>

//b
if(x == ‘b’) <
ledState_b = true;
time_b = TIME_b;
x = 0;
>

//c
if(x == ‘c’) <
ledState_c = true;
time_c = TIME_c;
x = 0;
>

//d
if(x == ‘d’) <
ledState_d = true;
time_d = TIME_d;
x = 0;
>

//e
if(x == ‘e’) <
ledState_e = true;
time_e = TIME_e;
x = 0;
>

//f
if(x == ‘f’) <
ledState_f = true;
time_f = TIME_f;
x = 0;
>

//g
if(x == ‘g’) <
ledState_g = true;
time_g = TIME_g;
x = 0;
>

//h
if(x == ‘h’) <
ledState_h = true;
time_h = TIME_h;
x = 0;
>

//i
if(x == ‘i’) <
ledState_i = true;
time_i = TIME_i;
x = 0;
>

//j
if(x == ‘j’) <
ledState_j = true;
time_j = TIME_j;
x = 0;
>

//k
if(x == ‘k’) <
ledState_k = true;
time_k = TIME_k;
x = 0;
>

//l
if(x == ‘l’) <
ledState_l = true;
time_l = TIME_l;
x = 0;
>

//m
if(x == ‘m’) <
ledState_m = true;
time_m = TIME_m;
x = 0;
>

//n
if(x == ‘n’) <
ledState_n = true;
time_n = TIME_n;
x = 0;
>

//o
if(x == ‘o’) <
ledState_o = true;
time_o = TIME_o;
x = 0;
>

//p
if(x == ‘p’) <
ledState_p = true;
time_p = TIME_p;
x = 0;
>

//q
if(x == ‘q’) <
ledState_q = true;
time_q = TIME_q;
x = 0;
>

//r
if(x == ‘r’) <
ledState_r = true;
time_r = TIME_r;
x = 0;
>

//s
if(x == ‘s’) <
ledState_s = true;
time_s = TIME_s;
x = 0;
>

//t
if(x == ‘t’) <
ledState_t = true;
time_t = TIME_t;
x = 0;
>

//u
if(x == ‘u’) <
ledState_u = true;
time_u = TIME_u;
x = 0;
>

//v
if(x == ‘v’) <
ledState_v = true;
time_v = TIME_v;
x = 0;
>

//w
if(x == ‘w’) <
ledState_w = true;
time_w = TIME_w;
x = 0;
>

//x
if(x == ‘x’) <
ledState_x = true;
time_x = TIME_x;
x = 0;
>

//y
if(x == ‘y’) <
ledState_y = true;
time_y = TIME_y;
x = 0;
>

//z
if(x == ‘z’) <
ledState_z = true;
time_z = TIME_z;
x = 0;
>
//Когда приходит большая буква — меняем состояние

//A
if(x == ‘A’) <
digitalWrite (PIN_A, !digitalRead(PIN_A));
x = 0;
>

//B
if(x == ‘B’) <
digitalWrite (PIN_B, !digitalRead(PIN_B));
x = 0;
>

//C
if(x == ‘C’) <
digitalWrite (PIN_C, !digitalRead(PIN_C));
x = 0;
>

//D
if(x == ‘D’) <
digitalWrite (PIN_D, !digitalRead(PIN_D));
x = 0;
>

//E
if(x == ‘E’) <
digitalWrite (PIN_E, !digitalRead(PIN_E));
x = 0;
>

//F
if(x == ‘F’) <
digitalWrite (PIN_F, !digitalRead(PIN_F));
x = 0;
>

//G
if(x == ‘G’) <
digitalWrite (PIN_G, !digitalRead(PIN_G));
x = 0;
>

//H
if(x == ‘H’) <
digitalWrite (PIN_H, !digitalRead(PIN_H));
x = 0;
>

//I
if(x == ‘I’) <
digitalWrite (PIN_I, !digitalRead(PIN_I));
x = 0;
>

//J
if(x == ‘J’) <
digitalWrite (PIN_J, !digitalRead(PIN_J));
x = 0;
>

//K
if(x == ‘K’) <
digitalWrite (PIN_K, !digitalRead(PIN_K));
x = 0;
>

//L
if(x == ‘L’) <
digitalWrite (PIN_L, !digitalRead(PIN_L));
x = 0;
>

//M
if(x == ‘M’) <
digitalWrite (PIN_M, !digitalRead(PIN_M));
x = 0;
>

//N
if(x == ‘N’) <
digitalWrite (PIN_N, !digitalRead(PIN_N));
x = 0;
>

//O
if(x == ‘O’) <
digitalWrite (PIN_O, !digitalRead(PIN_O));
x = 0;
>

//P
if(x == ‘P’) <
digitalWrite (PIN_P, !digitalRead(PIN_P));
x = 0;
>

//Q
if(x == ‘Q’) <
digitalWrite (PIN_Q, !digitalRead(PIN_Q));
x = 0;
>

//R
if(x == ‘R’) <
digitalWrite (PIN_R, !digitalRead(PIN_R));
x = 0;
>

//S
if(x == ‘S’) <
digitalWrite (PIN_S, !digitalRead(PIN_S));
x = 0;
>

//T
if(x == ‘T’) <
digitalWrite (PIN_T, !digitalRead(PIN_T));
x = 0;
>

//U
if(x == ‘U’) <
digitalWrite (PIN_U, !digitalRead(PIN_U));
x = 0;
>

//V
if(x == ‘V’) <
digitalWrite (PIN_V, !digitalRead(PIN_V));
x = 0;
>

//W
if(x == ‘W’) <
digitalWrite (PIN_W, !digitalRead(PIN_W));
x = 0;
>

//X
if(x == ‘X’) <
digitalWrite (PIN_X, !digitalRead(PIN_X));
x = 0;
>

//Y
if(x == ‘Y’) <
digitalWrite (PIN_Y, !digitalRead(PIN_Y));
x = 0;
>

//Z
if(x == ‘Z’) <
digitalWrite (PIN_Z, !digitalRead(PIN_Z));
x = 0;
>

>
//a
if(ledState_a == true) <
time_a = time_a — 1;
digitalWrite(PIN_a, HIGH);
>

if(time_a == 0) <
ledState_a = false;
>

if(ledState_a == false) <
digitalWrite(PIN_a, LOW);
>

//b
if(ledState_b == true) <
time_b = time_b — 1;
digitalWrite(PIN_b, HIGH);
>

if(time_b == 0) <
ledState_b = false;
>

if(ledState_b == false) <
digitalWrite(PIN_b, LOW);
>

//c
if(ledState_c == true) <
time_c = time_c — 1;
digitalWrite(PIN_c, HIGH);
>

if(time_c == 0) <
ledState_c = false;
>

if(ledState_c == false) <
digitalWrite(PIN_c, LOW);
>

//d
if(ledState_d == true) <
time_d = time_d — 1;
digitalWrite(PIN_d, HIGH);
>

if(time_d == 0) <
ledState_d = false;
>

if(ledState_d == false) <
digitalWrite(PIN_d, LOW);
>

//e
if(ledState_e == true) <
time_e = time_e — 1;
digitalWrite(PIN_e, HIGH);
>

if(time_e == 0) <
ledState_e = false;
>

if(ledState_e == false) <
digitalWrite(PIN_e, LOW);
>

//f
if(ledState_f == true) <
time_f = time_f — 1;
digitalWrite(PIN_f, HIGH);
>

if(time_f == 0) <
ledState_f = false;
>

if(ledState_f == false) <
digitalWrite(PIN_f, LOW);
>

//g
if(ledState_g == true) <
time_g = time_g — 1;
digitalWrite(PIN_g, HIGH);
>

if(time_g == 0) <
ledState_g = false;
>

if(ledState_g == false) <
digitalWrite(PIN_g, LOW);
>

//h
if(ledState_h == true) <
time_h = time_h — 1;
digitalWrite(PIN_h, HIGH);
>

if(time_h == 0) <
ledState_h = false;
>

if(ledState_h == false) <
digitalWrite(PIN_h, LOW);
>

//i
if(ledState_i == true) <
time_i = time_i — 1;
digitalWrite(PIN_i, HIGH);
>

if(time_i == 0) <
ledState_i = false;
>

if(ledState_i == false) <
digitalWrite(PIN_i, LOW);
>

//j
if(ledState_j == true) <
time_j = time_j — 1;
digitalWrite(PIN_j, HIGH);
>

if(time_j == 0) <
ledState_j = false;
>

if(ledState_j == false) <
digitalWrite(PIN_j, LOW);
>

//k
if(ledState_k == true) <
time_k = time_k — 1;
digitalWrite(PIN_k, HIGH);
>

if(time_k == 0) <
ledState_k = false;
>

if(ledState_k == false) <
digitalWrite(PIN_k, LOW);
>

//l
if(ledState_l == true) <
time_l = time_l — 1;
digitalWrite(PIN_l, HIGH);
>

if(time_l == 0) <
ledState_l = false;
>

if(ledState_l == false) <
digitalWrite(PIN_l, LOW);
>

//m
if(ledState_m == true) <
time_m = time_m — 1;
digitalWrite(PIN_m, HIGH);
>

if(time_m == 0) <
ledState_m = false;
>

if(ledState_m == false) <
digitalWrite(PIN_m, LOW);
>

//n
if(ledState_n == true) <
time_n = time_n — 1;
digitalWrite(PIN_n, HIGH);
>

if(time_n == 0) <
ledState_n = false;
>

if(ledState_n == false) <
digitalWrite(PIN_n, LOW);
>

//o
if(ledState_o == true) <
time_o = time_o — 1;
digitalWrite(PIN_o, HIGH);
>

if(time_o == 0) <
ledState_o = false;
>

if(ledState_o == false) <
digitalWrite(PIN_o, LOW);
>

//p
if(ledState_p == true) <
time_p = time_p — 1;
digitalWrite(PIN_p, HIGH);
>

if(time_p == 0) <
ledState_p = false;
>

if(ledState_p == false) <
digitalWrite(PIN_p, LOW);
>

//q
if(ledState_q == true) <
time_q = time_q — 1;
digitalWrite(PIN_q, HIGH);
>

if(time_q == 0) <
ledState_q = false;
>

if(ledState_q == false) <
digitalWrite(PIN_q, LOW);
>

//r
if(ledState_r == true) <
time_r = time_r — 1;
digitalWrite(PIN_r, HIGH);
>

if(time_r == 0) <
ledState_r = false;
>

if(ledState_r == false) <
digitalWrite(PIN_r, LOW);
>

//s
if(ledState_s == true) <
time_s = time_s — 1;
digitalWrite(PIN_s, HIGH);
>

if(time_s == 0) <
ledState_s = false;
>

if(ledState_s == false) <
digitalWrite(PIN_s, LOW);
>

//t
if(ledState_t == true) <
time_t = time_t — 1;
digitalWrite(PIN_t, HIGH);
>

if(time_t == 0) <
ledState_t = false;
>

if(ledState_t == false) <
digitalWrite(PIN_t, LOW);
>

//u
if(ledState_u == true) <
time_u = time_u — 1;
digitalWrite(PIN_u, HIGH);
>

if(time_u == 0) <
ledState_u = false;
>

if(ledState_u == false) <
digitalWrite(PIN_u, LOW);
>

//v
if(ledState_v == true) <
time_v = time_v — 1;
digitalWrite(PIN_v, HIGH);
>

if(time_v == 0) <
ledState_v = false;
>

if(ledState_v == false) <
digitalWrite(PIN_v, LOW);
>

//w
if(ledState_w == true) <
time_w = time_w — 1;
digitalWrite(PIN_w, HIGH);
>

if(time_w == 0) <
ledState_w = false;
>

if(ledState_w == false) <
digitalWrite(PIN_w, LOW);
>

//x
if(ledState_x == true) <
time_x = time_x — 1;
digitalWrite(PIN_x, HIGH);
>

if(time_x == 0) <
ledState_x = false;
>

if(ledState_x == false) <
digitalWrite(PIN_x, LOW);
>

//y
if(ledState_y == true) <
time_y = time_y — 1;
digitalWrite(PIN_y, HIGH);
>

if(time_y == 0) <
ledState_y = false;
>

if(ledState_y == false) <
digitalWrite(PIN_y, LOW);
>

//z
if(ledState_z == true) <
time_z = time_z — 1;
digitalWrite(PIN_z, HIGH);
>

if(time_z == 0) <
ledState_z = false;
>

if(ledState_z == false) <
digitalWrite(PIN_z, LOW);
>

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

Тут я постараюсь дать сжатый минимум для того, что бы вы понимали принципы работы с Arduino. Для более полного погружения в мир программируемых микроконтроллеров обратите внимание на другие разделы и статьи этого сайта. Я буду оставлять ссылки на другие материалы этого сайта для более подробного изучения некоторых аспектов.

Что такое Arduino и для чего оно нужно?

Arduino — это электронный конструктор, который позволяет любому человеку создавать разнообразные электро-механические устройства. Ардуино состоит из программной и аппаратной части. Программная часть включает в себя среду разработки (программа для написания и отладки прошивок), множество готовых и удобных библиотек, упрощенный язык программирования. Аппаратная часть включает в себя большую линейку микроконтроллеров и готовых модулей для них. Благодаря этому, работать с Arduino очень просто!

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

проекты на Arduino

Стартовый набор Arduino

Для того что бы начать изучать Arduino необходимо обзавестись самой платой микроконтроллера и дополнительными деталями. Лучше всего приобрести стартовый набор Ардуино, но можно и самостоятельно подобрать все необходимое. Я советую выбрать набор, потому что это проще и зачастую дешевле. Вот ссылки на лучшие наборы и на отдельные детали, которые обязательно пригодятся вам для изучения:

Базовый набор ардуино для начинающих: Купить
Большой набор для обучения и первых проектов: Купить
Набор дополнительных датчиков и модулей: Купить
Ардуино Уно самая базовая и удобная модель из линейки: Купить
Беспаечная макетная плата для удобного обучения и прототипирования: Купить
Набор проводов с удобными коннекторами: Купить
Комплект светодиодов: Купить
Комплект резисторов: Купить
Кнопки: Купить
Потенциометры: Купить

Среда разработки Arduino IDE

Для написания, отладки и загрузки прошивок необходимо скачать и установить Arduino IDE. Это очень простая и удобная программа. На моем сайте я уже описывал процесс загрузки, установки и настройки среды разработки. Поэтому здесь я просто оставлю ссылки на последнюю версию программы и на статью с подробной инструкцией.

Версия Windows Mac OS X Linux
1.8.2

Язык программирования Ардуино

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

Для программирования Arduino используется упрощенная версия языка C++ с предопределенными функциями. Как и в других Cи-подобных языках программирования есть ряд правил написания кода. Вот самые базовые из них:

  • После каждой инструкции необходимо ставить знак точки с запятой (;)
  • Перед объявлением функции необходимо указать тип данных, возвращаемый функцией или void если функция не возвращает значение.
  • Так же необходимо указывать тип данных перед объявлением переменной.
  • Комментарии обозначаются: // Строчный и /* блочный */

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

Все прошивки для Arduino должны содержать минимум 2 функции. Это setup() и loop().

Функция setup

Функция setup() выполняется в самом начале и только 1 раз сразу после включения или перезагрузки вашего устройства. Обычно в этой функции декларируют режимы пинов, открывают необходимые протоколы связи, устанавливают соединения с дополнительными модулями и настраивают подключенные библиотеки. Если для вашей прошивки ничего подобного делать не нужно, то функция все равно должна быть объявлена. Вот стандартный пример функции setup():

Оценить статью
Добавить комментарий