Працюємо з 09:00 до 19:00 Пн-Сб
Київ біля ТЦ Квадрат бул.Перова

Здравствуйте друзья! Я рад, презентовать вам новый урок под названием Arduino константы!


Константы – это способ передать такие данные в контроллер, которые нельзя будет изменять после загрузки программы. Из этого следует, что ввести их может только программист, а пользователь изменять их не сможет. Частично их можно описать, как переменные только для чтения. 

В Arduino IDE предусмотрены именованные и литеральные константы, предопределенные и пользовательские. Рассмотрим их всех по-отдельности и в конце отдельно раскроем тему текстовых констант. 


b = 9.8 + 34.6 / 2.7;

n = 0.005;

k = (var1+var2)/100;

String svar1 = "geekmatic.in.ua";

char myChar = 'A';

Serial.println(572.45);
Serial.println("MyText");

Литеральные константы – это просто числа для числовых данных или символы для текстовых данных, которые мы прямо указываем в выражениях программы. Мы можем указывать их в формулах, условных операторах или присваивать их значение переменным, аргументам функций или именованным константам.


33u
456743U
100000L
32767ul

n = B101; //двоичное число все равно что 
5 = ((1 * 2^2) + (0 * 2^1) + 1)

n = 0x101;  //16-ричное число все равно что 257 = ((1 * 16^2) + (0 * 16^1) + 1)
По умолчанию целочисленные литеральные константы интерпретируются как тип int, и если нам необходимо вводить в скетч данные, которые не влезут в тип int, то желательно использовать следующие символы в конце цифры.
Не нужно их пугаться – символ u или U конкретизирует, что константа имеет атрибут unsigned. То есть может принимать только положительные значения.
А символ l или L означает форсирование константы как тип long.
Литеральные константы иногда необходимо или удобно писать в 16-ричной, 8-ричной или двоичной системах исчисления. Честно говоря 8-ричная вряд ли понадобится, но остальные точно нужны.
Примеры приведены на иллюстрации выше.

#define Var1 56

const byte PinA = 2;
const byte PinB = 3;
const int PinC = 4;

const String var = "myText";

void setup{

  pinMode(PinA, INPUT);
  pinMode(PinB, INPUT);
  pinMode(PinC, OUTPUT);

}

Именованные константы имеют свое имя. В документации Arduino например  указано только одно преимущество использования именованных констант – это удобство чтения программы. Действительно, если раздать им четкие однозначные имена, то программа будет читаться программистом значительно проще. Но так же именованные константы дают нам возможность быстрого переконфигурирования программы в начале её текста. Расставив константы по всей программе, мы можем иметь доступ к изменению их значений в едином месте. Так например можно объявить ряд именованных констант с номерами пинов, и использовать имена пинов многократно в программе, а при необходимости быстро сменить номер необходимого пина в начале скетча и не искать по всей программе все упоминания об этом пине. Часто использование константы взамен переменной, которая не будет менять значение при выполнении программы, позволяет даже выиграть в освобождении памяти контроллера.

false
true

HIGH
LOW

INPUT
INPUT_PULLUP
OUTPUT

LED_BUILTIN

D1...D13..., A0...A7...

Создатели Arduino IDE предусмотрели ряд предопределенных именованных констант для удобства пользователей и облегчения чтения скетчей. Поблагодарим их за это. И вы должны здесь понять, что за каждой из этих констант скрывается предопределенное целое число. 
Константа false означает логическую ложь и на практике она хранит значение 0. Константа true означает логическую правду и на практике она равняется не нулю. То есть, если true в условном операторе сравнивать любым целым числом, не равным нулю, то условие выполнится. Это число может принимать и отрицательные значения.
Константа HIGH означает высокий логический уровень (5В для 5-вольтовых контроллеров или 3,3В для 3,3-вольтовых контроллеров) и на практике содержит число 1. Константа LOW означает низкий логический уровень (меньше 1,5В для 5-вольтовых контроллеров или меньше 1,0В для 3,3-вольтовых контроллеров) и на практике просто содержит ноль.
Константы INPUT, INPUT_PULLUP и OUTPUT созданы для конфигурирования входов/выходов контроллера. Вывод, сконфигурированный как INPUT, работает как дискретный вход. Вывод, сконфигурированный как OUTPUT, работает как дискретный выход. А конфигурация INPUT_PULLUP переводит пин контроллера в режим дискретного входа с подтяжкой на плюс питания.
Константа LED_BUILTIN содержит номер пина, к которому на стандартной плате выбранного в менеджере плат контроллера подключен сигнальный светодиод.
Константы вида D1...D13..., A0...A7... повторяют обозначения на плате контроллера и содержат номера соответствующих пинов. Константы для обозначения пинов могут содержать разные значения для разных контроллеров. Изменение происходит автоматически при выборе вами контроллера в менеджере плат.

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
*/
int led_pin = 13;
// setup function
void setup() {
  Serial.begin(9600);
  pinMode(led_pin, OUTPUT);
  Serial.println("setup");
}
// loop function
void loop() {
  digitalWrite(led_pin, HIGH);
  delay(1000);
  digitalWrite(led_pin, LOW);
  delay(1000);
  Serial.println("loop");
}

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

const char MyChar = 'A';
const char Str1[] = "arduino";
const char Str2[8] = "arduino";
const String Var = "myText";
const String Var = F("myText");
Serial.print(F("Write something"));


Отдельно стоит остановиться на символьных константах. 

Символьные литералы типа char декларируются через одиночные кавычки , а их массивы и литералы типа String через двойные кавычки.

Для хранения литералов констант типа String не в оперативной памяти RAM, а в FLASH памяти контроллера, при объявлении необходимо использовать синтаксис с буквой F. 

Подробнее эту обширную тему с декларацией символьных констант и переменных нужно будет рассмотреть на отдельном уроке.

Спасибо за внимание!

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
WiFi контроллер WeMos D1

WiFi контроллер WeMos D1

Плата контроллера на основе ESP8266 ESP-12E, имитирующая Arduino UNO, но уступающая ему по..

139.26грн.

RFID жетон 13,56 МГц

RFID жетон 13,56 МГц

RFID карточка бесконтактной идентификации в виде миниатюрного дискаМожно использовать как скрытный к..

14.42грн.

Блок питания 5В 2А для Orange PI

Блок питания 5В 2А для Orange PI

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

123.67грн.

Датчик влажности и температуры высокой точности Si7021

Датчик влажности и температуры высокой точности Si7021

Цифровой сенсор температуры и относительной влажности высокой точностиЭтот датчик влажности и темпер..

83.93грн.

Измерение уровня шума Arduino Nano

Измерение уровня шума Arduino Nano

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

Теги arduino, arduino pro, arduino uno, arduino tutorial, ардуино, скетч, arduino projects, arduino уроки, arduino уроки программирования, arduino урок 1, arduino ide уроки, arduino первые уроки, arduino уроки для начинающих, alex gyver arduino уроки, arduino nano, arduino структура программы, микроконтроллер, arduino ide, ардуино уроки, ардуино уроки для начинающих, ардуино урок 1, arduino setup, arduino loop, программировать контроллер, arduino начало, arduino для начинающих