Локальные и глобальные переменные Ардуино

Локальные и глобальные переменные Ардуино

Глобальные и локальные переменные Ардуино имеют разную область видимости ► разберем, что такое переменные в функции Ардуино и, как их правильно использовать.

Глобальные и локальные переменные в скетче Ардуино имеют разную область видимости (время жизни). Разберем, что такое переменные в функции Ардуино, какие переменные следует использовать в процедуре (подпрограмме) void loop или void setup. Также рассмотрим ситуацию, что делать, если при компиляции кода появляется ошибка — глобальные переменные используют много памяти Arduino.

Объявление переменных в скетче Ардуино

Важно помнить, что переменная в программе должна бывать объявлена до обращения к себе, то есть находиться выше по коду. Иначе вы получите ошибку при компиляции – Not declared in this scope. Еще следует учесть, что при инициализации переменной внутри цикла void loop — при каждом новом запуске цикла переменная будет каждый раз обновляться. Переменная в скетче объявляется просто:

<тип данных> <имя> <точка с запятой>
или
<тип данных> <имя> = <значение> <точка с запятой>

Пример скетча:

int var;
int var2 = 10;

void setup() {
}

void loop() {
}

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

Глобальная переменная Arduino IDE доступна («видна») в программе из любого места в подпрограмме или функции. Время жизни такой переменной с начала запуска программы до ее окончания. Локальные переменные Arduino IDE доступны внутри тех функций или подпрограмм, в которых они были объявлены. Рассмотрим несколько примеров объявления глобальных и локальных переменных в программе Ардуино.

Ардуино глобальные переменные в скетче

Глобальная переменная объявляется в программе вне функций и доступна в любом месте к чтению или записи. Загрузите по очереди в плату следующие два примера.

Правильный пример скетча:

int var = 10;  // создаем глобальную переменную в коде

void setup() {
    Serial.begin(9600);
    // выводим значение глобальной переменной на монитор порта
    Serial.println(var);
    delay(1000);
}

void loop() {
    // меняем значение переменной var и выводим на монитор
    var = var + 10;
    Serial.println(var);
    delay(500);
}

Пример скетча с ошибкой:

int var = 10;  // создаем глобальную переменную в коде

void setup() {
    int var2 = 20;  // создаем локальную переменную
    Serial.begin(9600);
    // выводим значение глобальной и локальной переменной
    Serial.println(var);
    Serial.println(var2);
    delay(1000);
}

void loop() {
    // при компиляции скетча появится ошибка
    Serial.println(var);
    Serial.println(var2);
    delay(500);
}

Пояснения к коду:

  1. глобальную переменную var можно использовать: перезаписывать и читать из любой функции (процедуры) программы;
  2. при попытке использовать локальную переменную var2 в процедуре void loop появится ошибка компиляции Ардуино, так как переменную var2 можно использовать только в той функции, где она была объявлена.

Ардуино локальные переменные в скетче

Локальная переменная живет только внутри функции или внутри блока кода в фигурных скобках. При попытке обратиться к переменной за пределами функции (как на примере выше) вы получите ошибку. Во многих уроках Ардуино мы объявляли переменную внутри цикла for. Как и в следующем примере программы, где локальную переменную нельзя использовать за пределами фигурных скобок цикла for.

Правильный пример скетча:

void setup() {
    Serial.begin(9600);
}

void loop() {
       for(int var = 0; i <= 100; var = var + 10) {
       Serial.println(var);
       delay(500);
   }
}

Пример скетча с ошибкой:

void setup() {
    Serial.begin(9600);
}

void loop() {
       for(int var = 0; i <= 100; var = var + 10) {
       Serial.println(var);
       delay(500);
   }
       Serial.println(var);
}

Пояснения к коду:

  1. локальная переменная var инициализируется внутри цикла for, поэтому при попытке обратиться к переменной за пределами цикла — появится ошибка.

Ардуино формальные переменные в скетче

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

void setup() {
    Serial.begin(9600);
}

void loop() {
    // передаем значение 10, как аргумент функции
    Func(10);
    delay(500);
}

void Func(int var) {
    var = var + 10;
    Serial.println(var);
}

Пояснения к коду:

  1. формальную переменную var можно использовать только внутри функции Func;
  2. после окончания работы функции, переменная var будет удалена из памяти.
1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5,00 out of 5)
Загрузка...

Похожие записи по теме:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *