Команди та функції ардуїно. Arduino та сумісні мови програмування. Змінні та типи даних

Вступ

Freeduino/Arduino програмується спеціальною мовою програмування – він заснований на C/C++, і дозволяє використовувати будь-які його функції. Строго кажучи, окремої мови Arduino немає, як і немає компілятора Arduino – написані програми перетворюються (з мінімальними змінами) на програму мовою C/C++, і потім компілятором AVR-GCC. Так що фактично, використовується спеціалізований для мікроконтролерів AVRваріант C/C++.

Різниця полягає в тому, що Ви отримуєте просте середовищерозробки, і набір базових бібліотек, що спрощують доступ до мікроконтролера периферії, що знаходиться «на борту».

Погодьтеся, дуже зручно розпочати роботу з послідовним портом на швидкості 9600 біт за секунду, зробивши виклик одним рядком:

Serial.begin(9600);

А при використанні «голого» C/C++ Вам довелося б розбиратися з документацією на мікроконтролер, і викликати щось подібне:

UBRR0H = ((F_CPU / 16 + 9600 / 2) / 9600 - 1) >> 8;
UBRR0L = ((F_CPU / 16 + 9600 / 2) / 9600 - 1);
sbi(UCSR0B, RXEN0);
sbi(UCSR0B, TXEN0);
sbi(UCSR0B, RXCIE0);

Тут коротко розглянуто основні функції та особливості програмування Arduino. Якщо Ви не знайомі з синтаксисом мов C/C++, радимо звернутися до будь-якої літератури з цього питання або Internet-джерел.

З іншого боку, всі приклади дуже прості, і швидше за все у Вас не виникне труднощів з розумінням вихідних текстів і написанням власних програм навіть без читання додаткової літератури.

Більш повна документація (на англійською) представлена ​​на офіційному сайті проекту - http://www.arduino.cc. Там же є форум, посилання на додаткові бібліотеки та їх опис.

За аналогією з описом на офіційному сайті проекту Arduino, під портом розуміється контакт мікроконтролера, виведений на роз'єм під відповідним номером. З іншого боку, існує порт послідовної передачі (COM-порт).

Структура програми

У своїй програмі Ви повинні оголосити дві основні функції: setup() та loop().

Функція setup() викликається один раз після кожного включення живлення або скидання плати Freeduino. Використовуйте її, щоб ініціалізувати змінні, встановити режими цифрових портів і т.д.

Функція loop() послідовно щоразу виконує команди, які описані в її тілі. Тобто. після завершення функції знову відбудеться її дзвінок.

Розберемо простий приклад:

void setup() // початкові установки
{
починаєтьсяSerial(9600); // Установка швидкості роботи серійного порту на 9600 біт/сек
pinMode(3, INPUT); // Установка 3-го порту на введення даних
}

// Програма перевіряє третій порт на наявність на ньому сигналу і посилає відповідь
// вигляді текстового повідомленняна послідовний порт комп'ютера
void loop() // Тіло програми
{
if (digitalRead(3) == HIGH) // Умова на опитування 3-го порту
serialWrite("H"); // Надсилання повідомлення у вигляді літери «Н» на COM-порт
else
serialWrite("L"); // Надсилання повідомлення у вигляді літери «L» на COM-порт
delay(1000); // Затримка 1 сек.
}

pinMode (порт, режим);

Опис:

Конфігурує вказаний порт для введення або виведення сигналу.

Параметри:

порт – номер порту, режим якого Ви бажаєте встановити (значення цілого типу від 0 до 13).

режим – або INPUT (введення) або OUTPUT (виведення).

pinMode(13, OUTPUT); //13й висновок буде виходом
pinMode(12, INPUT); //а 12й - входом

Примітка:

Аналогові входи можуть використовуватися як цифрові входи/виходи при зверненні до них за номерами з 14 (аналоговий вхід 0) по 19 (аналоговий вхід 5)

digitalWrite(порт, значення);

Опис:

Встановлює високий (HIGH) або низький (LOW) рівень напруги на вказаному порту.

Параметри:

порт: номер порту

значення: HIGH або LOW

digitalWrite(13, HIGH); // виставляємо 13-й висновок у «високий» стан

value = digitalRead (порт);

Опис:

Зчитує значення на вказаному порту

Параметри:

порт: номер опитуваного порту

Значення, що повертається: повертає поточне значення на порту (HIGH або LOW) типу int

int val;
val = digitalRead(12); // опитуємо 12-й висновок

Примітка:

Якщо до зчитуваного порту нічого не підключено, функція digitalRead () може безладно повертати значення HIGH або LOW.

Аналогове введення/виведення сигналу

value = analogRead(порт);

Опис:

Зчитує значення із зазначеного аналогового порту. Freeduino містить 6 каналів, аналого-цифрового перетворювача на 10 бітів кожен. Це означає, що вхідна напруга від 0 до 5В перетворюється на ціле значення від 0 до 1023. Роздільна здатність зчитування становить: 5 В/1024 значень = 0,004883 В/значення (4,883 мВ). Потрібно приблизно 100 нС (0.0001 С), щоб рахувати значення аналогового введення, так що максимальна швидкість зчитування - приблизно 10000 разів на секунду.

Параметри:

Значення, що повертається: повертає число типу int в діапазоні від 0 до 1023, лічене з зазначеного порту.

int val;
val = analogRead(0); // зчитуємо значення на 0м аналоговому вході

Примітка:

Аналогові стандартні порти визначені на введення сигналу і на відміну від цифрових портів їх не потрібно конфігурувати за допомогою виклику функції pinMode.

analogWrite(порт, значення);

Опис:

Виводить на порт аналогове значення. Ця функція працює на: 3, 5, 6, 9, 10 та 11 цифрових портах Freeduino.

Може застосовуватись для зміни яскравості світлодіода, для керування двигуном і т.д. Після виклику функції analogWrite, відповідний порт починає працювати в режимі широтно-імпульсного модулювання напруги доти, доки не буде наступного виклику функції analogWrite (або функцій digitalRead/digitalWrite на тому самому порту).

Параметри:

порт: номер опитуваного аналогового входу

значення: цілочисленне між 0 і 255. Значення 0 генерує 0 на зазначеному порті; значення 255 генерує +5 на зазначеному порту. Для значень між 0 і 255, порт починає швидко чергувати рівень напруги 0 і +5 - чим вище значення, тим, більш часто порт генерує рівень HIGH (5 В).

analogWrite(9, 128);// встановлюємо на 9 контакті значення еквівалентне 2,5В

Примітка:

Немає необхідності викликати функцію pinMode, щоб встановити порт на виведення сигналів перед викликом функції analogWrite.

Частота генерування сигналу – приблизно 490 Гц.

time = millis();

Опис:

Повертає число мілісекунд з моменту виконання Freeduino поточної програми. Лічильник переповниться та обнулиться приблизно через 9 годин.

Значення, що повертається: повертає значення типу unsigned long

unsigned long time; // оголошення змінної time типу unsigned long
time = millis(); // передача кількості мілісекунд

delay (час_мс);

Опис:

Зупиняє програму на задану кількість мілісекунд.

Параметри:

час_мс – час затримки програми у мілісекундах

delay(1000); //пауза 1 секунда

delayMicroseconds

delayMicroseconds(час_мкс);

Опис:

Зупиняє програму на задану кількість мікросекунд.

Параметри:

час_мкс – час затримки програми у мікросекундах

delayMicroseconds(500); //пауза 500 мікросекунд

pulseIn(порт, значення);

Опис:

Зчитує імпульс (високий або низький) з цифрового порту та повертає тривалість імпульсу в мікросекундах.

Наприклад, якщо параметр «значення» при виклику функції встановлений у HIGH, то pulseIn() очікує, коли на порт надійде високий рівень сигналу. З його надходження починається відлік часу до того часу, поки порт не надійде низький рівень сигналу. Функція повертає довжину імпульсу (високого рівня) у мікросекундах. Працює з імпульсами від 10 мікросекунд до 3 хвилин. Зверніть увагу, що ця функція не повертатиме результат, доки імпульс не буде виявлено.

Параметри:

порт: номер порту, з якого зчитуємо імпульс

значення: тип імпульсу HIGH чи LOW

Значення, що повертається: повертає тривалість імпульсу в мікросекундах (тип int)

int duration; // оголошення змінної duration типу int
duration = pulseIn(pin, HIGH); // Вимірюємо тривалість імпульсу

Послідовна передача даних

Freeduino має вбудований контролер для послідовної передачі даних, який може використовуватися як для зв'язку між Freeduino/Arduino пристроями, так зв'язку з комп'ютером. На комп'ютері відповідне з'єднання представлене USB COM-портом.

Зв'язок відбувається по цифрових портах 0 і 1, і тому Ви не зможете використовувати їх для цифрового введення/виводу, якщо використовуєте функції послідовної передачі даних.

Serial.begin(швидкість_передачі);

Опис:

Встановлює швидкість передачі інформації COM портубітах за секунду для послідовної передачі даних. Для того, щоб підтримувати зв'язок з комп'ютером, використовуйте одну з цих нормованих швидкостей: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, або 115200. портам 0 та 1.

Параметри:

швидкість_передачі: швидкість потоку даних у бітах за секунду.

Serial.begin(9600); //встановлюємо швидкість 9600 біт/сек

Serial.available

count = Serial.available();

Опис:

Прийняті послідовному портубайти потрапляють у буфер мікроконтролера, звідки Ваша програма може їх рахувати. Функція повертає кількість накопичених у буфері байт. Послідовний буфер може зберігати до 128 байт.

Значення, що повертається:

Повертає значення типу int – кількість байт, доступних для читання, у послідовному буфері, або 0 якщо нічого не доступно.

if (Serial.available() > 0) ( // Якщо в буфері є дані
// тут має бути прийом та обробка даних
}

char = Serial.read();

Опис:

Зчитує наступний байт із буфера послідовного порту.

Значення, що повертається:

Перший доступний байт вхідних даних із послідовного порту, або -1 якщо немає вхідних даних.

incomingByte = Serial.read(); // читаємо байт

Опис:

Очищає вхідний буфер порту послідовного. Дані, що знаходяться в буфері, втрачаються, і подальші виклики Serial.read() або Serial.available() будуть мати сенс для даних, отриманих після виклику Serial.flush().

Serial.flush(); // Очищаємо буфер - починаємо прийом даних "з чистого листа"

Опис:

Виведення даних на послідовний порт.

Параметри:

Функція має кілька форм виклику в залежності від типу та формату даних, що виводяться.

Serial.print(b, DEC) виводить ASCII-рядок - десяткове уявлення числа b.

int b = 79;

Serial.print(b, HEX) виводить ASCII-рядок - шістнадцяткове уявлення числа b.

int b = 79;

Serial.print(b, OCT) виводить ASCII-рядок - вісімкове уявлення числа b.

int b = 79;
Serial.print(b, OCT); //видасть у порт рядок «117»

Serial.print(b, BIN) виводить ASCII-рядок - двійкове уявлення числа b.

int b = 79;
Serial.print(b, BIN); //видасть порт рядок «1001111»

Serial.print(b, BYTE) виводить молодший байт числа b.

int b = 79;
Serial.print(b, BYTE); //Виведе число 79 (один байт). У моніторі
//Послідовного порту отримаємо символ «O» - його
//код дорівнює 79

Serial.print(str) якщо str – рядок чи масив символів, побайтно передає str на COM-порт.

char bytes = (79, 80, 81); //масив із 3 байт зі значеннями 79,80,81
Serial.print("Here our bytes:"); //Виводить рядок «Here our bytes:»
Serial.print(bytes); //виводить 3 символи з кодами 79,80,81 -
// це символи "OPQ"

Serial.print(b) якщо b має тип byte чи char, виводить у порт саме число b.

char b = 79;
Serial.print(b); //видасть у порт символ «O»

Serial.print(b) якщо b має цілий тип, виводить у порт десяткове уявлення числа b.

int b = 79;
Serial.print(b); //видасть у порт рядок «79»

Опис:

Функція Serial.println подібна до функції Serial.print, і має такі ж варіанти виклику. Єдина відмінність полягає в тому, що після даних додатково виводяться два символи - символ повернення каретки (ASCII 13, або "r") і символ нової лінії (ASCII 10, або "n").

Приклад 1 і приклад 2 виведуть в порт те саме:

int b = 79;
Serial.print(b, DEC); //видасть у порт рядок «79»
Serial.print("r"); //виведе символи "\r\n" – переклад рядка
Serial.print(b, HEX); //видасть у порт рядок «4F»
Serial.print("\r\n"); // виведе символи "\r\n" – переклад рядка

int b = 79;
Serial.println(b, DEC); //видасть у порт рядок «79 n»
Serial.println(b, HEX); //видасть у порт рядок «4F\n»

У моніторі послідовного порту отримаємо.

Цей урок дає мінімальні знання, необхідні для програмування систем Ардуїно мовою C. Можна тільки переглянути його і надалі використовувати як довідкову інформацію. Тим, хто програмував на C в інших системах, можна пропустити статтю.

Повторю, що це є мінімальна інформація. Опис покажчиків, класів, рядкових змінних тощо. буде дано у наступних уроках. Якщо щось виявиться незрозумілим, не турбуйтесь. У подальших уроках буде багато прикладів та пояснень.

Структура програми Ардуїно.

Структура програми Ардуїно досить проста й у мінімальному варіанті і двох частин setup() і loop().

void setup() (

void loop() (

Функція setup() виконується один раз при включенні живлення або скидання контролера. Зазвичай у ній відбуваються початкові установки змінних, регістрів. Функція повинна бути присутня в програмі, навіть якщо в ній нічого немає.

Після завершення setup() керування переходить до функції loop(). Вона у нескінченному циклі виконує команди, записані у її тілі (між фігурними дужками). Власне, ці команди і здійснюють усі алгоритмічні дії контролера.

Початкові правила синтаксису мови C.

; крапка з комоюВирази можуть містити скільки завгодно багато прогалин, переносів рядків. Ознакою завершення виразу є символ ”точка з комою”.

z = x + y;
z = x
+ y;

( ) фігурні дужкивизначають блок функції чи виразів. Наприклад, у функціях setup() та loop().

/* … */ блок коментаряобов'язково закрити.

/* це блок коментаря */

// однорядковий коментар, Закривати не треба, діє до кінця рядка.

// це один рядок коментаря

Змінні та типи даних.

Змінна це комірка оперативної пам'яті, у якій зберігається інформація. Програма використовує змінні зберігання проміжних даних обчислень. Для обчислень можуть бути використані дані різних форматів, різної розрядності, тому змінні в мові C мають такі типи.

Тип даних Розрядність, біт Діапазон чисел
boolean 8 true, false
char 8 -128 … 127
unsigned char 8 0 … 255
byte 8 0 … 255
int 16 -32768 … 32767
unsigned int 16 0 … 65535
слово 16 0 … 65535
long 32 -2147483648 … 2147483647
unsigned long 32 0 … 4294967295
short 16 -32768 … 32767
float 32 -3.4028235+38 … 3.4028235+38
double 32 -3.4028235+38 … 3.4028235+38

Типи даних вибираються з необхідної точності обчислень, форматів даних тощо. Не варто, наприклад, для лічильника, що рахує до 100, вибирати тип long. Працюватиме, але операція займе більше пам'яті даних та програм, вимагатиме більше часу.

Оголошення змінних.

Вказується тип даних, а потім ім'я змінної.

int x; // оголошення змінної з ім'ям x типу int
float widthBox; // оголошення змінної з ім'ям widthBox типу float

Усі змінні мають бути оголошені до використання.

Змінна може бути оголошена в будь-якій частині програми, але залежить від того, які блоки програми можуть її використовувати. Тобто. у змінних є області видимості.

  • Змінні, оголошені на початку програми до функції void setup(), вважаються глобальними і доступні в будь-якому місці програми.
  • Локальні змінні оголошуються всередині функцій або блоків, таких як цикл for, і можуть використовуватися тільки в оголошених блоках. Можливі кілька змінних із одним ім'ям, але різними областями видимості.

int mode; // змінна доступна всім функціям

void setup() (
// Порожній блок, початкові установки не потрібні
}

void loop() (

long count; // змінна count доступна лише функції loop()

for (int i=0; i< 10;) // переменная i доступна только внутри цикла
{
i++;
}
}

При оголошенні змінної можна задати початкове значення (проініціалізувати).

int x = 0; // оголошується змінна x з початковим значенням 0
char d = 'a'; // оголошується змінна d з початковим значенням, рівним коду символу ”a”

При арифметичних операціях з різними типамиданих відбувається автоматичне перетворення типів даних. Але найкраще завжди використовувати явне перетворення.

int x; // змінна int
char y; // змінна char
int z; // змінна int

z = x + (int) y; // змінна y явно перетворена на int

Арифметичні операції.

Операції відносин.

Логічні операції.

Операції над покажчиками.

Бітові операції.

& І
| АБО
^ ВИКЛЮЧНЕ АБО
~ ІНВЕРСІЯ
<< Сдвиг ліворуч
>> ЗРУГ ВПРАВО

Операції змішаного надання.

Вибір варіантів, керування програмою.

Оператор IFперевіряє умову у дужках і виконує наступне вираз чи блок у фігурних дужках, якщо умова істинна.

if (x == 5) // якщо x=5, то виконується z=0
z=0;

if (x > 5) // якщо x >
( z = 0; y = 8; )

IF … ELSEдозволяє зробити вибір між двома варіантами.

if (x > 5) // якщо x > 5, виконується блок z=0, y=8;
{
z=0;
y=8;
}

{
z=0;
y=0;
}

ELSE IF- дозволяє зробити множинний вибір

if (x > 5) // якщо x > 5, виконується блок z=0, y=8;
{
z=0;
y=8;
}

else if (x > 20) // якщо x > 20 виконується цей блок
{
}

else // інакше виконується цей блок
{
z=0;
y=0;
}

SWITCH CASE- множинний вибір. Дозволяє порівняти змінну (у прикладі x) з кількома константами (у прикладі 5 і 10) і виконати блок, в якому змінна дорівнює константі.

switch (x) (

case 5:
// код виконується, якщо x = 5
break;

case 10:
// код виконується, якщо x = 10
break;

default:
// код виконується якщо не збіглося жодне попереднє значення
break;
}

Цикл FOR. Конструкція дозволяє організовувати цикли із заданою кількістю ітерацій. Синтаксис виглядає так:

for (дія до початку циклу;
умова продовження циклу;
дію наприкінці кожної ітерації) (

// код тіла циклу

Приклад циклу зі 100 ітерацій.

for (i=0; i< 100; i++) // начальное значение 0, конечное 99, шаг 1

{
sum = sum + I;
}

Цикл WHILE. Оператор дозволяє організовувати цикли з конструкцією:

while (вираз)
{
// код тіла циклу
}

Цикл виконується доти, доки вираз у дужках істинний. Приклад циклу на 10 ітерацій.

x = 0;
while (x< 10)
{
// код тіла циклу
x++;
}

DO WHILE- Цикл з умовою на виході.

do
{
// код тіла циклу
) while (вираз);

Цикл виконується поки що вираз істинно.
BREAK- Оператор виходу з циклу. Використовується для того, щоб перервати виконання циклів for, while, do while.

x = 0;
while (x< 10)
{
if (z> 20) break; // якщо z > 20, вийти з циклу
// код тіла циклу
x++;
}

GOTO- Оператор безумовного переходу.

goto metka1; // Перехід на metka1
………………
metka1:

CONTINUE- Пропуск операторів до кінця тіла циклу.

x = 0;
while (x< 10)
{
// код тіла циклу
if (z> 20) continue; // якщо z> 20, то повернутися на початок тіла циклу
// код тіла циклу
x++;
}

Масиви.

Масив це область пам'яті, де послідовно зберігаються кілька змінних.

Оголошується масив так.

int ages; // масив із 10 змінних типу int

float weight; // масив зі 100 змінних типу float

При оголошенні масиви можна ініціалізувати:

int ages = (23, 54, 34, 24, 45, 56, 23, 23, 27, 28);

Звертаються до змінних масивів так:

x = ages; // x надається значення з 5 елемента масиву.
ages = 32; // 9 елементу масиву задається значення 32

Нумерація елементів масивів завжди із нуля.

Опції.

Функції дозволяють виконувати ті самі дії з різними даними. У функції є:

  • ім'я, яким її викликають;
  • аргументи - дані, які функція використовує для обчислення;
  • тип даних, що повертається функцією.

Описується функція користувача поза функціями setup() і loop().

void setup() (
// код виконується один раз під час запуску програми
}

void loop() (
// Основний код, виконується у циклі
}

// оголошення функції користувача з ім'ям functionName
type functionName(type argument1, type argument1, … , type argument)
{
// Тіло функції
return();
}

Приклад функції обчислює суму квадратів двох аргументів.

int sumQwadr (int x, int y)
{
return (x * x + y * y);
}

Виклик функції відбувається так:

d=2; b = 3;
z = sumQwadr (d, b); // z буде сума квадратів змінних d і b

Функції бувають вбудовані, користувацькі, що підключаються.

Дуже коротко, але цих даних має вистачити, щоб почати писати програми на C для систем Ардуїно.

Останнє, що я хочу розповісти в цьому уроці, як прийнято оформлювати програми на C. Думаю, якщо ви читаєте цей урок вперше, варто пропустити цей розділ і повернуться до нього пізніше, коли оформлятиме.

Головна мета зовнішнього оформленняпрограм це покращити читаність програм, зменшити кількість формальних помилок. Тому для досягнення цієї мети можна сміливо порушувати усі рекомендації.

Імена у мові C.

Імена, що представляють типи даних, мають бути написані у змішаному регістрі. Перша буква імені має бути заголовна (верхній регістр).

Signal, TimeCount

Змінні мають бути записані іменами в змішаному регістрі, перша літера мала (нижній регістр).

Рубрика: . Ви можете додати до закладок.

Мова програмування Ардуїно ґрунтується на мові C/C++, яка широко поширена у світі програмування.

Цільовою аудиторією Ардуїно є непрофесійні користувачі у сфері роботобудування та найпростіших систем автоматики. Основною продукцією є набір плат, комбінуючи які, можливо, створювати різні пристрої, здатні виконувати широкий ряд завдань.

Як приклад, із набору плат, що випускаються даною фірмою, можна зібрати автоматичну годівницю для своїх домашніх тварин. І це лише один з найбільш простих прикладів. Сфера їхнього можливого застосування обмежується лише фантазією користувачів.

Крім друкованих плат, що випускаються під торговою маркою Arduino, вони мають власна мовапрограмування Ардуїно, який ґрунтується на широко відомій у колі програмістів мові C/C++. Давайте більш докладно розберемося, що він собою представляє.

Мова програмування Ардуїно досить проста в освоєнні, оскільки основною цільовою аудиторією його застосування є любителі. Однак вважається однією з найкращих мов для програмування мікроконтролерів.

Крапка з комою;

Точка з комою повинна йти за кожним виразом, написаним мовою програмування Arduino. Наприклад:

Int LEDpin = 9;

У цьому вся виразі ми присвоюємо значення змінної і зверніть увагу до точку з комою наприкінці. Це говорить компілятору, що ви закінчили шматок коду та переходите до наступного фрагменту. Крапка з комою в коді Ардуїно відокремлює одне вираз від іншого.

Подвійна зворотна коса характеристика для однорядкових коментарів //

// Все що йде після подвійної косої межі буде сірим і не зчитуватиметься програмою

Коментарі це те, що ви використовуєте для коментування коду. Гарний код добре коментується. Коментарі призначені для того, щоб повідомляти вам і всім, хто міг би натрапити на ваш код, як ви думали, коли ви його написали. Хорошим коментарембуло б щось на зразок цього:

// До цього піну Arduino підключаємо світлодіод int LEDpin = 9;

Тепер, навіть через 3 місяці, коли я переглядаю цю програму, я знаю про те, куди підключався світлодіод.

Компілятор ігноруватиме коментарі, тому ви можете писати все, що вам подобається. Якщо вам потрібно багато тексту для коментаря, ви можете використовувати багаторядковий коментар, показаний нижче:

/* Багаторядковий коментар відкривається одним зворотним слешем, за яким слідує зірочка. Все наступне буде виділено сірим кольором і ігноруватиметься компілятором, поки ви не закриєте коментар, використовуючи спочатку зірочку, а потім зворотну косу межу */

Коментарі схожі на виноски коду, але більш поширені, ніж ті, що ставлять у книгах внизу сторінок.

Фігурні дужки ( )

Фігурні дужки використовуються для того, щоб додати інструкції, які виконує функція (ми обговоримо функції далі). Завжди є відкрита фігурна дужка і фігурна дужка, що закриває. Якщо ви забудете закрити фігурну дужку, компілятор виведе код помилки.

Void loop() ( //ця фігурна дужка відкривається //крута програма тут )//ця фігурна дужка закривається

Пам'ятайте - ніяка фігурна дужка не може бути закрита!

Функції ()

Тепер настав час поговорити про функції. Функції - це фрагменти коду, які використовуються так часто, що вони інкапсульовані в певні ключові слова, щоб ви могли використовувати їх легко. Наприклад, функцією може бути наступний набір інструкцій, якщо вам потрібно помити собаку:

  1. Отримати відро
  2. Заповнити його водою
  3. Додати мило
  4. Знайти собаку
  5. Намилити собаку
  6. Помити собаку
  7. Сполоснути собаку
  8. Посушити собаку
  9. Відкласти відро

Цей набір простих інструкційможе бути інкапсульовано у функцію, яку ми можемо назвати WashDog. Щоразу, коли ми хочемо виконати всі ці інструкції, ми просто набираємо WashDog і вуаля – всі інструкції виконуються.

Ардуїно має певні функції, які часто використовуються в середовищі . Коли ви вводите їх, ім'я функції буде помаранчевим. Наприклад, функція pinMode() є загальною функцією, яка використовується для позначення режиму виведення Arduino.

А що із круглими дужками після функції pinMode? Для багатьох функцій потрібні аргументи. Аргумент - це інформація, яку функція використовує під час її запуску. Для нашої функції WashDog аргументами можуть бути ім'я собаки та тип мила, а також температура та розмір відра.

PinMode(13, OUTPUT); //Встановлює режим виводу Arduino

Аргумент 13 відноситься до висновку 13, а OUTPUT - режим, в якому ви хочете, щоб пін працював. Коли ви вводите ці аргументи, це термінологія називається передачею даних, ви передаєте необхідну інформацію в функції. Не всім функціям потрібні аргументи, але відкриття та закриття круглих дужок залишаються, хоч і порожніми.

Millis(); //Отримує час у мілісекундах за який Arduino запускається

Зверніть увагу, що слово OUTPUT зазвичай синього кольору. У мові програмування Ардуїно є певні ключові слова, які часто використовуються, а синій колір допомагає їх ідентифікувати. Arduino IDE автоматично перетворює їх на синій колір.

void setup()

Функція setup (), як випливає з назви, використовується для налаштування плати Arduino. Ардуїно виконує весь код, який міститься між фігурними дужками після setup() лише один раз. Типові речі, які відбуваються в setup() - це, наприклад, встановлення режимом контактів:

Void setup() ( // код між фігурними фігурними дужками виконується лише один раз)

Можливо, вам цікаво, що означає void перед функцією setup(). Void означає, що функція не повертає інформацію.

Деякі функції повертають значення – наша функція DogWash може повернути кількість відер, необхідних для очищення собаки. Функція analogRead() повертає ціле значення від 0 до 1023. Якщо це зараз здається трохи дивним, не турбуйтеся, оскільки ми охоплюватимемо кожну загальну функцію Arduino у міру продовження курсу.

Давайте розглянемо пару речей, які ви повинні знати про setup():

  1. setup() запускається лише один раз;
  2. setup() має бути першою функцією в скетчі Ардуїно;
  3. setup() повинна мати фігурні дужки, що відкриваються і закривають.

void loop()

Ви повинні любити розробників Arduino, тому вони зробили так, що імена функцій говорять самі за себе. Як випливає з назви, весь код між фігурними дужками loop() повторюється знову і знову, а слово loop перекладається саме як "цикл". Функція loop() - це місце, де буде тіло вашої програми.

Як і у випадку з setup(), функція loop() не повертає жодних значень, тому перед ним передує слово void.

Void loop() ( //будь-який код, який ви тут задаєте, виконується знову і знову )

Вам здається дивним, що код працює в одному великому циклі? Це очевидна відсутність варіації – ілюзія. Більшість вашого коду буде мати певні умови очікування, які викличуть нові дії.

Чи існують ще програми з Ардуїно?

Крім офіційної Arduino IDE, існують програми сторонніх розробників, які пропонують свої продукти для роботи з мікроконтролерами на базі Ардуїно.

Аналогічний набір функцій може надати програма, яка називається Processing. Вона дуже схожа з Arduino IDE, тому що обидві зроблені на одному двигуні. Processing має великий набір функцій, який мало поступається оригінальній програмі. За допомогою завантажуваної бібліотеки Serial користувач може створити зв'язок між передачею даних, які передають один одному плату та Processing. При цьому ми можемо змусити плату виконувати програми прямо з нашого ПК.

Існує ще одна цікава версіявихідної програми. Називається вона B4R, і головною її відмінністю є використання як основи не мови сі, а інша мова програмування – Basic. Даний програмний продуктє безкоштовним. p align="justify"> Для роботи з ним існують хороші самовчителі, у тому числі і написані творцями даного продукту.

Є й платні варіанти Arduino IDE. Одним із таких є програма PROGROMINO. Головною її перевагою вважається можливість автодоповнення коду. При складанні програми вам більше не потрібно буде шукати інформацію у довідниках. Програма сама запропонує вам можливі варіантивикористання тієї чи іншої процедури. У її набір входить ще безліч цікавих функцій, відсутні в оригінальній програмі і здатні полегшити вам роботу з платами.

Конкуренти Ардуїно

Даний ринок з виробництва мікроконтролерів для створення різних електронних схем та робототехніки має багато шанувальників по всій земній кулі. Ця ситуація сприяє появі ринку як конкурентів, які пропонують подібні продукти. Крім них випускається значна кількість підробок різної якості. Одні дуже важко відрізнити від оригіналів, адже вони мають ідентичну якість, інші мають дуже погані характеристики і можуть зовсім не працювати з оригінальними продуктами.

Існують навіть плати Arduino, що підтримують роботу мікропроцесорів з інтерпретаторами JavaScript. Актуальні вони насамперед для тих, хто бажає використовувати мову Java замість Сі. Адже він більш простий, і дозволяє досягати результатів із підвищеною швидкістю. Однак ці плати є дорожчими по відношенню до ардуїно, що є суттєвим мінусом.

Якщо ви шукаєте собі хобі і вам цікаво такий напрямок, як електротехніка, ви можете вибирати для цього Arduino. Плюсів таке хобі має багато. Ви розвиватиметеся в інтелектуальному плані, тому що це заняття вимагатиме від вас знань у різних галузях.

Окрім розваг, ваше хобі допоможе вам у створенні маси корисних виробів, які ви зможете використовувати для полегшення повсякденному житті. З кожним разом ви знаходитимете все нові та нові способи використання вашого захоплення.

Освоїти це заняття буде не так складно, завдяки наявності великої кількостіпідручників та самовчителів. Надалі ви знайдете безліч однодумців по всьому світу, які поділяться з вами своїми знаннями та дадуть вам стимул для здійснення нових експериментів!

Вивчення мікроконтролерів здається чимось складним та незрозумілим? До появи Арудіно - це було справді нелегко і вимагало певний набір програматорів та іншого обладнання.

Це своєрідний електронний конструктор. Початкове завдання проекту - це дозволити людям легко навчатися програмування електронних пристроївпри цьому приділяючи мінімальний час електронній частині.

Складання найскладніших схем і з'єднання плат може здійснюватися без паяльника, а за допомогою перемичок з роз'ємними з'єднаннями тато і мама. Так можуть підключатися як начіпні елементи, так і плати розширення, які на лексиконі ардуїнщиків звати просто "Шилди" (shield).

Яку першу плату Arduino купити новачкові?

Базовою та найпопулярнішою платою вважається. Ця плата розміром нагадує кредитну картку. Досить велика. Більшість шилдів, які є у продажу, ідеально підходять до неї. На платі для підключення зовнішніх пристроїврозташовані гнізда.

У вітчизняних магазинах на 2017 рік її ціна становить близько 4-5 доларів. на сучасних моделяхїї серцем є Atmega328.

Зображення плати ардуїно та розшифровка функцій кожного висновку, Arduino UNO pinout

Мікроконтролер на цій платі це довга мікросхема в корпусі DIP28, що говорить про те, що він має 28 ніжок.

Наступна за популярністю плата, коштує майже вдвоє дешевше за попередню - 2-3 долари. Це плата. Актуальні плати побудовані на тому ж Atmega328, функціонально вони аналогічні з UNO, відмінності в розмірах і вирішенні узгодження з USB, про це пізніше докладніше. Ще однією відмінністю є те, що для підключення до плати пристроїв передбачені штекери у вигляді голок.

Кількість пінів (ніжок) цієї плати збігається, але ви можете спостерігати, що мікроконтролер виконаний у компактному корпусі TQFP32, в корпусі додані ADC6 і ADC7, інші дві «зайвих» ніжки дублюють шину живлення. Її розміри досить компактні – приблизно, як великий палець вашої руки.

Третя за популярністю плата - це, на ній немає USB порта для підключення до комп'ютера, як здійснюється зв'язок, я розповім трохи пізніше.

Це найменша плата з усіх розглянутих, в іншому вона аналогічна попереднім двом, а її серцем, як і раніше, є Atmega328. Інші плати не розглядатимемо, оскільки це стаття для початківців, та й порівняння плат - це тема окремої статті.

У верхній частині схема підключення USB-UART, пін «GRN» - розведений на ланцюг скидання мікроконтролера, може називатися інакше, для чого це потрібно ви дізнаєтеся далі.

Якщо UNO зручна для макетування, то Nano та Pro Mini зручні для фінальних версій вашого проекту, тому що займають мало місця.

Як підключити Arduino до комп'ютера?

Arduino Uno і Nano підключаються до комп'ютера USB. При цьому немає апаратної підтримки USB порту, тут застосовано схемне рішення перетворення рівнів, зазвичай називається USB-to-Serial або USB-UART (RS-232). При цьому мікроконтролер прошить спеціальний Arduino завантажувач, який дозволяє прошиватися по цих шинах.

В Arduino Uno реалізовано цей зв'язок на мікроконтролері з підтримкою USB - ATmega16U2 (AT16U2). Виходить така ситуація, що додатковий мікроконтролер на платі потрібний для прошивки основного мікроконтролера.

Arduino Nano це реалізовано мікросхемою FT232R, або її аналогом CH340. Це не мікроконтролер - це перетворювач рівнів, цей факт полегшує складання Arduino Nano з нуля своїми руками.

Зазвичай драйвера встановлюються автоматично при підключенні плати Arduino. Однак, коли я купив китайську копію Arduino Nano, пристрій був упізнаний, але він не працював, на перетворювачі була наклеєна кругла наклейка з даними про дату випуску, не знаю навмисне це було зроблено, але відклеївши її я побачив маркування CH340.

До цього я не стикався з таким і думав, що всі USB-UART перетворювачі зібрані на FT232, довелося завантажити драйвера, їх дуже легко знайти на запит Arduino ch340 драйвера. Після простої установки – все запрацювало!

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

Що робити, якщо на моїй платі немає USB?

Плата Arduino Pro Mini має менші габарити. Це досягли тим, що прибрали USB роз'ємдля прошивки і цей USB-UART перетворювач. Тому її потрібно докупити окремо. Найпростіший перетворювач на CH340 (найдешевший), CPL2102 і FT232R, продається коштує від 1 долара.

При покупці зверніть увагу, на яку напругу розрахований цей перехідник. Pro mini буває у версіях 3.3 та 5 В, на перетворювачах часто розташований джампер для перемикання напруги живлення.

При прошивці Pro Mini безпосередньо перед її початком необхідно натискати на RESET, однак у перетворювачах з DTR це робити не потрібно, схема підключення на малюнку нижче.

Стикуються вони спеціальними клемами "Мама-Мама" (female-female).

Власне, всі з'єднання можна зробити за допомогою таких клем (Dupont), вони бувають як із двох сторін із гніздами, так і зі штекерами, так і з одного боку гніздо, з другого штекер.

Як писати програми для Arduino?

Для роботи зі скетчами (назва прошивки мовою ардуїнщиків), є спеціальне інтегроване середовище для розробки Arduino IDE, завантажити безкоштовно його можна з офіційного сайту або з будь-якого тематичного ресурсу, із встановленням проблем зазвичай не виникає.

Такий вигляд має інтерфейс програми. Писати програми можна спеціально розробленою для ардуїно спрощеною мовою C AVR, по суті це набір бібліотек, який називають Wiring, а також чистим C AVR. Використання якого полегшує код та прискорює його роботу.

У верхній частині вікна є звичне меню, де можна відкрити файл, налаштування, вибрати плату, з якою ви працюєте (Uno, Nano і багато інших) а також відкрити проекти з готовими прикладами коду. Нижче розташований набір кнопок для прошивки, призначення клавіш ви побачите на малюнку нижче.

У нижній частині вікна - область для виведення інформації про проект, стан коду, прошивки та наявність помилок.

Основи програмування в Arduino IDE

На початку коду потрібно оголосити змінні та підключити додаткові бібліотеки, якщо вони є, робиться це так:

#include biblioteka.h; // підключаємо бібліотеку під назвою “Biblioteka.h”

#define peremennaya 1234; // Оголошуємо змінну зі значенням 1234

Команда Define дають компілятору самому вибрати тип змінної, але ви можете його задати вручну, наприклад, цілий int, або з плаваючою точкою float.

int led = 13; // Створили змінну “led” і надали їй значення «13»

Програма може визначати стан піна, як 1 або 0. 1 -це логічна одиниця, якщо пін 13 дорівнює 1, то напруга на його фізичній ніжці дорівнюватиме напруги живлення мікроконтролера (для ардуїно UNO і Nano - 5 В)

Запис цифрового сигналуздійснюється командою digitalWrite (пін, значення), наприклад:

digitalWrite(led, high); / / Запис одиниці в пін 13 (ми його оголосили вище) балка. Одиниці.

Як ви могли зрозуміти звернення до портів, йде по нумерації на платі, що відповідає цифрою. Ось приклад аналогічного попереднього коду:

digitalWrite (13, high); // встановлюємо висновок 13 в едицу

Часто потрібна функція затримки часу викликається командою delay(), значення якої задається в мілісекундах, мікросекунди досягаються за допомогою

delayMicroseconds() Delay (1000); //мікроконтролер чекатиме 1000 мс (1 секунду)

Налаштування портів на вхід та вихід задаються у функції void setup(), командою:

pinMode(NOMERPORTA, OUTPUT/INPUT); // аргументи - назва змінної чи номер порту, вхід чи вихід вибір

Розуміємо першу програму «Blink»

Як своєрідний «Hello, world» для мікроконтролерів є програма миготіння світлодіодом, давайте розберемо її код:

Спочатку командою pinMode ми сказали мікроконтролеру призначити порт зі світлодіодом на вихід. Ви вже помітили, що в коді немає оголошення змінної “LED_BUILTIN”, річ у тому, що в платах Uno, Nano та інших із заводу до 13-го висновку підключений вбудований світлодіод і він розпаяний на платі. Він може бути використаний вами для індикації у ваших проектах або для найпростішої перевірки ваших програм-мигалок.

Далі ми встановили висновок, до якого підпаяний світлодіод в одиницю (5 В), наступний рядокзмушує МК почекати 1 секунду, а потім встановлює пін LED_BUILTIN в значення нуля, чекає секунду і програма повторюється по колу, таким чином, коли LED_BUILTIN дорівнює 1 - світлодіод (та й будь-яке інше навантаження підключене до порту) увімкнено, коли в 0 - вимкнено.

Читаємо значення з аналогового порту та використовуємо прочитані дані

Мікроконтролер AVR Atmega328 має вбудований 10-бітний аналогово-цифровий перетворювач. 10 біт АЦП дозволяє зчитувати значення напруга від 0 до 5 вольт, з кроком в 1/1024 від усього розмаху амплітуди сигналу (5 В).

Щоб було зрозуміліше розглянемо ситуацію, припустимо значення напруги на аналоговому вході 2.5, значить мікроконтролер прочитає значення з піна «512», якщо напруга дорівнює 0 - «0», а якщо 5 - (1023). 1023 - оскільки рахунок йде з 0, тобто. 0, 1, 2, 3 і т.д. до 1023 – всього 1024 значення.

Ось як це виглядає в коді, на прикладі стандартного скетчу "analogInput"

int sensorPin = A0;

int ledPin = 13;

int sensorValue = 0;

pinMode(ledPin, OUTPUT);

sensorValue = analogRead(sensorPin);

digitalWrite(ledPin, HIGH);

delay(sensorValue);

digitalWrite(ledPin, LOW);

delay(sensorValue);

Оголошуємо змінні:

    Ledpin – самостійно призначаємо пін із вбудованим світлодіодом на вихід та даємо індивідуальне ім'я;

    sensorPin - аналоговий вхід, задається відповідно до маркування на платі: A0, A1, A2 і т.д.;

    sensorValue - змінна для зберігання цілого чисельного прочитаного значення та подальшої роботи з ним.

Код працює так: sensorValue зберігаємо прочитане з sensorPin аналогове значення (команда analogRead). - тут робота з аналоговим сигналомзакінчується, далі все як у попередньому прикладі.

Записуємо одиницю в ledPin, світлодіод вмикається і чекаємо на час рівний значенню sensorValue, тобто. від 0 до 1023 мілісекунд. Вимикаємо світлодіод і знову чекаємо на цей період часу, після чого код повторюється.

Таким чином, положенням потенціометра ми задаємо частоту миготінь світлодіода.

Функція map для Арудіно

Не всі функції для виконавчих механізмів (мені жодної не відомо) як аргумент підтримують «1023», наприклад, сервопривід обмежений кутом повороту, тобто на підлогу оборота (180 градуов) (підлога обороту) сервомоторчика максимальний аргумент функції дорівнює «180»

Тепер про синтаксис: map (значення, яке ми переводимо, мінімальна величина вхідного, максимальна величина вхідного, мінімальна вихідного, максимальна вихідного значення).

У коді це виглядає так:

(map(analogRead(pot), 0, 1023, 0, 180));

Ми зчитуємо значення з потенціометра (analogRead(pot)) від 0 до 1023, а на виході отримуємо числа від 0 до 180

Значення карти величин:

На практиці застосуємо це до роботи коду того ж сервоприводу, погляньте на код з Arduino IDE, якщо ви уважно читали попередні розділи, він пояснення не вимагає.

І схема підключення.

Висновки Ардуїно – дуже зручний засіб для навчання роботи з мікроконтролерами. А якщо використовувати чистий C AVR, або як його іноді називають "Pure C" - ви значно зменшите вагу коду, і його більше поміститися в пам'ять мікроконтролера, в результаті ви отримаєте відмінну платню відладки заводського виконання з можливістю прошивки по USB.

Мені подобається Ардуїно. Шкода, що її багато досвідчених програмістів мікроконтролерів безпідставно сварять, що вона надто спрощена. Спрощена, в принципі, тільки мова, але ніхто не змушує користуватися саме ним, плюс ви можете прошити мікроконтролер через ICSP роз'єм, і залити туди той код, який вам хочеться, без будь-яких непотрібних бутлоадерів.

Для тих, хто хоче програтися з електронікою, як просунутий конструктор - чудово підійде, а для досвідчених програмістів як плата, яка не вимагає складання, теж стане корисною!

Ще більше інформації про Ардуїно та особливості його використання у різних схемах дивіться в електронній книзі - .

Почати свій шлях в IT буває дуже складно хоча б просто тому, що, дивлячись на навколишні технології, неможливо відокремити «залізний» інтерес від програмного. З одного боку - бажання створити пристрій із бездоганним зовнішнім виглядом, безліччю датчиків та безмежними можливостями, з іншого - таїнство обробки даних, прагнення максимально збільшити швидкодію, не нехтуючи функціональністю. Arduino - перший крок до великих винаходів, що не вимагає ні глибоких знань схемотехніки, ні досвіду програмування.

Що таке Arduino

Якщо називати речі своїми іменами, то Arduino – це конструктор для тих, кому набридло бачити марні образи та захотілося хоч трохи наділити їх життям. У найпростішому випадку Arduino - друкована плата, де розташований контролер, кварцовий генератор, АЦП/ЦАП, кілька роз'ємів, діодів і кнопок. Решта – справа рук господаря: хочете – створюйте робота, хочете – програмно-апаратну платформу для «розумного» будинку, ну або забудьте про практичну користь і розважайтеся.

Звісно, ​​залежно від цього. наскільки далеко ви хочете зайти у своїх експериментах, чи ви хочете отримувати фільтроване задоволення або зробити з Arduino платформу для власного заробітку, вам доведеться вдосконалюватися і в проектуванні заліза, і у вивченні мов програмування. Про останній сьогодні трохи докладніше.

Arduino досить обмежена платформа щодо можливостей програмування, особливо в порівнянні з Raspberry Pi. У силу того, що поріг входу непристойно низький (базовий Tutorial займає 3 аркуші формату A4), то розраховувати на достатню кількість мов без підключення додаткових модулів не доводиться. За основу тут прийнято C/C++, але з використанням різних IDE та бібліотек ви отримаєте доступ до оперування Python, C#, Go, а також таких дитячих розваг, як Snap! та ArduBlock. Про те, як, коли і кому їх використовувати, поговоримо далі.

C/C++

Базова мова платформи Arduino, яка з деякими доробками та спрощеннями використовується у стандартній програмній оболонці. Знайти всі доступні команди «для новачка» можна, але ніхто не заважає вам скористатися вихідними можливостями мови C++, ніяких надбудов не потрібно. Якщо ж є бажання пограти з «чистим» C, то до ваших послуг програма, призначена, як випливає з назви, для взаємодії ОС Windows та МК серії AVR, які використовуються на Arduino. Докладніше керівництво можете прочитати ось.

Ardublock

Тимчасово відійдемо від мов дорослих до улюбленої дитини Scratch, а вірніше до його адаптації - Ardublock. Тут все те саме, але з адаптацією до вашої платформи: кольорові блоки, конструктор, російські назви, найпростіша логіка. Такий варіант чудово підійде навіть тим, хто з програмуванням не знайомий зовсім. Подібно до того, як у мові Logo ви можете переміщати віртуальну черепашку віртуальною площиною, тут за допомогою нехитрих операцій ви можете зацікавити дитину реальною інтерпретацією її програмних дій.

Так, до речі, для використання необхідно на стандартне середовище Arduino IDE встановити . Останні версіїкраще не вистачати, вони досить складні, спершу підійде датована кінцем 2013 року. Для встановлення завантажений файл перейменовуємо в ardublock-all і запихаємо в папку Мої документи/Arduino/tools/ArduBlockTool/tool. Якщо її немає - створюємо. Якщо щось не зрозуміли, то ось докладніше.

Snap!

Порівняно з Ardublock, Snap! має розширені можливості у вигляді додаткових блоків, можливості використання списків та функцій. Тобто Snap! загалом і в цілому вже схожий на дорослу мову програмування, не вважаючи, що вам, як і раніше, необхідно грати в конструктор коду.

Щоб використовувати цю мову, доведеться сходити на сайт snap4arduino.org і завантажити необхідні компоненти для вашої ОС. Інструкції щодо встановлення, використання та відеоприклади шукайте тут же.

Python

Формально програмувати на Arduino ви можете використовуючи хоч мову Piet, просто тому що при належній завзятості ви скомпілюєте в машинний код будь-що. Але в силу того, що Python - одна з найбільш популярних мов з практично оптимальним поєднанням складності, то обійти стороною його застосування в Arduino було б безглуздо. Розпочати вивчення Python ви можете з нашого безкоштовного .

Отже, для цього потрібно бібліотеки PySerial (раніше, можливо, ви використовували її для спілкування з портами комп'ютера) і vPython . Про те, як правильно все налаштувати та змусити в кінцевому рахунку працювати, можете відповідно почитати та .

Go та інші мови.

Подібно до того, як Arduino взаємодіє з Python через бібліотеку PySerial, він може взаємодіяти і з Java, і з Java, і з чим тільки захочете. Arduino – досить популярна платформа, щоб таке банальне питання, як вибір зручної мови, не зупинило чергового дослідника. Єдине, що потрібно від власника цієї маленької плати - замислити щось напрочуд цікаве, а зручний інструментнеминуче знайдеться.

gastroguru 2017