Андрей Смирнов
Время чтения: ~23 мин.
Просмотров: 1

Что за особый язык программирования используется для Arduino?

Программирование Ардуино – это задание определённых алгоритмов, переведённых на компьютерный язык, с целью выполнения машиной конкретной задачи, поставленной пользователем.

Мы предлагаем вам самый полный и дополняемый справочник программиста Arduino. Справочник постоянно дополняется и обновляется.

Операторы

Функции

Цифровой ввод/вывод

  • pinMode()
  • digitalWrite()
  • digitalRead()

Аналоговый ввод/вывод

  • analogReference()
  • analogRead()
  • analogWrite() — PWM

Только для Due

  • analogReadResolution()
  • analogWriteResolution()

Расширенный ввод/вывод

  • tone()
  • noTone()
  • shiftOut()
  • shiftIn()
  • pulseIn()

Время

  • millis()
  • micros()
  • delay()
  • delayMicroseconds()

Математические вычисления

  • min()
  • max()
  • abs()
  • constrain()
  • map()
  • pow()
  • sqrt()
  • sq()

Тригонометрия

  • sin()
  • cos()
  • tan()

Случайные числа

  • randomSeed()
  • random()

Биты и байты

  • lowByte()
  • highByte()
  • bitRead()
  • bitWrite()
  • bitSet()
  • bitClear()
  • bit()

Внешние прерывания

  • attachInterrupt()
  • detachInterrupt()

Прерывания

  • interrupts()
  • noInterrupts()

Ардуино – платформа, позволяющая множеству инженеров со всего мира создавать свои проекты с минимальными вложениями. В первую очередь – это специальный микроконтроллер с одноимённой системой управления и библиотеками, построенными на языке С++. Соответственно, если вы планируете создавать что-то уникальное, вам следует изучить все нюансы, которые имеет программирование Arduino.

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

Основы Arduino

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

Для упрощения работы пользователей в Ардуино созданы готовые библиотеки функций, вам достаточно лишь вводить команды из них, чтобы добиться какой-то цели. Естественно, таким образом вы многого не добьётесь, но для создания собственных библиотек потребуется знание языка С++ на котором и построена прошивка чипа.

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

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

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

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

Чаще всего применяется ООП. Сам С++ имеет ядро из многочисленных библиотек и дополнительных функций или методов, поэтому, если вы собираетесь разобраться во всём кардинально, стоит начинать с освоения языка с нуля.

Особенности Arduino программирования

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

У программирования на Ардуино имеются как свои достоинства, так и недостатки, и вам стоит изучить обе стороны вопроса, чтобы понимать, с чем вы имеете дело и чего ожидать от микроконтроллера в принципе, во время работы с ним. Среди достоинств Ардуино, пользователи отмечают:

  1. Низкий порог вхождения. Этот пункт будет и в недостатках, так как из-за простоты системы и отсутствия требований к базису по программированию в сети гуляет множество библиотек, написанных ужасным образом. На то, чтобы разобраться, как они работают, уйдёт больше времени, чем на создание своей собственной. А стандартных функций от разработчиков не хватает для серьёзных задач.
  2. Обширное комьюнити. Это главное достоинство Ардуино перед его конкурентами, ведь вы найдёте пользователей, занимающихся созданием проектов на нём, как русскоязычных, так и англоязычных. Но если вы хотите получать действительно ценные советы и погрузиться в работу комьюнити, следует всё же изучить английский язык. Так как большая часть проблем, что вам встретятся, уже давно решены в Гугле, но, зачастую, ответы на английском.
  3. Большое количество библиотек, под разные случаи. Но, как уже описано чуть выше, у этого есть и свои недостатки.

Имеется у программирования на Ардуино и ряд весомых минусов:

  1. Низкая планка для вхождения превращает большую часть библиотек, коими наполнена сеть, в полностью бесполезный мусор. Ведь какие-то из них работают просто медленно и написаны без каких-либо знаний основ алгоритмизации, а часть – вовсе не работает, и непонятно, зачем авторы их создавали. Чтобы найти подспорье под конкретный проект, необходимо перелопатить несколько англоязычных форумов или же самостоятельно создать функции с нуля.
  2. Сложности программирования на С++. На деле – это один из сложнейших языков мультипарадигмального программирования, для создания прошивок и низкоуровневых задач. Однако, если вы имели опыт работы с ним и знаете хотя бы основные алгоритмы, а также работали хоть с одним другим мультипарадигмальным ЯП, тем более используя объектно-ориентированное программирование, вам будет значительно проще освоиться.
  3. Низкая скорость отклика самих чипов и их слабые характеристики. Да, микроконтроллеры Ардуино можно подстраивать под конкретную задачу, докупать компоненты и датчики, но это играет с ними злую шутку. Так как разработчики не знают, для чего будут использовать их детище, они усредняют все показатели, чтобы значительно уменьшить стоимость конечного продукта. В результате люди, создающие простейшие поделки, переплачивают за ненужную мощность, а тем, кто занимается робототехникой или автоматизацией каких-то процессов, приходится докупать и паять множество дополнительных плат.

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

Как начать правильно пользоваться Arduino

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

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

Программирование микроконтроллеров

Само программирование Ардуино делится на три этапа:

  1. Создание или скачивание готовой библиотеки функций.
  2. Загрузка этих библиотек в постоянную память чипа. Это ещё называют прошивкой.
  3. Ввод этих функций в командную строку, например, АТ, чтобы плата выполнила те или иные действия.

Если вы делаете что-то простое, и вам хватает базовой прошивки, можете пропустить первые два пункта.

Самые простые проекты с использованием Arduino

Примеров простых проектов с Ардуино множество, например, вы можете:

  1. Создать датчик освещённости, который будет подстраивать специальные LED лампы под ту яркость, которая необходима в комнате.
  2. Автоматизация любых вещей в вашем доме. Например, включения-выключения света, открытия дверей и прочее.
  3. Автоматизация оранжереи.

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

CC.jpg

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

Предыдущий урок     Список уроков     Следующий урок

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

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

void setup()  {

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

}

void loop()  {

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

}

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

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

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

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 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

= присваиваниее
+ сложение
вычитание
* произведение
/ деление
% остаток от деления
== равно
!= не равно
< меньше
> больше
<= меньше или равно
>= больше или равно
&& логическое И
|| логическое ИЛИ
! логическое НЕ
* косвенная адресация
& получение адреса переменной
& И
| ИЛИ
^ ИСКЛЮЧАЮЩЕЕ ИЛИ
~ ИНВЕРСИЯ
<< СДВИГ ВЛЕВО
>> СДВИГ ВПРАВО
++ + 1 к переменной
— 1 к переменной
+= сложение
-= вычитание
*= умножение
/= деление
%= остаток от деления
&= битовое И
|= битовое ИЛИ

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

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

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

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

if (x > 5)               // если x > 5, то выполняется блок z=0, y=8;  {    z=0;    y=8;  } else                       // в противном случае выполняется этот блок  {    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];                      // массив из 10 переменных типа int

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

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

int ages[10] = { 23, 54, 34, 24, 45, 56, 23, 23, 27, 28};

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

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.

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

Signal, TimeCount

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

signal, timeCount

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

MAX_TEMP, RED

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

getTime, setTime

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

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

Предыдущий урок     Список уроков     Следующий урок

Coin.png Поддержать проект

Arduino — это про­грам­ми­ру­е­мый мик­ро­кон­трол­лер, кото­рый мож­но исполь­зо­вать в робо­то­тех­ни­ке, умном доме и вооб­ще запро­грам­ми­ро­вать его как угод­но: что­бы он кор­мил кота, поли­вал рас­те­ния, пре­ду­пре­ждал вас о при­бли­же­нии вра­гов или откры­вал две­ри с помо­щью маг­нит­но­го клю­ча. У нас есть под­бор­ка 10 инте­рес­ных вещей, кото­рые мож­но сде­лать на этой плат­фор­ме. Теперь вре­мя разо­брать­ся, как про­грам­ми­сты с ней рабо­та­ют.

Язык Arduino

Если опыт­ный про­грам­мист посмот­рит на код для Arduino, он ска­жет, что это код на C++. Это неда­ле­ко от исти­ны: основ­ная логи­ка Арду­и­но реа­ли­зо­ва­на на C++, а свер­ху на неё надет фрейм­ворк Wiring, кото­рый отве­ча­ет за обще­ние с желе­зом.

На это есть несколь­ко при­чин:

  1. У С++ сла­ва «слиш­ком слож­но­го язы­ка». Arduino пози­ци­о­ни­ру­ет­ся как мик­ро­кон­трол­ле­ры и робо­то­тех­ни­ка для начи­на­ю­щих, а начи­на­ю­щим ино­гда труд­но объ­яс­нить, что С++ не такой уж слож­ный для стар­та. Про­ще сде­лать фрейм­ворк и назвать его отдель­ным язы­ком.
  2. В чистом С++ нет удоб­ных команд для AVR-контроллеров, поэто­му нужен был инстру­мент, кото­рый возь­мёт на себя все слож­ные функ­ции, а на выхо­де даст про­грам­ми­сту часто исполь­зу­е­мые коман­ды.
  3. Раз­ра­бот­чи­ки дали про­грам­ми­стам про­сто писать нуж­ные им про­грам­мы, а все слу­жеб­ные коман­ды, необ­хо­ди­мые для пра­виль­но­го оформ­ле­ния кода на С++, взя­ла на себя спе­ци­аль­ная сре­да раз­ра­бот­ки.

01-1.jpg Сре­да раз­ра­бот­ки (IDE) Arduino.

Подготовка и бесконечность

В любой про­грам­ме для Arduino есть две прин­ци­пи­аль­ные части: под­го­то­ви­тель­ная часть и основ­ной цикл.

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

Основ­ной цикл — это то, что про­ис­хо­дит в функ­ции loop(). Арду­и­но берёт отту­да коман­ды и выпол­ня­ет их под­ряд. Как толь­ко коман­ды закон­чи­лись, он воз­вра­ща­ет­ся в нача­ло цик­ла и повто­ря­ет всё. И так до бес­ко­неч­но­сти.

В основ­ном цик­ле мы опи­сы­ва­ем все полез­ные вещи, кото­рые дол­жен делать кон­трол­лер: счи­ты­вать дан­ные, мигать лам­па­ми, включать-выключать мото­ры, кор­мить кота и т. д.

Что можно и чего нельзя

Арду­и­но рабо­та­ет на одно­ядер­ном и не шиб­ко шуст­ром про­цес­со­ре. Его так­то­вая часто­та — 16 мега­герц, то есть 16 мил­ли­о­нов про­цес­сор­ных опе­ра­ций в секун­ду. Это не очень быст­ро, плюс ядро толь­ко одно, и оно испол­ня­ет одну коман­ду за дру­гой.

Вот какие огра­ни­че­ния это на нас накла­ды­ва­ет.

Нет насто­я­щей мно­го­за­дач­но­сти. Мож­но симу­ли­ро­вать мно­го­за­дач­ность с помо­щью при­ё­ма Protothreading, но это ско­рее костыль. Нель­зя, напри­мер, ска­зать: «Когда нажмёт­ся такая-то кноп­ка — сде­лай так». Вме­сто это­го при­дёт­ся в основ­ном цик­ле писать про­вер­ку: «А эта кноп­ка нажа­та? Если да, то…»

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

Ана­ло­гич­но с сетью: без допол­ни­тель­ных плат и биб­лио­тек Арду­и­но не может ни с чем общать­ся (кро­ме как включать-выключать элек­три­че­ство на сво­их выхо­дах).

Полег­че со слож­ной мате­ма­ти­кой: если вам нуж­но что-то слож­ное типа три­го­но­мет­ри­че­ских функ­ций, будь­те гото­вы к тому, что Арду­и­но будет счи­тать их доволь­но мед­лен­но. Для вас это одна строч­ка кода, а для Арду­и­но это тыся­чи опе­ра­ций под капо­том. Поща­ди­те.

Отчё­ты? Ошиб­ки? Толь­ко при ком­пи­ля­ции. У Арду­и­но нет встро­ен­ных средств сооб­щить вам, что ему нехо­ро­шо. Если он завис, он не пока­жет окно ошиб­ки: во-первых, у него нет гра­фи­че­ско­го интер­фей­са, во-вторых — экра­на. Если хоти­те систе­му оши­бок или отчёт­ность, пиши­те её 🙂

Если серьёз­но, то перед зали­вом про­грам­мы на кон­трол­лер ком­пи­ля­тор про­ве­рит код и най­дёт в нём опе­чат­ки или про­бле­мы с типа­ми дан­ных. Но на этом всё: если у вас слу­чай­но полу­чи­лась бес­ко­неч­ная пет­ля в коде или при каких-то обсто­я­тель­ствах вы пове­си­те про­цес­сор деле­ни­ем на ноль — жми­те пере­за­груз­ку и исправ­ляй­те код.

И всё же

Арду­и­но — это кайф: вы с помо­щью кода може­те управ­лять физи­че­ским миром, мото­ра­ми, лам­па­ми и элек­тро­де­та­ля­ми. Мож­но создать умную розет­ку; мож­но собрать умный замок для сей­фа; мож­но сде­лать детек­тор влаж­но­сти поч­вы, кото­рый будет вклю­чать авто­ма­ти­че­ский полив. И всё это — на доволь­но понят­ном, чита­е­мом и ком­пакт­ном язы­ке C++, на кото­рый свер­ху ещё наде­та удоб­ная биб­лио­те­ка для желе­за. Пре­крас­ный спо­соб про­ве­сти выход­ные.

Какие ещё языки используют для Arduino

Но чу! Под Arduino мож­но писать и на дру­гих язы­ках!

С. Как и С++, Си лег­ко мож­но исполь­зо­вать для про­грам­ми­ро­ва­ния мик­ро­кон­трол­ле­ров Arduino. Толь­ко если С++ не тре­бу­ет ника­ких допол­ни­тель­ных про­грамм, то для С вам пона­до­бит­ся WinAVR, что­бы пра­виль­но пере­ве­сти код в язык, понят­ный кон­трол­ле­рам AVR.

Python. Было бы стран­но, если бы тако­му уни­вер­саль­но­му язы­ку не нашлось при­ме­не­ния в робо­то­тех­ни­ке. Берё­те биб­лио­те­ки PySerial и vPython, при­кру­чи­ва­е­те их к Python и гото­во!

Java. Прин­цип такой же, как в Python: берё­те биб­лио­те­ки для рабо­ты с пор­та­ми и кон­трол­ле­ра­ми и мож­но начи­нать про­грам­ми­ро­вать.

HTML. Это, конеч­но, совсем экзо­ти­ка, но есть про­ек­ты, кото­рые застав­ля­ют HTML-код рабо­тать на Arduino.

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

Главное — алгоритмы Любой робот — это один боль­шой алго­ритм. Что­бы научить­ся думать как про­грам­мист и писать свои алго­рит­мы с нуля, при­хо­ди­те в Прак­ти­кум. Используемые источники:

  • https://arduinoplus.ru/coding-arduino/
  • http://mypractic.ru/urok-4-osnovy-programmirovaniya-arduino-na-yazyke-c.html
  • https://thecode.media/arduino-code/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации