В данном уроке кратко рассмотрены основные инструменты C/C++ с запускаемыми примерами для Arduino. Каждая глава имеет подробную версию в разделе уроков C/C++ со всей теорией.
В данном разделе уроков разобраны не все стандартные Arduino-функции и классы - они описаны отдельно в справочнике:
Переменные и константы #
Рекомендуется изучить следующие уроки:
Переменная - ячейка памяти, которая имеет имя и может хранить значение указанного типа, создаётся следующим образом: тип имя;
или тип имя = значение
. К переменной можно присвоить значение в процессе работы, в том числе другую переменную или результат вычислений:
void setup() {
Serial.begin(115200);
int a = 0;
int b = 123;
Serial.println(a); // вывод 0
Serial.println(b); // вывод 123
a = b;
b = 456;
Serial.println(a); // вывод 123
Serial.println(b); // вывод 456
}
void loop() {
}
Arduino-типы #
Фреймворк Arduino добавляет два новых типа данных, которые являются синонимами к стандартным типам:
byte
- синонимunsigned char
,uint8_t
boolean
- синонимbool
Классы и объекты #
Это сложная тема, но мы коснёмся её в самом начале уроков, т.к. классы и объекты встречаются уже в самом начале работы с Arduino. Изучите хотя бы начало урока про классы
Класс - это составной тип данных, который содержит в себе переменные (называются свойствами) и функции (называются методами). Объект - это переменная, созданная от класса как от типа данных:
int var; // переменная типа int
Class obj; // объект типа Class
Class obj2; // ещё один
Например уже известный нам Serial
- объект системного класса, он создан где-то в файлах ядра фреймворка. У класса есть методы, они вызываются через точку .
, например Serial.begin(115200);
.
Математические операции #
Рекомендуется изучить следующие уроки:
Синтаксис и правила математических операций такие же, как "на бумаге":
void setup() {
Serial.begin(115200);
int a = 10;
int b = a * 3;
Serial.println(b); // вывод 30
b = (a + 5) * (a - 5);
Serial.println(b); // вывод 75
b /= 5;
Serial.println(b); // вывод 15
float pi = 3.14;
float r = 10;
float l = 2 * pi * r;
Serial.println(l); // вывод 62.80
}
void loop() {
}
Логика и сравнение #
Рекомендуется изучить следующие уроки:
В программе можно сравнивать значения и выполнять действия по результату логических выражений:
void setup() {
Serial.begin(115200);
int a = 10;
int b = 20;
if (a >= 0) Serial.println("a больше или равно 0");
if (b == 20) Serial.println("b равно 20");
if (a > b) {
Serial.println("a больше b");
} else {
Serial.println("a меньше b");
}
if (a + b == 30) Serial.println("a + b равно 30");
else Serial.println("a + b не равно 30");
Serial.println(a == 10); // вывод 1, если a равно 10, иначе 0
Serial.println(a == 20); // вывод 1, если a равно 20, иначе 0
if (a >= 0 && a <= 10) Serial.println("a в диапазоне от 0 до 10");
if (a == 0 || a == 10) Serial.println("a равно 0 ИЛИ 10");
if (a == 10 && b == 20) Serial.println("a равно 10 И b равно 20");
}
void loop() {
}
Выбор #
Рекомендуется изучить следующие уроки:
Оператор выбора позволяет выбирать, какой код будет выполняться, исходя из переданного значения:
void setup() {
Serial.begin(115200);
int a = 10;
switch (a) {
case 0:
Serial.println("a равно 0");
break
case 10:
Serial.println("a равно 10");
break;
default:
Serial.println("a неизвестно");
break;
}
}
void loop() {
}
Цикл for #
Рекомендуется изучить следующие уроки:
Цикл-счётчик позволяет одной строкой создать блок кода, который будет выполняться согласно заданным условиям:
void setup() {
Serial.begin(115200);
for (int i = 0; i < 5; i++) {
Serial.print(i);
Serial.print(',');
}
// вывод 0,1,2,3,4,
}
void loop() {
}
Цикл while #
Рекомендуется изучить следующие уроки:
Выполняется, пока верно условие:
void setup() {
Serial.begin(115200);
int i = 5;
while (i > 0) {
Serial.print(i);
Serial.print(',');
i--;
}
// вывод 5,4,3,2,1,
}
void loop() {
}
Массивы #
Рекомендуется изучить следующие уроки:
- Массивы - первую половину
Массив - несколько переменных одного типа, объединённых под одним именем. Обращаться к элементам массива нужно через квадратные скобки []
:
void setup() {
Serial.begin(115200);
int arr[] = {1, 2, 3, 4, 5};
// вывод
for (int i = 0; i < 5; i++) {
Serial.print(arr[i]);
}
// печать 01234
Serial.println();
// изменение
for (int i = 0; i < 5; i++) {
arr[i] = i * 2;
// i = 0, 1, 2, 3
// i*2 = 0, 4, 6, 8
}
// вывод
for (int i = 0; i < 5; i++) {
Serial.print(arr[i]);
}
// печать 02468
Serial.println();
// вывод
for (int v : arr) {
Serial.print(v);
}
// печать 02468
Serial.println();
}
void loop() {
}
Функции #
Рекомендуется изучить следующие уроки:
Функция - блок кода, который можно вызвать по имени:
void hello() {
Serial.println("Hello!");
}
void setup() {
Serial.begin(115200);
hello(); // вывод Hello!
hello(); // вывод Hello!
}
void loop() {
}
setup
и loop
- тоже функции, но вызывает их основная программа в фреймворке Arduino
Функция может принимать аргументы указанного типа:
void print(int x) {
Serial.println(x);
}
void setup() {
Serial.begin(115200);
print(123); // вывод 123
print(3.14); // вывод 3, т.к. автоматически конвертируется в int
}
void loop() {
}
Функция может возвращать данные указанного типа:
int sum(int x, int y) {
return x + y;
}
void setup() {
Serial.begin(115200);
int s = sum(3, 4);
Serial.println(s); // вывод 7
Serial.println(sum(10, 20)); // вывод 30
}
void loop() {
}
delay #
Для простоты и наглядности примеров в ближайших уроках мы будем использовать функцию delay(время)
- приостановить выполнение программы на указанное время в миллисекундах (в 1 секунде 1000 миллисекунд):
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.println("Hello!");
delay(500); // ждать полсекунды
}
Данная программа выводит в порт строку Hello
два раза в секунду. Если убрать delay
- строка будет выводиться с максимально возможной скоростью.
define #
Данная команда позволяет определить в программе "константу" и часто используется на практике. Подробнее читайте в уроке про директивы препроцессора.
#define MY_CONST 3
#define MY_CONST_1 123
void setup() {
Serial.begin(115200);
Serial.println(MY_CONST); // вывод 3
int a = MY_CONST_1;
Serial.println(a); // вывод 123
}
void loop() {
}
include #
Данная команда позволяет подключить в программу другой файл. Подробнее читайте в уроке про директивы препроцессора.
#include <math.h> // подключить системную библиотеку math.h
#include <SPI.h> // подключить Arduino-библиотеку SPI.h
void setup() {
}
void loop() {
}