Структура программы для ардуино

В отличии от программы на языке C++ с обязательной функцией main(int argc, char *argv[]) , скетч для Arduino содержит две другие обязательные функции.

void setup() < pinMode(13, OUTPUT); >void loop()

Как видно из все того же примера мигания светодиодом, это функции setup() и loop() .

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

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

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

Уроки Arduino структура программы для начинающих / Arduino lessons program structure

Источник: arduino-technology.ru

Программирование на Arduino — основы синтаксиса и структуры кода

Информация об Ардуино

4 1

Программирование

На чтение 7 мин Просмотров 287 Опубликовано 14.01.2023

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

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

mjpw2utqwgu

Программирование требует хорошего знания частей языка программирования, перечисленных ниже:

  • Структура
  • Функция
  • Переменные

digitalread1 e1509615386435

Основные места

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

Уроки Arduino #1 — структура программы и типы данных

Выделение значений регистров в структуре кода.

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

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

1 3

В каждом скетче присутствуют две обязательные функции: setup() и loop(). В скетче может быть сколько угодно методов, но эти две должны быть обязательно, иначе скетч откажется компилироваться.

Когда функционировать и когда не функционировать

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

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

Кроме того, если понадобится использовать код, когда Arduino действует как ведомый компонент, то должна быть готовая функция, которую можно объявить в командах onReceive() и onRequest().

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

Функции установки

3 1

Функция setup() — это место, где размещаем код, который хотим запустить только один раз. Обычно это установка параметров конфигурации, определение констант (переменных не изменяемая) или загрузка библиотек, которые будем использовать позже в функции loop(). Хотя стоит отметить, что ничто не мешает поместить в setup() обыкновенный код. Независимо от того, что вы поместите в нее, она будет выполнена в момент включения Arduino и больше не будет выполняться.

Читайте также:
Программа которая расшифровывает звездочки

Функция цикла

Функция loop() считается тем местом, где происходит волшебство. Логически это основная программа (или «приложение»), которую выполняет Arduino. Когда код, который написали, завершен, loop() запускается и начинает выполнять его заново. Бесконечно (или пока не выключите).

Блочные комментарии

Блочные комментарии используются для написания заметок в коде. По прошествии времени сам автор и программисты могли прочитать и понять, как работает код или почему написан таким образом. Это способ оставить документацию по ходу работы.

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

Блочные комментарии создаются с помощью /* в начале, * на каждой новой строке и */ в конце.

Includes

Следующее, что необходимо понять, это оператор include. Включение — это способом дополняется код из библиотек или других скетчей. Это достигается в функции setup() с помощью #include.

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

Чтобы включить библиотеку сервоприводов в код, нужно добавить #include перед функцией setup().

Определение констант

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

snimok

Например, написать скетч, рассчитанный на работу с 10 светодиодами или 20 светодиодами, в зависимости от потребностей пользователя. Поэтому создать константу для определения количества светодиодов в начале скетча. Другим примером может быть определение того, какие PIN-коды что делают на аппаратном обеспечении. Например, определить вывод 3 на Uno как место подключения светодиода. Константы должны быть определены перед функцией setup().

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

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

Глобальные переменные

Глобальные переменные — это переменные, которые работают в любом месте скетча Arduino, внутри или вне функции. Большинство переменных локальны только для функции, в которой определены.

Глобальные переменные следует использовать экономно!

Какие существуют типы переменных в программе Arduino?

В языке программирования Arduino существует около 18 типов данных. Однако мы представим здесь только наиболее часто используемые из них.

Int. float string char double boolean byte long/

Что такое управляющие операторы?

Управляющие операторы позволяют добавить условие в цикл. Если вы хотите контролировать количество повторений цикла с некоторыми параметрами, то управляющие операторы — это то, что вам нужно.

Что такое оператор ‘for’?

5

Синтаксис: for(условие запуска; условие остановки; условие увеличения/уменьшения)<>

Аргументы: Внутри оператора for есть три аргумента.

Во-первых, вам нужно инициализировать переменную. И вы можете присвоить этой переменной начальное число.

Второй — условие остановки. Оператор выполняет код до тех пор, пока переменная не выполнит это условие.

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

Урок 4. Основы программирования Ардуино на языке C.

CC

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

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

  • Структура программы Ардуино
  • Первоначальные правила синтаксиса языка C
  • Переменные и типы данных
  • Арифметические операции
  • Операции отношения
  • Логические операции
  • Операции над указателями
  • Битовые операции
  • Операции смешанного присваивания
  • Выбор вариантов, управление программой
  • Массивы
  • Функции
  • Рекомендации по оформлению программ на языке C
Читайте также:
Как скачивать программы на компьютер безопасно

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

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

// код выполняется один раз при запуске программы

// основной код, выполняется в цикле

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

После завершения setup() управление переходит к функции loop(). Она в бесконечном цикле выполняет команды, записанные в ее теле (между фигурными скобками). Собственно эти команды и совершают все алгоритмические действия контроллера.

Первоначальные правила синтаксиса языка C.

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

< >фигурные скобки определяют блок функции или выражений. Например, в функциях 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() // пустой блок, начальные установки не требуются
>

long count; // переменная count доступна только в функции loop()

При объявлении переменной можно задать ее начальное значение (проинициализировать).

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

Арифметические операции.

= присваиваниее
+ сложение
вычитание
* произведение
/ деление
% остаток от деления

Операции отношения.

== равно
!= не равно
меньше
> больше
меньше или равно
>= больше или равно

Логические операции.

логическое И
|| логическое ИЛИ
! логическое НЕ

Операции над указателями.

* косвенная адресация
» width=»319″>» width=»319″>| ИЛИ
^ ИСКЛЮЧАЮЩЕЕ ИЛИ
~ ИНВЕРСИЯ
СДВИГ ВЛЕВО
>> СДВИГ ВПРАВО

Операции смешанного присваивания.

++ + 1 к переменной
— 1 к переменной
+= сложение
-= вычитание
*= умножение
/= деление
%= остаток от деления
» width=»319″>|= битовое ИЛИ

Выбор вариантов, управление программой.

Оператор IF проверяет условие в скобках и выполняет последующее выражение или блок в фигурных скобках, если условие истинно.

if (x == 5) // если x=5, то выполняется z=0
z=0;

if (x > 5) // если x > 5, то выполняется блок z=0, y=8;

IF … ELSE позволяет сделать выбор между двух вариантов.

if (x > 5) // если x > 5, то выполняется блок z=0, y=8;
<
z=0;
y=8;
>
else // в противном случае выполняется этот блок
<
z=0;
y=0;
>

Читайте также:
Skidel sky в какой программе

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) и выполнить блок, в котором переменная равна константе.

case 5 :
// код выполняется если x = 5
break;

case 10 :
// код выполняется если x = 10
break;

default :
// код выполняется если не совпало ни одно предыдущее значение
break;
>

Цикл FOR. Конструкция позволяет организовывать циклы с заданным количеством итераций. Синтаксис выглядит так:

for ( действие до начала цикла;
условие продолжения цикла;
действие в конце каждой итерации )

Пример цикла из 100 итераций.

Цикл WHILE. Оператор позволяет организовывать циклы с конструкцией:

while ( выражение )
<
// код тела цикла
>

Цикл выполняется до тех пор, пока выражение в скобках истинно. Пример цикла на 10 итераций.

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]; // массив из 10 переменных типа int

float weight[100]; // массив из 100 переменных типа float

При объявлении массивы можно инициализировать:

Обращаются к переменным массивов так:

x = ages[5]; // x присваивается значение из 5 элемента массива.
ages[9] = 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.

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

Имена в языке C.

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

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

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

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

Об остальных формальностях в следующих уроках, по мере необходимости.

В следующем уроке напишем первую программу, научимся считывать данные с цифровых портов и управлять их состоянием.

Источник: mypractic.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru