Команды программирования ардуино. Arduino для начинающих: пошаговые инструкции
Этот урок дает минимальные знания, необходимые для программирования систем Ардуино на языке 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 |
word | 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
Переменные должны быть записаны именами в смешанном регистре, первая буква строчная (нижний регистр).
Рубрика: . Вы можете добавить в закладки.