Этот симулятор лучше всего работает в браузере Chrome
Давайте рассмотрим Arduino по внимательней.
Arduino это не большой компьютер, к которому могут подключаться внешние цепи. В Arduino Uno используется Atmega 328P
Это самый большой чип на плате. Этот чип выполняет программы, которые хранятся в его памяти. Вы можете загрузить программу через usb с помощью Arduino IDE. Usb порт также обеспечивает питание arduino.
Есть отдельный разъём питания. На плате есть два вывода обозначенные 5v и 3.3v, которые нужны для того, чтобы запитывать различные устройства. Так же вы найдете контакты, помеченные как GND, это выводы земли (земля это 0В). Платформа Arduino, так же, имеет 14 цифровых выводов (пинов), помеченных цифрами от 0 до 13, которые подключаются к внешним узлам и имеют два состояния высокое или низкое (включено или выключено). Эти контакты могут работать как выходы или как входы, т.е. они могут либо передавать какие-то данные и управлять внешними устройствами, либо получать данные с устройств. Следующие выводы на плате обозначены А0-А5. Это аналоговые входы, которые могут принимать данные с различных датчиков. Это особенно удобно, когда вам надо измерить некий диапазон, например температуру. У аналоговых входов есть дополнительные функции, которые можно задействовать отдельно.
Как использовать макетную плату.
Макетная плата нужна для того чтобы временно соединить детали, проверить, как работает устройство, до того как вы спаяете все вместе.
Все нижеследующие примеры собраны на макетной плате, чтобы можно было быстро вносить изменения в схему и повторно использовать детали не заморачиваясь с пайкой.
В макетной плате есть ряды отверстий, в которые вы можете вставлять детали и провода. Некоторые из этих отверстий электрически соединены друг с другом.
Два верхних и нижних ряда соединены по - рядно вдоль всей платы. Эти ряды используются, чтобы подавать питание на схему. Это может быть 5в или 3.3в, но в любом случае, первое, что вам надо сделать - это подключить 5в и GND на макетную плату, как показано на рисунке. Иногда эти соединения рядов могут прерываться посередине платы, тогда, если вам понадобится, вы можете их соединить, как показано на рисунке.
Остальные отверстия, расположенные в середине платы, группируются по пять отверстий. Они используется для соединения деталей схемы.
Первое, что мы подключим к нашему микроконтроллеру, это светодиод. Схема электрических соединений показана на картинке.
Для чего нужен резистор в схеме? В данном случае он ограничивает ток, который проходит через светодиод. Каждый светодиод рассчитан на определённый ток, и если этот ток будет больше, то светодиод выйдет из строя. Узнать, какого номинала должен быть резистор можно с помощью закона ома. Для тех кто не знает или забыл, закон ома говорит, что существует линейная зависимость тока от напряжения. Т.е, чем больше мы приложим напряжение к резистору, тем больше потечет через него ток.
V=I*R
Где V
-напряжение на резистор
I
- ток через резистор
R
- сопротивление, которое надо найти.
Во-первых, мы должны узнать напряжение на резистор. Большинство светодиодов 3мм или 5мм, которые вы будете использовать, имеют рабочее напряжение 3в. Значит, на резисторе нам надо погасить 5-3=2в.
Затем мы вычислим ток, проходящий через резистор.
Большинство 3 и 5мм светодиодов светятся полной яркостью при токе 20мА. Ток больше этого может вывести их из строя, а ток меньшей силы снизит их яркость, не причинив никакого вреда.
Итак, мы хотим включить светодиод в цепь 5в,чтобы на нем был ток 20мА. Так как все детали включены в одну цепь на резистор тоже будет ток 20мА.
Мы получаем
2В = 20 мА * R
2В = 0.02A * R
R = 100 Ом
100 Ом это минимальное сопротивление, лучше использовать немного больше, потому, что светодиоды имеют некоторый разброс характеристик.
В данном примере используется резистор 220 Ом. Только потому, что у автора их очень много:wink: .
Вставьте светодиод в отверстия посередине платы таким образом, чтобы его длинный вывод был соединён с одним из выводов резистора. Второй конец резистора соедините с 5V, а второй вывод светодиода соедините с GND. Светодиод должен загореться.
Обратите внимание, что есть разница, как соединять светодиод. Ток течёт от более длинного вывода к более короткому. На схеме это можно представить, что ток течёт в ту сторону, куда направлен треугольник. Попробуйте перевернуть светодиод и вы увидите, что он не будет светиться.
А вот как вы будете соединять резистор, разницы совсем нет. Можете его перевернуть или попробовать подсоединить к другому выводу светодиода, это не повлияет на работу схемы. Он все так же будет ограничивать ток через светодиод.
Анатомия Arduino Sketch.
Программы для Arduino называют sketch. Они состоят из двух основных функций. Функция setup
и функция loop
внутри этой функции вы будете задавать все основные настройки. Какие выводы будут работать на вход или выход, какие библиотеки подключать, инициализировать переменные. Функция Setup()
запускается только один раз в течение скетча, когда стартует выполнение программы.
это основная функция, которая выполняется после setup()
. Фактически это сама программа. Это функция будет выполняться бесконечно, пока вы не выключите питание.
Arduino мигает светодиодом
В этом примере мы соединим схему со светодиодом к одному из цифровых выводов Arduino и будем включать и выключать его с помощью программы, а так же вы узнаете несколько полезных функций.
Эта функция используется в setup () части программы и служит для инициализации выводов, которые вы будете использовать, как вход (INPUT) или выход (OUTPUT) . Вы не сможете считать или записать данные с пина, пока не установите его соответственно в pinMode . Эта функция имеет два аргумента: pinNumber - это номер пина, который вы будете использовать.
Mode
-задает, как пин будет работать. На вход (INPUT)
или выход (OUTPUT)
. Чтобы зажечь светодиод мы должны подать сигнал ИЗ
Arduino. Для этого мы настраиваем пин на выход.
- эта функция служит для того, чтобы задать состояние (state)
пина (pinNumber)
. Есть два основных состояния (вообще их 3), одно это HIGH
, на пине будет 5в, другое это Low
и на пине будет 0в. Значит, чтобы зажечь светодиод нам надо на пине, соединенном со светодиодом выставить высокий уровень HIGH
.
Задержка. Служит для задержки работы программы на заданный в мсек период.
Ниже приведен код, который заставляет мигать светодиод.
//LED Blink
int ledPin = 7;//пин Arduino к которому подключен светодиод
void setup() {
pinMode(ledPin, OUTPUT);// установка пина как ВЫХОД
}
void loop() {
digitalWrite(ledPin, HIGH);//зажечь светодиод
delay(1000);// задержка 1000 мсек (1 сек)
digitalWrite(ledPin, LOW);//Выключить светодиод
delay(1000);//ждать 1 сек
}
Небольшие пояснения по коду.
Строки, которые начинаются с "//" это комментарии Arduino их игнорирует.
Все команды заканчиваются точкой с запятой, если вы их забудете, то получите сообщение об ошибке.
ledPin
- это переменная. Переменные используются в программах для хранения значений. В данном примере переменной ledPin
присваивается значение 7, это номер пина Arduino. Когда Arduino в программе встретит строку с переменной ledPin
, он будет использовать то значение, которое мы указали ранее.
Так запись pinMode(ledPin, OUTPUT)
аналогична записи pinMode(7, OUTPUT)
.
Но в первом случае вам достаточно поменять переменную и она поменяется в каждой строке, где используется, а во втором случае вам, чтобы поменять переменную, придётся ручками в каждой команде вносить изменения.
В первой строке указывает на тип переменной. При программировании Arduino важно всегда объявлять тип переменных. Пока вам достаточно знать, что INT
объявляет отрицательные и положительные числа.
Ниже представлено моделирование скетча. Нажмите старт, чтобы посмотреть работу схемы.
Как и ожидалось, светодиод гаснет и загорается через одну секунду. Попробуйте поменять задержку, чтобы посмотреть, как она работает.
Управление несколькими светодиодами.
В этом примере вы узнаете, как управлять несколькими светодиодами. Для этого установите ещё 3 светодиода на плату и соедините их с резисторами и выводами Arduino, как показано ниже.
Для того, чтобы включать и выключать светодиоды по очереди надо написать программу подобную этой:
//Multi LED Blink
int led1Pin = 4;
int led2Pin = 5;
int led3Pin = 6;
int led4Pin = 7;
void setup() {
//установка пинов как ВЫХОД
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(led3Pin, OUTPUT);
pinMode(led4Pin, OUTPUT);
}
void loop() {
digitalWrite(led1Pin, HIGH);//зажечь светодиод
delay(1000);//задержка 1 сек
digitalWrite(led1Pin, LOW);//потушить светодиод
delay(1000);//задержка 1 сек
//do the same for the other 3 LEDs
digitalWrite(led2Pin, HIGH);//зажечь светодиод
delay(1000);// задержка 1 сек
digitalWrite(led2Pin, LOW);//потушить светодиод
delay(1000);//задержка 1 сек
digitalWrite(led3Pin, HIGH);//зажечь светодиод
delay(1000);// задержка 1 сек
digitalWrite(led3Pin, LOW);//потушить светодиод
delay(1000);//задержка 1 сек
digitalWrite(led4Pin, HIGH);//зажечь светодиод
delay(1000);// задержка 1 сек
digitalWrite(led4Pin, LOW);//потушить светодиод
delay(1000);//задержка 1 сек
}
Эта программа будет отлично работать, но это не самое рациональное решение. Код надо изменить. Для того, чтобы программа работала раз за разом мы применим конструкцию, которая называется .
Циклы удобны, когда надо повторить одно и тоже действие несколько раз. В коде, проведенном выше мы повторяем строки
DigitalWrite (led4Pin, HIGH);
delay (1000);
digitalWrite (led4Pin, LOW);
delay (1000);
полный код скетча во вложении
(скачиваний: 1412)
Регулировка яркости светодиодов
Иногда вам надо будет менять яркость светодиодов в программе. Это можно сделать с помощью команды analogWrite()
. Эта команда так быстро включает и выключает светодиод, что глаз не видит это мерцание. Если светодиод половину времени будет включён, а половину выключен, то визуально будет казаться, что он светится в половину своей яркости. Это называется широтно-импульсная модуляция (ШИМ или PWM по-английски). Шим применяется довольно часто, так как с ее помощью можно управлять "аналоговым" компонентом с помощью цифрового кода. Не все выводы Arduino подходят для этих целей. Только те выводы, около которых нарисовано такое обозначение "~
". Вы увидите его рядом с выводами 3,5,6,9,10,11.
Соедините один из ваших светодиодов с одним из выводов ШИМ(у автора это вывод 9). Теперь запуститьскетч мигания светодиода, но прежде измените команду digitalWrite()
на analogWrite()
. analogWrite()
имеет два аргумента: первый это номер вывода, а второй- значение ШИМ (0-255), применительно к светодиодам это будет их яркость свечения, а для электродвигателей скорость вращения. Ниже представлен код примера для разной яркости светодиода.
//Меняем яркость светодиода
int ledPin = 9;//к этому выводу подсоединен светодиод
void setup() {
pinMode(ledPin, OUTPUT);// инициализация пина на вывод
}
void loop() {
analogWrite(ledPin, 255);//полная яркость (255/255 = 1)
delay(1000);// пауза 1 сек
digitalWrite(ledPin, LOW);//выключить светодиод
delay(1000);//пауза 1 сек
analogWrite(ledPin, 191);//яркость на 3/4 (191/255 ~= 0.75)
delay(1000);//пауза 1 сек
digitalWrite(ledPin, LOW);//выключить светодиод
delay(1000);//пауза 1 сек
analogWrite(ledPin, 127);//половина яркости (127/255 ~= 0.5)
delay(1000);// пауза 1 сек
digitalWrite(ledPin, LOW);//выключить светодиод
delay(1000);//пауза 1 сек
analogWrite(ledPin, 63);//четверть яркости (63/255 ~= 0.25)
delay(1000);// пауза 1 сек
digitalWrite(ledPin, LOW);//выключить светодиод
delay(1000);//пауза 1 сек
}
Попробуйте поменять значение ШИМ в команде analogWrite ()
,чтобы увидеть, как это влияет на яркость.
Далее вы узнаете, как регулировать яркость плавно от полной до нулевой. Можно,конечно, скопировать кусок кода 255 раз
analogWrite(ledPin, brightness);
delay(5);//short delay
brightness = brightness + 1;
Но, сами понимаете - это будет не практично. Для этого лучше всего использовать цикл FOR, который использовали ранее.
В следующем примере используются два цикла, один для уменьшения яркости от 255 до 0
for (int brightness=0;brightness=0;brightness--){
analogWrite(ledPin,brightness);
delay(5);
}
delay(5)
используется, чтобы замедлить скорость нарастания и уменьшения яркости 5*256=1280 мсек= 1.28 сек.)
В первой строке используется "brightness-
" ,для того чтобы значение яркости уменьшалось на 1, каждый раз, когда цикл повторяется. Обратите внимание, что цикл будет работать до тех пор, пока brightness >=0
.Заменив знак >
на знак >=
мы включили 0 в диапазон яркости. Ниже смоделирован этот скетч. //плавно меняем яркость
int ledPin = 9;//к этому пину подключен светодиод
void setup() {
pinMode(ledPin, OUTPUT);// инициализация пина на выход
}
void loop() {
//плавно увеличиваем яркость (0 to 255)
for (int brightness=0;brightness=0;brightness--){
analogWrite(ledPin,brightness);
delay(5);
}
delay(1000);//ждем 1 сек
//плавно уменьшаем яркость (255 to 0)
for (int brightness=255;brightness>=0;brightness--){
analogWrite(ledPin,brightness);
delay(5);
}
delay(1000);//ждем 1 сек
}
}
Это видно не очень хорошо, но идея понятна.
RGB-светодиод и Arduino
RGB-светодиод на самом деле это три светодиода разного цвета в одном корпусе.
Включая разные светодиоды с различной яркостью можно комбинировать и получать разные цвета. Для Arduino, где количество градаций яркости равно 256 вы получите 256^3=16581375 возможных цветов. Реально их, конечно, будет меньше.
Светодиод, который мы будем использоваться общим катодом. Т.е. все три светодиода конструктивно соединены катодами к одному выводу. Этот вывод мы подсоединим к выводу GND. Остальные выводы, через ограничительные резисторы, надо подсоединить к выводам ШИМ. Автор использовал выводы 9-11.Таким образом можно будет управлять каждым светодиодом отдельно. В первом скетче показано, как включить каждый светодиод отдельно.
//RGB LED - test //pin connections int red = 9; int green = 10; int blue = 11; void setup(){ pinMode(red, OUTPUT); pinMode(blue, OUTPUT); pinMode(green, OUTPUT); } void loop(){ //включение/выключение красного светодиод digitalWrite(red, HIGH); delay(500); digitalWrite(red, LOW); delay(500); //включение/выключение зеленого светодиода digitalWrite(green, HIGH); delay(500); digitalWrite(green, LOW); delay(500); //включение/выключение синего светодиода digitalWrite(blue, HIGH); delay(500); digitalWrite(blue, LOW); delay(500); }
В следующем примере используются команды analogWrite()
и , чтобы получать различные случайные значения яркости для светодиодов. Вы увидите разные цвета, меняющиеся случайным образом.
//RGB LED - random colors
//pin connections
int red = 9;
int green = 10;
int blue = 11;
void setup(){
pinMode(red, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(green, OUTPUT);
}
void loop(){
//pick a random color
analogWrite(red, random(256));
analogWrite(blue, random(256));
analogWrite(green, random(256));
delay(1000);//wait one second
}
Random(256)
-возвращает случайное число в диапазоне от 0 до 255.
В прикрепленном файле скетч, который продемонстрирует плавные переходы цветов от красного к зеленому, затем к синему, красному, зеленому и т.д.
(скачиваний: 388)
Пример скетча работает, но есть много повторяющегося кода. Можно упростить код, написав собственную вспомогательную функцию, которая будет плавно менять один цвет на другой.
Вот как она будет выглядеть:
(скачиваний: 421)
Давайте рассмотрим определение функции по частям. Функция называется fader
и имеет два аргумента. Каждый аргумент отделяется запятой и имеет тип объявленный в первой строке определения функции: void fader (int color1, int color2)
. Вы видите, что оба аргумента объявлены как int
, и им присвоены имена color1
и color2
в качестве условных переменных для определения функции. Void
означает, что функция не возвращает никаких значений, она просто выполняет команды. Если надо было бы написать функцию, которая возвращала результат умножения это выглядело бы так:
int multiplier(int number1, int number2){
int product = number1*number2;
return product;
}
Обратите внимание, как мы объявили Тип int
в качестве типа возвращаемого значения вместо
void
.
Внутри функции идут команды, которые вы уже использовали в предыдущем скетче, только номера выводов заменили на color1
и color2
. Вызывается функция fader
, ее аргументы вычисляются как color1 = red
и color2 = green
. В архиве полный скетч с использованием функций
(скачиваний: 321)
Кнопка
В следующем скетче будет использоваться кнопка с нормально разомкнутыми контактами, без фиксации.
Это значит, что пока кнопка не нажата, ток через неё не идёт, а после отпускания, кнопка возвращается в исходное положение.
В схеме, помимо кнопки используется резистор. В данном случае он не ограничивает ток, а "подтягивает" кнопку к 0в (GND). Т.е. пока кнопка не нажата на выводе Arduino, к которому она подключена, будет низкий уровень. Резистор, используемый в схеме 10 кОм.
//определяем нажатие кнопки int buttonPin = 7; void setup(){ pinMode(buttonPin, INPUT);//инициализируем пин на вход Serial.begin(9600);//инициализируем последовательный порт } void loop(){ if (digitalRead(buttonPin)==HIGH){//если кнопка нажата Serial.println("pressed"); // выводим надпись "pressed" } else { Serial.println("unpressed");// иначе "unpressed" } }
В этом скетче несколько новых команд.
-эта команда принимает значение High (высокий уровень) и low (низкий уровень), того вывода, который мы проверяем. Предварительно в setup() этот вывод надо настроить на вход.
; //где buttonPin это номер вывода, куда подсоединяется кнопка.
Последовательный порт позволяет отправлять Arduino сообщения на компьютер, в то время, как сам контроллер выполняет программу. Это полезно для отладки программы, отправки сообщений на другие устройства или приложения. Чтобы включить передачу данных через последовательный порт (другое название UART или USART), надо инициализировать его в setup()
Serial.begin() имеет всего один аргумент-это скорость передачи данных между Arduino и компьютером.
скетче используется команда для вывода сообщения на экран в Arduino IDE (Tools >> Serial Monitor).
- конструкция позволяют контролировать ход выполнения программы, объеденив несколько проверок в одном месте.
If(если) digitalRead возвращает значение HIGH, то на мониторе выводится слово "нажата". Else(иначе) на мониторе выводится слово " отжата" . Теперь можно попробовать включать и выключать светодиод по нажатию кнопки.
//button press detection with LED output int buttonPin = 7; int ledPin = 8; void setup(){ pinMode(buttonPin, INPUT);//this time we will set button pin as INPUT pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop(){ if (digitalRead(buttonPin)==HIGH){ digitalWrite(ledPin,HIGH); Serial.println("pressed"); } else { digitalWrite(ledPin,LOW); Serial.println("unpressed"); } }
Аналоговый вход.
analogRead
позволяет считать данные с одного из аналоговых выводов Arduino и выводит значение в диапазоне от 0 (0В) до 1023 (5В). Если напряжение на аналоговом входе будет равно 2.5В, то будет напечатано 2.5 / 5 * 1023 = 512
analogRead
имеет только один аргумент- Это номер аналогового входа (А0-А5). В следующем скетче приводится код считывания напряжения с потенциометра. Для этого подключите переменный резистор, крайними выводами на пины 5V и GND, а средний вывод на вход А0.
Запустите следующий код и посмотрите в serial monitor, как меняются значения в зависимости от поворота ручки резистора.
//analog input
int potPin = A0;//к этому пину подсоединяется центральный вывод потенциометра
void setup(){
//аналоговый пин по умолчанию включен на вход, поэтому инициализация не нужна
Serial.begin(9600);
}
void loop(){
int potVal = analogRead(potPin);//potVal is a number between 0 and 1023
Serial.println(potVal);
}
Следующий скетч объединяет скетч нажатия кнопки и скетч управления яркостью светодиода. Светодиод будет включаться от кнопки, и управлять яркостью свечения будет потенциометр.
//button press detection with LED output and variable intensity
int buttonPin = 7;
int ledPin = 9;
int potPin = A0;
void setup(){
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
if (digitalRead(buttonPin)==HIGH){//if button pressed
int analogVal = analogRead(potPin);
int scaledVal = map(analogVal, 0, 1023, 0, 255);
analogWrite(ledPin, scaledVal);//turn on led with intensity set by pot
Serial.println("pressed");
} else {
digitalWrite(ledPin, LOW);//turn off if button is not pressed
Serial.println("unpressed");
}
}
Введение
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() // начальные установки
{
beginSerial(9600); // установка скорости работы серийного порта на 9600 бит/сек
pinMode(3, INPUT); // установка 3-его порта на ввод данных
}
// Программа проверяет 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(порт, значение);
Описание:
Считывает импульс (высокий или низкий) c цифрового порта и возвращает продолжительность импульса в микросекундах.
Например, если параметр «значение» при вызове функции установлен в 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\n"); //выведет символы "\r\n" – перевод строки
Serial.print(b, HEX); //выдаст в порт строку «4F»
Serial.print("\r\n");//выведет символы "\r\n" – перевод строки
int b = 79;
Serial.println(b, DEC); //выдаст в порт строку «79\r\n»
Serial.println(b, HEX); //выдаст в порт строку «4F\r\n»
В мониторе последовательного порта получим.
Исторически так сложилось, что программная часть Arduino состоит из интегрированной программной среды (IDE), позволяющей писать, компилировать, а также загружать написанный код в аппаратную часть. Cреда ArduinoIDE, и сам язык Wiring основаны, в первую очередь, на Processing, косвенно – на С/C++. По сути, Arduino IDE являет собой большую сборную солянку, не смеха ради, а удобства для.
Даже внешне и Arduino IDE и Processing похожи
Из чего состоит программа (скетч)?
Каждая программа, какой сложной она не казалась бы, состоит из отдельных наборов блоков кода, который обозначается фигурными скобками {} . Для минимальной программы требуется всего 2 блока: setup и loop . Их присутствие обязательно в любой программе на C++ для Arduino, иначе на стадии компиляции можно получить ошибку.
void setup() { } void loop() { }
В функции setup() происходят начальные установки переменных, регистров. После завершения setup() управление переходит к функции loop() , которая являет собой бесконечный цикл, записанный в теле (между { } ). Именно эти команды и совершают все алгоритмические действия контроллера.
Аппаратный «
Hello
,
world
!» - мигание светодиодом.
То, с чего начинается первое знакомство с Arduino на стыке программной и аппаратной части - это мигание светодиодом.
Сперва необходимо дополнить минимальную программу. У Arduino (например UNO), к 12 пину и GND подключим светодиод (цвет самого светодиода выбирается из личных предпочтений).
Void setup()
{
pinMode(12, OUTPUT);
}
void loop()
{
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(900);
}
Делаем Ctrl+C -> Ctrl+V, компилируем, загружаем, властвуем. Видим светопредставление, длящееся не более секунды. Разбираемся, почему происходит именно так.
В ранее пустые блоки мы добавили несколько выражений
. Они были размещены между фигурными скобками функций setup
и
loop
.
Каждое выражение – инструкция для процессора. Выражения в рамках одного блока исполняются друг за другом, строго по порядку без всяких пауз и переключений. То есть, если мы говорим об одном конкретном блоке кода, его можно читать сверху вниз, чтобы понять, что делается.
Что же происходит между
{ }
?
Как известно, пины Arduino могут работать как на выход так и на вход. Когда мы хотим чем-то управлять, то нам нужно перевести управляющий пин в состояние работы на выход. Это делается выражением в функции
setup
:
pinMode(12, OUTPUT);
В данной ситуации в выражении осуществляется вызов функции
. В pinMode устанавливается заданный по номеру пин в заданный режим (INPUT или OUTPUT). О каком пине и о каком режиме идёт речь, указывается в круглых скобках, через запятую. В нашем случае мы хотим, чтобы 12-й пин работал как выход. OUTPUT означает выход, INPUT - вход. Уточняющие значения, такие как 12 и OUTPUT называются аргументами функции
. Сколько у функции аргументов зависит от сути функции и воли ее создателя. Функции могут быть без аргументов вовсе, как это происходит на примере setup и loop.
Далее переходим к блоку loop, по порядку:
-вызов встроенной функции digitalWrite. Она предназначена для подачи на заданный пин логического нуля (LOW, 0 вольт) или логической единицы (HIGH, 5 вольт) В функцию digitalWrite передаётся 2 аргумента: номер пина и логическое значение.
-вызов функции delay. Это, опять же, встроенная функция, которая заставляет процессор «уснуть» на определённое время. Она принимает всего один аргумент: время в миллисекундах, которое следует спать. В нашем случае это 100 мс. Как только 100 мс истекают, процессор просыпается и тут же переходит к следующему выражению.
- вызов встроенной функции digitalWrite. Только на этот раз вторым аргументом является LOW. То есть устанавливаем на 12-м пине логический ноль -> подаём 0 вольт -> гасим светодиод.
- вызов функции delay. На этот раз «спим» чуть подольше – 900 мс.
Как только выполнена последняя функция, блок loop завершается и все происходит снова и снова. На самом деле условия, представленные в примере, достаточно вариативны, и вы можете поиграться со значениями delay, подключить несколько светодиодов и сделать подобие светофора или полицейской мигалки (все зависит от фантазии и воли создателя).
Вместо заключения, немного о чистоте.
На самом деле все пробелы, переносы строк, символы табуляции не имеют большого значения для компилятора. Там, где стоит пробел, может быть перенос строки и наоборот. На самом деле 10 пробелов подряд, 2 переноса строки и ещё 5 пробелов - это всё эквивалент одного пробела.
С помощью пустого пространства можно сделать программу понятной и наглядной, или же наоборот изуродовать до неузнаваемости. Например, программу, указанную в качестве примера можно изменить так:
void setup()
{
pinMode(12, OUTPUT);
}
void loop
() {
digitalWrite(12,HIGH);
delay(100)
;
digitalWrite(12,LOW);
delay(900); }
Чтобы при чтении ни у кого не начала течь кровь из глаз, можно следовать нескольким простым правилам:
1. Всегда, при начале нового блока между { и } увеличивайте отступ. Обычно используют 2 или 4 пробела. Выберите одно из значений и придерживайтесь его всюду.
Void loop()
{
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(900);
}
2.
Как и в обычном языке: ставьте пробел после запятых.
digitalWrite(12, HIGH);
3.
Размещайте символ начала блока { на новой строке на текущем уровне отступа или в конце предыдущей. А символ конца блока } на отдельной строке на текущем уровне отступа:
void setup()
{
pinMode(12, OUTPUT);
}
void setup() {
pinMode(12, OUTPUT);
}
4.
Используйте пустые строки для разделения смысловых блоков:
void loop()
{
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(900);
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
delay(900);
}
5.
Для того, чтобы Ваше детище было приятно читать существуют так называемые комментарии. Это конструкции в программном коде, которые полностью игнорируются компилятором и имеют значение только для того, кто это читает. Комментарии могут быть многострочными или однострочными:
/*
это многострочный комментарий
*/
// это однострочный
Эта вводная статья для тех, кто уже успел распаковать со своим ребенком десяток-другой цветных коробок от конструкторов, построил сотни разнообразных конструкций и заполнил деталями от Лего все доступные емкости в чулане. Если вы готовы перейти на следующий уровень: с электроникой, микроконтроллерами, датчиками и умными устройствами – значит, пришло время для экспериментов с Ардуино!
В этой серии статей мы соберем самое главное, что нужно узнать об Ардуино, чтобы начать заниматься с детьми самостоятельно. Даже если вы никогда не брали в руки паяльник и слова «контроллер» и «контроллёр» для вас имеют примерно схожий смысл, можете быть уверенными – у вас все равно все получится! Мир электроники и робототехники сегодня полон простых и очень удобных решений, позволяющих практически с нуля создавать очень интересные проекты. Наш учебник поможет вам быстро сориентироваться и сделать первые шаги.
Говоря бытовым языком, Ардуино – это , в которую можно воткнуть множество разных устройств и заставить их работать вместе с помощью программы, написанной на языке Ардуино в специальной среде программирования.
Чаще всего плата выглядит вот так:
На рисунке показана одна из плат Ардуино – Arduino Uno. Мы изучим ее подробнее на следующих уроках.
В плату можно втыкать провода и подключать множество разных элементов. Чаще всего, для соединения используется макетная плата для монтажа без пайки. Можно добавлять светодиоды, датчики, кнопки, двигатели, модули связи, реле и создавать сотни вариантов интересных проектов умных устройств. Плата Ардуино – это умная розетка, которая будет включать и выключать все присоединенное в зависимости от того, как ее запрограммировали.
Вся работа над проектом разбивается на следующие этапы:
- Придумываем идею и проектируем.
- Собираем электрическую схему. Тут нам пригодится макетная плата, упрощающая монтаж элементов. Безусловно, понадобятся навыки работы с электронными приборами и умение .
- Подключаем к компьютеру через USB.
- и записываем ее в плату буквально нажатием одной кнопки на экране в .
- Отсоединяем от компьютера. Теперь устройство будет работать автономно – при включении питания оно будет управляться той программой, которую мы в него записали.
Программа и среда программирования выглядят вот так:
На экране показана программа (на сленге ардуинщиков текст программы называется “скетч”), которая будет мигать лампочкой, подсоединенной к 13 входу на плате Ардуино UNO. Как видим, программа вполне проста и состоит из понятных для знающих английский язык инструкций. В языке программирования Arduino используется свой диалект языка C++, но все возможности C++ поддерживаются.
Есть и другой вариант написания кода – визуальный редактор. Тут не нужно ничего писать – можно просто перемещать блоки и складывать из них нужный алгоритм. Программа загрузится в подключенную плату одним нажатием кнопки мыши!
В целом все выглядит довольно понятно, не так ли? Осталось разобраться в деталях.
Быстрый старт с Arduino
Для начала давайте поймем, с чем же и чем же мы собираемся заниматься. Что такое Ардуино и как его использовать? Если вы уже знакомы с темой – можете смело перескочить дальше. Если нет – давайте вместе выполним короткое погружение.
Ардуино – это…
Ардуино – это не бренд и не название поставщика конструкторов. Это общее название для целого семейства различных технологий и открытой платформы, в которую входят как аппаратные устройства (платы контроллеров и совместимое оборудование), так и софт, предназначенный для управления железками. По сути своей, Ардуино – это инфраструктура и среда, в которой можно собирать совместимые между собой электронные и механические компоненты в единое устройство, а потом через обычный компьютер за две минуты запрограммировать поведение этих самых железок так, как нам нужно.
Ардуино – это мостик из виртуального компьютерного мира в мир реальных вещей и устройств. Написав программу на обычном компьютере, мы управляем с ее помощью не виртуальными объектами, а вполне себе реальными датчиками, двигателями, экранами. Мы меняем мир вокруг себя – просто программируя на компьютере, используя бесплатный софт и множество уже готовых примеров библиотек.
Свое название технология получила, как это часто бывает, довольно случайно. Источником вдохновения послужил бар, в котором будущие создатели Ардуино любили выпить по кружечке чая. Называлось заведение именно так – Arduino, по имени главной исторической личности города Ивреа, короля Ардуино. Король какого-то яркого следа в истории не оставил и прослыл неудачником, но благодаря команде разработчиков новой платформы обрел новую популярность и сейчас известен миллионам людей по всему земному шару.
Почему Ардуино?
Вся прелесть Ардуино заключается в следующих простых преимуществах:
- Простота. Да, да – именно простота (хотя Лего и другие игрушки, без сомнения, привычнее, но мы сравниваем не с ними). Для юных разработчиков электроники Ардуино «прячет» огромное количество разнообразных технических вопросов. Многие достаточно сложные проекты можно создавать очень быстро, без длительного погружения в детали. А это ведь очень важно для ребенка – не утратить интерес до первого полученного своими руками результата.
- Популярность. Ардуино крайне популярна, вы сможете без труда найти ответы на любые вопросы на многочисленных форумах или сайтах. Сообщество Ардуино обширно и дружелюбно – там относительно мало прожженных жизнью снобов-инженеров и полно любителей и начинающих, с удовольствием делящихся своей радостью от найденного и узнанного. Это, конечно, откладывает отпечаток на качество советов, но как правило, даже самые сложные вопросы могут быть быстро решены с помощью форумов и сайтов.
- Доступность. И сама технология, и практически весь софт выпускаются под открытыми лицензиями и вы можете свободно использовать чужие наработки, схемы, причем во многих случаях даже для коммерческого использования. Это экономит много времени и позволяет двигаться большими шагами, опираясь на опыт предыдущих исследователей.
- Дешевизна. Комплект для первых занятий электроникой и программированием можно купить менее чем за 500 рублей. Полноценные курсы робототехники возможны при . Никакая другая технология не позволит вам так быстро и так эффективно войти в мир реальной учебной робототехники.
С чего начать?
Если вы хотите заниматься робототехникой с использованием Ардуино, то вам понадобится такой вот джентельменский набор:
- с USB кабелем для подключения к компьютеру.
- и провода.
- Комплект базовых электронных компонентов и переходник для батарейки типа крона.
- Установленная на компьютер среда
В дальнейшем, если занятия действительно увлекут и будет желание продолжить эксперименты, то список оборудования будет расширяться:
- Экраны и индикаторы.
- Двигатели и , реле и .
- Модули связи.
- Разнообразные дополнительные модули и (шилды)
Если первые шаги дадут результат, со временем вы будете узнавать половину людей, стоящих в очереди на почте (если до сих пор вы их еще не знаете), а почтальоны при встрече будут узнавать вас в лицо и нервно перебегать на другую сторону дороги.
Как купить Ардуино?
Прежде чем узнать что-то полезное, надо сначала купить что-то полезное. Для экспериментов с электроникой вам понадобится та сама электроника в виде конструктора или отдельных плат. Рекомендуется купить не очень дорогой отечественный набор с основными компонентами и затем уже заказать себе с Алиэкспресса датчики, двигатели, контроллеры и другие сокровища.
Вот несколько наиболее интересных и привлекательных по цене вариантов для покупки платы и наборов для первых уроков:
Небольшой и очень дешевый стартовый набор, в котором есть все необходимое для первых проектов | Очень качественный стартовый набор от известного производителя Keyestudio | Классический стартовый набор Ардуино, которого хватит на десятки разных проектов |
Продвинутый стартовый набор Robotlinking c Arduino UNO и Mega2560. Инструкция и удобная коробка | Простой набор с макетной платой, светодиодами, резисторами и проводами для соединения | Необычный набор для быстрого прототипирования с удобными разъемами RJ11 – справится даже маленький ребенок! |
Если вы все-таки захотите купить плату Arduino отдельно, то вот несколько интересных ссылок:
Качественная плата Arduino UNO R3 на CH340G. Комплект без кабеля с минимальной ценой около 220 рублей | Плата MegaPower Uno на базе оригинальных ATmega328 R3, FTDI FT232RL | Отличный вариант от KeyeStudio – UNO R3 MEGA328P ATMEGA16U2 с совмещенным Sensor Shield |
Подводим итоги урока
В этой короткой начальной статье мы с вами узнали, что такое Ардуино, почему эту технологию называют именно так, как выглядят типичные проекты с использованием контроллеров Arduino. Начать создавать интересные технические проекты очень просто – для этого не обязательно быть электронщиком. Просто возьмите плату ардуино, соберите с ее помощью нужную электронную схему (можно найти много готовых примеров в интернете), подключите контроллер к компьютеру и загрузите программу. Умное устройство готово!
В следующих уроках мы с вами узнаем, как работает контроллер, разберем устройство платы Arduino Uno и запустим свой первый проект.
Полезные ссылки на учебники и сайты по Ардуино
Официальные сайты ардуино:
- “Почти” официальный сайт на русском: http://arduino.ru/
Отличные сайты с большим объемом полезной информации
Ardublock - это графический язык программирования для Ардуино, предназначенный для начинающих. Эта среда достаточно проста в использовании, ее легко установить, она практически полностью переведена на русский язык. Визуально сконструированную программу,напоминающую блоки...
Прерывания - очень важный механизм Arduino, позволяющий внешним устройствам взаимодействовать с контроллером при возникновении разных событий. Установив обработчик аппаратных прерываний в скетче, мы сможем реагировать на включение или выключение кнопки, нажатие клавиатуры,...
Serial.print() и Serial.println() – это основные функции Arduino для передачи информации от платы ардуино к компьютеру через последовательный порт. На самых популярных платах Arduino Uno, Mega, Nano нет встроенного дисплея, поэтому...
Можно ли заниматься ардуино проектами без самой платы Arduino? Оказывается, вполне. Благодаря многочисленным онлайн сервисам и программам, которые имеют свое название: эмулятор или симулятор Arduino. Самыми популярными представителями таких программ являются...
Serial begin - крайне важная инструкция Arduino, она позволяет установить контроллеру соединение с внешними устройствами. Чаще всего таким «внешним устройством» оказывается компьютер, к которому мы подключаем Arduino. Поэтому Serial begin интенсивней...
Глобальная переменная в Arduino – это переменная, область видимости которой распространяется на всю программу, ее видно во всех модулях и функциях. В этой статье мы рассмотрим несколько примеров использования глобальных переменных,...
Массивы Arduino – это элемент языка, активно используемый программистами для работы с наборами однотипных данных. Массивы есть практически во всех языках программирования, не исключением является и Arduino, синтаксис которого сильно похож...