Arduino:Основы/Переменные
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Переменные[1]
Переменная – это «место», в котором хранится кусочек данных. У нее есть название, значение и тип. К примеру, строчка кода (называемая «объявлением»)...
int pin = 13;
...создает переменную под названием pin со значением 13 и типом int. Позже в своем скетче вы можете обратиться к этой переменной по названию и благодаря этому найти, а затем и использовать хранящееся в ней значение. К примеру, в этой строчке кода...
pinMode(pin, OUTPUT);
...значение переменной pin (т.е. «13») передается функции pinMode(). Впрочем, в данном случае переменную использовать необязательно, можно просто вписать в качестве аргумента необходимое значение, как здесь...
pinMode(13, OUTPUT);
В данном случае преимущество переменой в том, что вам нужно указать номер контакта лишь единожды, в самом начале скетча, а затем использовать вместо него переменную – столько раз, сколько потребуется. То есть если позднее вы решите поменять «12» на «13», вам не нужно будет искать в скетче каждую строчку, где вы написали «13». Вы просто перемещаетесь в начало скетча и меняете значение всего один раз. Кроме того, название переменной можно сделать максимально наглядным – как в скетче, где для управления RGB-светодиодом используются переменные redPin, greenPin и bluePin.
У переменных есть и другие преимущества. Самое важное – возможность менять значение переменной при помощи операции присваивания (она выполняется при помощи знака «=»).
Например...
pin = 12;
...изменит значение переменной на «12». Обратите внимание, что мы не указали тип переменной, потому что операцией присваивания он не меняется. То есть название переменной навсегда привязывается к определенному типу, а меняется лишь значение. Также имейте в виду, что перед присвоением значения переменную нужно сначала объявить. Если вы добавите в свой скетч строчку кода выше, но не добавите в него объявление переменной, то получите сообщение вроде «error: pin was not declared in this scope», что значит «ошибка: переменная pin не была объявлена в данной области видимости переменных».
Когда вы присваиваете одну переменную другой, вы делаете копию его значения и сохраняете эту копию в участок памяти, который привязан к другой переменной. Далее, если поменять одну переменную, то на вторую это никак не повлияет. К примеру, после...
int pin = 13;
int pin2 = pin;
pin = 12;
... значение «12» будет только у переменной pin, а у pin2 по-прежнему останется «13».
Теперь вы думаете, возможно, что означает фраза «область видимости переменных» (в оригинале – «scope») из сообщении об ошибке выше... Это фраза обозначает часть скетча, в которой можно использовать нашу переменную. Это определяется тем, где мы ее объявили. К примеру, если вы хотите использовать переменную в любом месте, ее нужно объявить в самой верхней части скетча. Такая переменная называется «глобальной». Вот пример...
int pin = 13;
void setup()
{
pinMode(pin, OUTPUT);
}
void loop()
{
digitalWrite(pin, HIGH);
}
Как видите, переменная pin используется и в блоке setup(), и в блоке loop(). Оба блока отсылают к одной и той же переменной, поэтому если поменять ее в одной функции, это изменит ее и в другой. Как здесь...
int pin = 13;
void setup()
{
pin = 12;
pinMode(pin, OUTPUT);
}
void loop()
{
digitalWrite(pin, HIGH);
}
Здесь функции digitalWrite() в блоке loop() передается значение «12», поскольку это значение было присвоено переменной pin выше, в блоке setup().
Если вам нужно использовать переменную только в одном блоке, вы можете объявить ее именно в нем, и в этом случае область видимости этой функции будет ограничена лишь этим блоком.
Например....
void setup()
{
int pin = 13;
pinMode(pin, OUTPUT);
digitalWrite(pin, HIGH);
}
В данном случае переменную pin можно использовать только в блоке setup(). Если вы попытаетесь сделать так...
void loop()
{
digitalWrite(pin, LOW); // ошибка: переменная pin находится вне области видимости
}
...то получите то же сообщение, что и раньше – «error: pin was not declared in this scope». То есть, пускай вы и объявили переменную pin, но пытаетесь использовать ее вне области видимости.
Сейчас вы, вероятно, задаетесь вопросом: почему бы просто не сделать все переменные глобальными? В конце концов, если я не знаю, где мне может пригодиться переменная, почему я должен ограничивать место, где она может пригодиться? Ответ прост – так проще понять суть проблемы, если что-то пойдет не так. Если это глобальная переменная, ее значение может измениться в любом месте скетча, и это значит, что вам нужно хорошо знать весь скетч для того, чтобы понять, в чем проблема. К примеру, если переменная хранит какое-то странное значение, будет намного проще понять, почему оно получилось таким странным, если это значение будет храниться в переменной, живущей в таком вот «гетто», т.е. в ограниченной области видимости.
Примечание: В некоторых языках (вроде Python) типы присваиваются значениям, а не названиям переменных, и вы, к тому же, можете присвоить переменной значения любого типа. Это называется «динамической типизацией».
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |