Переменные в Arduino

Урок 2: Переменные в Arduino

Цели урока:

  1. Изучить что такое переменная в Arduino
  2. Изучить классификацию переменных
  3. Познакомиться с областями видимости

Что такое переменная?

Определение: Переменная — это именованная область памяти, которая хранит данные определённого типа и может изменять своё значение во время выполнения программы.

Аналогия из жизни: Представьте ящики с подписями на складе. Надпись "Гвозди" — это имя переменной, а количество гвоздей внутри — её значение. Мы можем:

  • Посмотреть, сколько гвоздей (чтение)
  • Добавить или убрать гвозди (изменение)

Адресация памяти

Каждая переменная имеет:

  1. Имя (идентификатор)
  2. Тип (определяет размер и формат данных)
  3. Значение
  4. Адрес в памяти (где физически хранятся данные)

Пример для int count = 5;:

Имя: count
Тип: int (2 байта)
Значение: 5
Адрес: 0x234 (пример)

Правила объявления переменных

Синтаксис объявления:

тип имя_переменной [= значение];

Примеры корректных объявлений:

int counter;
float temperature = 25.5;
char keyPress = 'A';

Строгие правила именования:

  1. Допустимые символы:
    • Буквы (A-Z, a-z)
    • Цифры (0-9, но не в начале)
    • Подчёркивание (_)
  2. Запрещено:
    • Начинать с цифры (1var ❌)
    • Использовать пробелы (my var ❌)
    • Применять спецсимволы (var@ ❌)
    • Использовать ключевые слова (int ❌)
  3. Регистр имеет значение:
    • Temp и temp — разные переменные

Рекомендации по именованию:

  • Осмысленные имена (sensorValue, а не var1)
  • "ВерблюжийРегистр" (currentTemperature)
  • Для констант — ВЕРХНИЙ_РЕГИСТР (MAX_TEMP)
  • Избегать однобуквенных имён (кроме счётчиков)

Классификация переменных по типам

Целочисленные типы

Тип Размер Диапазон Пример
byte 1 байт 0..255 byte led = 255;
int 2 байта -32,768..32,767 int temp = -25;
unsigned int 2 байта 0..65,535 uint age = 30;
long 4 байта -2.1 млрд..2.1 млрд long dist = 1

Особенности:

  • Переполнение: byte x = 255; x++; // Будет 0
  • Деление целых: 5 / 2 = 2 (дробная часть отбрасывается)

Типы с плавающей точкой

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

Тип Размер Точность Пример
float 4 байта 6-7 знаков float pi = 3.1415;
double 4 байта 6-7 знаков double pi = 3.1415;

На большинстве Arduino double аналогичен float

Важно:

  • Используйте точку: 3.14 (не 3,14)
  • Ограниченная точность: 0.1 + 0.2 ≠ 0.3 (будет ~0.3000000119)

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

В Arduino символьные и строковые типы данных используются для работы с текстом, символами и строками.

Тип Размер Пример
char 1 байт char grade = 'A';
String Зависит от длины String name = "Иван";

Особенности char:

  • Хранит ASCII-код: char c = 65; // 'A'
  • Ограничение: русские буквы требуют Unicode

Логический тип

Логический (булевый) тип в Arduino используется для хранения двух значений:

  • ✅ true (истина, 1, высокий сигнал HIGH)
  • ❌ false (ложь, 0, низкий сигнал LOW)

Синтаксис объявления:

bool flag = true; // Или false

Области видимости переменных

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

  • Объявляются вне функций
  • Видны во всей программе
  • Существуют всё время работы
int globalCount = 0; // Глобальная

void setup() {
  globalCount = 10;
}

void loop() {
  globalCount++;
}

Локальные переменные

  • Объявляются внутри функций/блоков
  • Видны только в своём блоке
  • Уничтожаются при выходе
int globalCount = 0;

void setup() {
  globalCount = 10; // Локальная
}

void loop() {
  globalCount++;
}

Модификатор const

Модификаторы переменных — это ключевые слова, которые изменяют поведение переменных при компиляции и выполнении программы.

Синтаксис объявления:

const тип имя_переменной = значение;

Пример:

const float PI = 3.14159;
const int MAX_SPEED = 255;

Назначение модификатора const:

  • Делает переменную неизменяемой (значение нельзя изменить после инициализации). Переменную можно использовать как и любую другую, но изменить ее значение после инициализации невозможно. При попытке присвоить новое значение компилятор выдаст ошибку. Представь, что ты настраиваешь светодиод на пине 13 (пример ниже). Без const компилятор промолчал бы, и ты бы долго гадал, почему светодиод перестал работать. А с const ты узнаешь об ошибке мгновенно, даже не заливая прошивку в плату.
    const int ledPin = 13;   // Светодиод всегда на 13 пине
    
    void setup() {
      pinMode(ledPin, OUTPUT);
    }
    
    void loop() {
      // где-то в глубине кода, через 200 строк...
      ledPin = 5;  // ❌ Ошибка компиляции! Константу нельзя изменить
    }
  • Позволяет экономить память, так как компилятор подставляет значение напрямую

Особенности:

  • Если попытаться изменить const-переменную, компилятор выдаст ошибку:
    const int x = 10;
    x = 20;  // ❌ Ошибка: "assignment of read-only variable"
  • Рекомендуется именовать константы в ВЕРХНЕМ РЕГИСТРЕ (например, MAX_TEMP).

Что мы узнали:

  • Что такое переменная
  • Правила объявления переменных
  • Классификация переменных по типам
  • Области видимости переменных

Следующий урок: Первая программа на Arduino — "Hello, World!" с мигающим светодиодом