Что такое переменные в Arduino. Как объявлять переменные разных типов. Какие бывают типы данных для переменных. Как правильно использовать переменные в скетчах Arduino.
Что такое переменные в Arduino
Переменные в Arduino — это именованные области памяти для хранения данных, которые могут изменяться в процессе выполнения программы. Они позволяют сохранять и обрабатывать различные значения — числа, символы, логические значения и т.д.
Основные характеристики переменных в Arduino:
- Имеют уникальное имя в пределах области видимости
- Хранят данные определенного типа
- Могут изменять свое значение в ходе выполнения программы
- Занимают определенное количество памяти в зависимости от типа
Правильное использование переменных позволяет эффективно организовать хранение и обработку данных в скетчах Arduino.
Объявление переменных в Arduino
Для объявления переменной в Arduino используется следующий синтаксис:
тип_данных имя_переменной;
Например:
int sensorValue;
float temperature;
boolean ledState;
При объявлении можно сразу присвоить переменной начальное значение:
int counter = 0;
float pi = 3.14;
Имена переменных должны начинаться с буквы или знака подчеркивания и могут содержать буквы, цифры и знак подчеркивания. Рекомендуется использовать понятные смысловые имена.
Основные типы данных в Arduino
Arduino поддерживает следующие основные типы данных для переменных:
- boolean — логический тип (true/false), занимает 1 байт
- char — символьный тип, занимает 1 байт
- byte — целое число от 0 до 255, занимает 1 байт
- int — целое число от -32768 до 32767, занимает 2 байта
- unsigned int — целое число от 0 до 65535, занимает 2 байта
- long — целое число от -2147483648 до 2147483647, занимает 4 байта
- float — число с плавающей точкой, занимает 4 байта
Выбор правильного типа данных позволяет оптимизировать использование памяти микроконтроллера.
Область видимости переменных
В Arduino существует два основных варианта объявления переменных с точки зрения области видимости:
Глобальные переменные
Объявляются вне функций, доступны из любого места программы:
int globalVar; // Глобальная переменная
void setup() {
globalVar = 10; // Доступна в setup()
}
void loop() {
globalVar++; // Доступна в loop()
}
Локальные переменные
Объявляются внутри функций, доступны только внутри этих функций:
void setup() { int localVar = 5; // Локальная переменная // localVar доступна только внутри setup() } void loop() { // localVar здесь недоступна }
Правильный выбор области видимости позволяет более эффективно организовать код и избежать конфликтов имен переменных.
Модификаторы переменных
В Arduino доступны следующие основные модификаторы для переменных:
- static — переменная сохраняет свое значение между вызовами функции
- const — значение переменной нельзя изменить после инициализации
- volatile — переменная может быть изменена извне (прерыванием)
Пример использования модификаторов:
static int counter = 0; // Статическая переменная
const float PI = 3.14; // Константа
volatile int sensorValue; // Переменная, изменяемая в прерывании
Модификаторы позволяют более точно определить поведение переменных в программе.
Использование переменных в Arduino
После объявления переменные можно использовать для хранения и обработки данных. Основные операции с переменными:
- Присваивание значения:
variable = 10;
- Чтение значения:
int x = variable;
- Арифметические операции:
result = a + b;
- Инкремент/декремент:
counter++; counter--;
- Сравнение:
if (a > b) { ... }
Пример использования переменных в скетче Arduino:
int sensorPin = A0; // Пин аналогового датчика int ledPin = 13; // Пин светодиода int sensorValue = 0; // Переменная для хранения значения датчика void setup() { pinMode(ledPin, OUTPUT); } void loop() { sensorValue = analogRead(sensorPin); // Чтение значения датчика if (sensorValue > 500) { // Сравнение с пороговым значением digitalWrite(ledPin, HIGH); // Включение светодиода } else { digitalWrite(ledPin, LOW); // Выключение светодиода } delay(100); // Задержка }
Правильное использование переменных позволяет создавать гибкие и эффективные программы для Arduino.
Оптимизация использования памяти
При работе с переменными в Arduino важно учитывать ограниченные ресурсы памяти микроконтроллера. Несколько советов по оптимизации:
- Используйте наименьший подходящий тип данных для переменной
- Избегайте излишнего использования глобальных переменных
- Освобождайте память, когда переменная больше не нужна
- Используйте модификатор const для констант
- По возможности используйте целочисленные типы вместо float
Пример оптимизации:
// Неоптимальный вариант
float temperature = 25.5;
// Оптимизированный вариант
int temperatureX10 = 255; // Умножаем на 10 для сохранения точности
Грамотная оптимизация позволяет более эффективно использовать ограниченные ресурсы Arduino.
Часто задаваемые вопросы о переменных в Arduino
Вот ответы на некоторые распространенные вопросы о переменных в Arduino:
Какое максимальное количество переменных можно использовать в Arduino?
Максимальное количество переменных ограничено только доступной памятью микроконтроллера. Для Arduino Uno это около 2 КБ оперативной памяти.
Можно ли использовать русские буквы в именах переменных?
Нет, имена переменных должны содержать только латинские буквы, цифры и знак подчеркивания.
Чем отличаются переменные типа int и long?
Переменные типа int занимают 2 байта и могут хранить числа от -32768 до 32767. Переменные типа long занимают 4 байта и могут хранить числа от -2147483648 до 2147483647.
Как узнать текущее значение переменной в процессе выполнения программы?
Для отладки можно использовать функцию Serial.println() для вывода значения переменной в монитор порта:
Serial.println(variable);
Правильное понимание особенностей работы с переменными позволяет создавать более эффективные и надежные программы для Arduino.
mBlock3: расширение Advanced Arduino v1.0
Автор А.Т.Григорьев
Внимание! В электронном архиве опубликована 5 глава нашего пособия «Scratch и Arduino для юных программистов и конструкторов» в формате pdf для свободного доступа. В этой главе, в частности, детально описывается установка расширения Advanced Arduino
.
Загрузить расширение
Advanced Arduino Extension v1.0
AdvancedArduino.zip
Compressed Archive in ZIP Format 4.7 KB
Download
Что такое «AdvancedArduino»
demo.sb2
Compressed Archive in ZIP Format 73.8 KB
Download
«AdvancedArduino» — это расширение для среды программирования mBlock, которое может применяться вместо стандартного расширения «Arduino», и предоставляет следующие дополнительные возможности при работе в режиме «Arduino mode»:
- использование графических блоков для ряда наиболее востребованных библиотечных функций Arduino IDE (min(), max(), constrain(), map(), pow()), предназначенных для преобразования значений;
- использование дополнительных графических блоков для работы с последовательной шиной Serial, а также Serial2;
- использование в именах графических блоков преимущественно стандартных названий библиотечных функций;
- использование графических блоков (блоки «def» и «code»), позволяющих вставлять произвольные фрагменты текстового кода на языке программирования «Wire» в скетч Arduino IDE, генерируемый средой mBlock;
- использование в текстовом коде любых библиотечных функций Arduino IDE;
- определение в текстовом коде пользовательских функций, возвращающих значения произвольного типа;
- определение в текстовом коде глобальных и локальных переменных и параметров функций произвольного типа, включая массивы.
Внимание! Среда mBlock генерирует скетч Arduino IDE, используя тип «double» для всех переменных и параметров функций, создаваемых в визуальном режиме. Не забывайте при необходимости использовать операцию явного преобразования значения к другому типу — int(), byte(), String().
Установка расширения AdvancedArduino
Первый способ установки
- Запустите mBlock и выберите в меню команду «Manage Extensions » («Extensions «, «Manage Extensions «). С сайта MakeBlock будет загружен список доступных расширений (потребуется интернет-соединение).
- Наберите «AdvancedArduino» (без кавычек) в строке фильтрации («Search»). Список сократится до одного элемента.
- Нажмите на кнопку «Загрузить» найденного элемента «AdvancedArduino «.
Второй способ установки
- Загрузите или скопируйте файл «AdvancedArduino.zip» на свой компьютер.
- Запустите mBlock и выберите в меню команду «Manage Extensions » («Extensions «, «Manage Extensions «), нажмите на кнопку «Add Extension».
- Выберите тип файла «zip-file», пролистайте до загруженного архива, нажмите на кнопку «Открыть».
При наличии вопросов пользуйтесь дополнительными инструкциями разработчиков Makeblock:
【mBlock 3】Create Extensions for mBlock
Примеры использования расширения AdvancedArduino
Пример 1.
Блоки с текстовым кодом Arduino IDE в графическом скрипте.
Внимание! Содержимое графических блоков code() и def() при генерации скетча Arduino IDE попадает ВНУТРЬ комментария, определенного с использованием директив /* и */. Для того, чтобы фрагмент кода начал использоваться компилятором, В НАЧАЛЕ необходимо поставить ЗАКРЫВАЮЩУЮ «скобку» ( */ ), а В КОНЦЕ — ОТКРЫВАЮЩУЮ ( /* ).
Имейте ввиду, что mBlock самостоятельно добавляет в скетч Arduino IDE команды pinMode() лишь в том случае, когда встречает в графическом скрипте блоки, подобные «digitalRead» и «digitalWrite».
Sample 1 — Advanced Arduino Program.sb2
Compressed Archive in ZIP Format 73.2 KB
Download
Пример 2.
Глобальные и локальные переменные, массивы и функции, возвращающие значения.
Обратите внимание, глобальная переменная «SizeOfArray» имеет тип double, в данном примере используется явное преобразование значения к другому типу: byte(SizeOfArray).
Sample 2 — Advanced Arduino Program 2.sb
Compressed Archive in ZIP Format 73.6 KB
Download
Пример 3.
Графические блоки с библиотечными функциями Arduino IDE.
Sample 3 — Advanced Arduino Program. sb2
Compressed Archive in ZIP Format 73.3 KB
Download
Пример 4.
«Построчное» добавление фрагментов текстового кода.
Обратите внимание, в текстовое поле отмеченного графического блока «Serial println» необходимо ввести символ <пробел> (ASCII 32), в этом случае mBlock добавляет в скетч Arduino IDE команду Serial.println(). Если внутри текстового поля — пустая строка, генерируется команда Serial.println(0).
Sample 4 — Advanced Arduino Program.sb2
Compressed Archive in ZIP Format 73.6 KB
Download
Пример 5.
Включение текстового кода, сохраненного в текстовом файле на диске.
Sample 5 — Advanced Arduino Program.sb2
Compressed Archive in ZIP Format 73.5 KB
Download
На диске должен располагаться текстовой файл с соответствующим именем и содержанием. При необходимости поменяйте путь к этому файлу в своем скрипте.
Содержание текстового файла:
void ascendingSort(int dt[], int SizeOfArray) {
for (int i=0;i<SizeOfArray;i++) {
for (int j=i+1;j<SizeOfArray;j++) {
if (dt[i]>dt[j]) {
int temp=dt[i];
dt[i]=dt[j];
dt[j]=temp;
};
};
};
};
Виды компьютеров — презентация онлайн
2. Виды компьютеров
• Суперкомпьютеры• Мейнфреймы
• Серверы
• Персональные компьютеры
• Микроконтроллеры
http://лекции.техблог.рф/введение_в_ардуино.ppt
2
3. Области использования МК
• Промышленность• Медицина
• Транспорт
• Робототехника
• Бытовая техника, умный дом
• Игрушки
http://лекции.техблог.рф/введение_в_ардуино.ppt
3
4. Параметры МК
• Наличие/отсутствие– ОЗУ, ПЗУ
– возможности перепрошивки
– встроенного генератора тактовой частоты
– сторожевого таймера
– периферии
• Архитектура: 8, 16, 32 бит
• Различная частота процессора
• Специального назначения
http://лекции. техблог.рф/введение_в_ардуино.ppt
4
5. Платформа Arduino
Электронный конструктор и удобнаяплатформа быстрой разработки
электронных устройств для новичков и
профессионалов
– Среда разработки
– Платы
http://лекции.техблог.рф/введение_в_ардуино.ppt
5
6. Популярность платформы
Низкий порог входа в мир МК
Разнообразие плат. Две версии носимых плат: LilyPad и Seeeduino Film
Кроссплатформенность среды разработки. Переносимость кода для разных
плат Arduino.
Отсутствие необходимости в программаторе
– почти все платы имеют USB разъем
Отсутствие необходимости в пайке
– схемы собираются на беспаячной макетной плате.
Open Source САПР системы для создания схем с платами Arduino
– кросплатформенные
– бесплатные
Язык программирования C/C++
http://лекции.техблог.рф/введение_в_ардуино.ppt
6
7. Основные платы
• Uno–
–
–
–
–
–
базовая платформа Arduino
14 цифровых входов/выходов (из них 6 ШИМ)
6 аналоговых входов
1 последовательный порт UART
программируется через USB с токовой защитой
дополняется платами расширения
• Mega2560
–
–
–
–
–
54 цифровых входа/выхода (из них 14 ШИМ)
16 аналоговых входов
4 последовательных порта UART
дополняется платами расширения
программируется через USB
• Nano
–
–
–
14 цифровых входов/выходов (6 могут использоваться как
выходы ШИМ)
8 аналоговых входов
программируется через Mini-USB
http://лекции. техблог.рф/введение_в_ардуино.ppt
7
8. Платы расширения
BluetoothGSM+GPS
Ethernet
GSM+GPS
xBeeLCD
LED
http://лекции.техблог.рф/введение_в_ардуино.ppt
8
9. Плата Arduino Uno
СВЕТОДИОД НАВЫВОДЕ №13
ЗЕМЛЯ
ЦИФРОВЫЕ ВЫВОДЫ (ШИМ ~)
РАЗЪЕМ USB
5В
КНОПКА
ПЕРЕЗАГРУЗКИ
КВАРЦЕВЫЙ
РЕЗОНАТОР 16 МГц
МК
ATmega328
РАЗЪЕМ ПИТАНИЯ 7-12В
ЦЕНТР +
ВЫХОД
3.3В + ВЫХОД
5В +
АНАЛОГОВЫЕ ВХОДЫ
ЗЕМЛЯ
ВХОД +
http://лекции.техблог.рф/введение_в_ардуино.ppt
9
10. Среда разработки
Выбор платыВыбор COM-порта
Прошивка
http://лекции.техблог.рф/введение_в_ардуино.ppt
10
11. Ток, напряжение, сопротивление
Источник• Высота жидкости подобна
напряжению
• Чем больше разность
уровней, тем больше
энергия
• Другое название
напряжения – разность
потенциалов
• Чем больше разность
уровней тем быстрее и
сильнее поток
Поток, стремящийся сверху вниз
Полезная нагрузка
• Трение жидкости о стенки трубы,
а также выполнение какой-либо
работы, обеспечивают
сопротивление
• Чем сильней сопротивление тем
медленней поток
• При большом сопротивлении
можно увеличить поток, подняв
давление – разность потенциалов
Нулевой уровень, зона нулевого потенциала, “земля”
http://лекции. техблог.рф/введение_в_ардуино.ppt
11
12. Закон Ома
• Сила тока в цепи прямо пропорциональнанапряжению и обратно пропорциональна
полному сопротивлению цепи
• I=U/R
• U – величина напряжения в вольтах
• R – сумма всех сопротивлений в омах
• I – протекающий по цепи ток в амперах
http://лекции.техблог.рф/введение_в_ардуино.ppt
12
13. Закон Кирхгофа
I 0n
j 1
j
http://лекции.техблог.рф/введение_в_ардуино.ppt
13
14. Закон Ома на практике
UI
R
Точка с высшим потенциалом. Обычно это плюс питания
Rсумм = R1 + R2 = 2 Ом
I
5В
2. 5 А
2Ом
Точка с нулевым потенциалом. Обычно это минус питания
Распределение напряжения в зависимости от сопротивления:
http://лекции.техблог.рф/введение_в_ардуино.ppt
14
15. Резистор
http://лекции.техблог.рф/введение_в_ардуино.ppt15
16. Конденсатор
Сейчас конденсаторзаряжается от
источника
Но если переключить
рубильник на другую
цепь, то произойдет
разряд конденсатора на
резистор
http://лекции. техблог.рф/введение_в_ардуино.ppt
16
17. Катушка индуктивности
http://лекции.техблог.рф/введение_в_ардуино.ppt17
http://лекции.техблог.рф/введение_в_ардуино.ppt
18
19. Транзистор
Транзистор подобен вентилю, где крошечная сила может управлять могучим
потоком энергии, в сотни раз превышающим управляющий
Транзистор позволяет слабым сигналом, например с ноги микроконтроллера,
управлять мощной нагрузкой типа двигателя или лампочки.
Если не хватит усиления одного транзистора, то их можно соединять каскадами
http://лекции.техблог.рф/введение_в_ардуино.ppt
19
20. Понятие нуля и единицы
http://лекции.техблог.рф/введение_в_ардуино.ppt20
21. Подтяжка выводов до нужного напряжения
http://лекции.техблог.рф/введение_в_ардуино.ppt21
22. Предполетная подготовка
• Проверить наличиеArduino-совместимой
платы и USB-кабеля
• (Опционально) Проверить
наличие макетной платы,
соединительных проводов,
диода и резистора на 150500 Ом
http://лекции. техблог.рф/введение_в_ардуино.ppt
22
23. Предполетная подготовка
Принципиальная схемаhttp://лекции.техблог.рф/введение_в_ардуино.ppt
23
24. Предполетная подготовка
Макетная платаhttp://лекции.техблог.рф/введение_в_ардуино.ppt
24
http://лекции.техблог.рф/введение_в_ардуино.ppt
25
26. Разбор полета (1)
Тип возвращаемого значения,либо void, если ничего не
возвращаем
Имя функции
Параметры функции и их тип
Объявление переменной типа int
Инициализация переменной значением
Прекращение выполнения функции и
возврат значения типа int
Оператор присваивания
http://лекции.техблог.рф/введение_в_ардуино.ppt
26
27. Разбор полета (2)
Характеристики диода:Тип корпуса
Угол рассеивания, градусы
Типовой (рабочий) ток, А
Падение (рабочее) напряжения, В
Цвет свечения (длина волны), нм
Пример:
U светодиода 2 В, I светодиода 20 мА
U резистора U питания U светодиода 5В 2 В 3В
R резистора
U резистора
I светодиода
3В
150 Ом
0. 02 А
http://лекции.техблог.рф/введение_в_ардуино.ppt
27
28. Разбор полета (3)
Недостаток программы: если мы захотим поменять вывод №13 на другой,мы должны внести исправления в нескольких местах.
Решение: введем глобальную переменную, хранящую номер вывода
http://лекции.техблог.рф/введение_в_ардуино.ppt
28
29. Разбор полета (4)
Недостаток программы: слишком много дублированного кода внутри циклаРешение: введем глобальную переменную, хранящую текущее значение
напряжения
http://лекции.техблог.рф/введение_в_ардуино.ppt
29
30. Разбор полета (5)
Недостаток программы: delay(1000) означает, что процессор МК простаивает 1секунду и мы не можем обрабатывать датчики/делать вычисления. Фактически, мы
замедлили его работу до частоты 1 Гц вместо 16 МГц. Если сработает датчик, то мы
сможем отследить его через 1 сек вместо 1/16000000 сек., либо вообще не сможем
отследить событие
http://лекции.техблог.рф/введение_в_ардуино. 32 — 1) изанимает 32 бита (4 байта) в памяти.
• float (плавающий) служит для хранения чисел с плавающей
запятой. Этот тип часто используется для операций с данными,
считываемыми с аналоговых входов. Диапазон значений — от 3.4028235E+38 до 3.4028235E+38. Переменная типа floatзанимает
32 бита (4 байта) в памяти
• Double (двойной), в отличие от большинства языков
программирования, имеет ту же точность, что и тип float и
занимает также 4 байта памяти
http://лекции.техблог.рф/введение_в_ардуино.ppt
• Базовая структура программы для Arduino довольно
проста и состоит, по меньшей мере, из двух частей. В этих
двух обязательных частях, или функциях, заключён
выполняемый код
Где setup() — это подготовка, а loop() — выполнение.
Обе функции требуются для работы программы.
http://лекции.техблог.рф/введение_в_ардуино.ppt
Перед функцией setup — в самом начале
программы, обычно, идёт, объявление
всех переменных. setup — это первая
функция, выполняемая программой, и
выполняемая только один раз, поэтому
она используется для установки режима
работы портов (pinMode()) или
инициализации последовательного
соединения
http://лекции. техблог.рф/введение_в_ардуино.ppt
http://лекции.техблог.рф/введение_в_ардуино.ppt
Следующая функция loop содержит код,
который выполняется постоянно —
читаются входы, переключаются выходы и
т.д. Эта функция — ядро всех программ
Arduino и выполняет основную работу.
http://лекции.техблог.рф/введение_в_ардуино.ppt
http://лекции.техблог.рф/введение_в_ардуино.ppt
• Функция — это блок кода, имеющего
имя, которое указывает на исполняемый
код, который выполняется при вызове
функции. Функции void setup() и void
loop() уже обсуждались
http://лекции.техблог.рф/введение_в_ардуино.ppt
Могут быть написаны различные
пользовательские функции, для выполнения
повторяющихся задач и уменьшения
беспорядка в программе. При создании
функции, первым делом, указывается тип
функции. Это тип значения, возвращаемого
функцией, такой как ‘int’ для целого (integer)
типа функции. Если функция не возвращает
значения, её тип должен быть void. За типом
функции следует её имя, а в скобках
параметры, передаваемые в функцию.
http://лекции.техблог.рф/введение_в_ардуино.ppt
http://лекции.техблог.рф/введение_в_ардуино.ppt
{} фигурные скобки
Фигурные скобки (также упоминаются как
просто «скобки») определяют начало и
конец блока функции или блока
выражений, таких как функция void
loop() или
выражений (statements) типа for и if.
http://лекции.техблог.рф/введение_в_ардуино.ppt
За открывающейся фигурной скобкой { всегда
должна следовать закрывающаяся
фигурная скобка }. Об этом часто упоминают,
как о том, что скобки должны быть
«сбалансированы». Несбалансированные
скобки могут приводить к критическим,
неясным ошибкам компиляции, вдобавок
иногда и трудно выявляемым в больших
программах.
http://лекции.техблог.рф/введение_в_ардуино.ppt
43. переменные
• Переменные — это способ именовать и хранить числовыезначения для последующего использования программой. Само
название — переменные, говорит о том, что переменные — это
числа, которые могут последовательно меняться, в отличие от
констант, чьё значение никогда не меняется. Переменные нужно
декларировать (объявлять), и, что очень важно — им можно
присваивать значения, которые нужно сохранить. Следующий
код объявляет переменную inputVariable, а затем присваивает ей
значение, полученное от 2-го аналогового порта:
http://лекции.техблог.рф/введение_в_ардуино.ppt
• Переменные могут быть объявлены в
начале программы перед void setup(),
локально внутри функций, и иногда в
блоке выражений таком, как цикл for.
То, где объявлена переменная,
определяет её границы (область
видимости), или возможность
некоторых частей программы её
использовать.
http://лекции.техблог.рф/введение_в_ардуино.ppt
• Глобальные переменные таковы, что их
могут видеть и использовать любые
функции и выражения программы.
Такие переменные декларируются в
начале программы перед функцией
setup(). Локальные переменные
определяются внутри функций или
таких частей, как цикл for. Они видимы
и могут использоваться только внутри
функции, в которой объявлены.
http://лекции.техблог.рф/введение_в_ардуино.ppt
http://лекции.техблог.рф/введение_в_ардуино.ppt
47. массивы
http://лекции.техблог.рф/введение_в_ардуино.ppt48. арифметика
http://лекции.техблог.рф/введение_в_ардуино.ppt49. операторы сравнения
http://лекции.техблог.рф/введение_в_ардуино.ppt50. логические операторы
http://лекции.техблог.рф/введение_в_ардуино.ppt51. константы
• true/false• high/low Эти константы определяют уровень выводов
как HIGH или LOW и используются при чтении или
записи на логические выводы. HIGH определяется как
логический уровень 1, ON или 5 вольт(3-5), тогда как
LOW — 0, OFF или 0 вольт(0-2)
http://лекции.техблог.рф/введение_в_ардуино.ppt
Variables — — Проект модульной электроники Arduino
Давайте теперь узнаем о переменных . Они подобны контейнерам для хранения данных в вашей программе, каждый со своим именем. Мы можем, например, поместить число в переменную, а затем извлечь его, манипулировать им и изменить его значение. В этом случае в любом месте программного обеспечения, где вы будете использовать число (например, 0
или 255
или 800
), вы можете использовать имя этой переменной.
!Объявление переменной
Объявление переменной состоит из двух частей: имени и типа. После того, как вы выбрали тип и имя переменной, вы можете объявить ее следующим образом:
int example_variable; // Объявление переменной типа int с именем example_variable
Существуют различные типы переменных, и в этом проекте мы собираемся использовать int ! int — это переменная, которая хранит целые числа, отрицательные или положительные.
Существует несколько правил кодирования для именования переменных: имя не может начинаться с цифры и не может содержать пробелы или специальные символы . Имена переменных могут состоять только из 0-9, az, AZ и _
. Когда вы выбираете имя для переменной, постарайтесь сделать его описательным, то есть выберите такое имя, как «yellowLed» вместо «variableX». Это поможет упростить чтение кода и его последующую интерпретацию.
Как правило, переменная может использоваться только внутри фигурных скобок ({}), в которых она была объявлена. Тем не менее, вы можете создать глобальная переменная , объявив ее перед функцией setup()
.
Доступ к глобальным переменным возможен из любой точки программы. Тем не менее, имейте в виду, что если вы создадите переменную внутри setup()
, ее можно будет использовать только внутри setup()
, и то же самое относится к loop()
.
!Использование переменной
Чтобы присвоить значение переменной, вы можете использовать оператор атрибуции =
. Оператор атрибуции использует значение справа от знака равенства и сохраняет его внутри переменной слева.
Пример:
// Объявление переменной int цели_из_Германии; // Присвоение значения голов_из_Германии = 7;
Мы также можем указать значение напрямую при создании переменной:
int цели_из_Бразилия = 1;
(Обратите внимание, что в предыдущем эксперименте мы использовали переменную для хранения значения вывода, связанного с компонентом: внутр желтый светодиод = A1;
)
!Думай!
Можно ли выполнять математические операции, используя более одной переменной?
Ответить
Да, можно, посмотрите пример:
инт а = 15; интервал b = 72; интервал с = а * б; /* с равно 15×72 */
Ниже представлены математические операторы:
Математические операторы | Кодовое обозначение |
---|---|
Сумма | + |
Вычитание | — |
Умножение | * |
Отдел | / |
Остаток от деления | % |
Типы переменных Arduino | th muses
С Новым годом, Bonne annee и Frohes neues Jahr!
В 2014 году я буду возиться с микроконтроллером Arduino. Я сделал элементарный «светоорган», используя фотосенсоры и Max/MSP. Вы воспроизводите музыку, закрывая датчики пальцами и позволяя разным количествам света светить между ними. Затемнение для низких нот, яркость для высоких нот.
Первая проблема: код Arduino можно было бы оптимизировать, используя правильный тип переменной для хранения значений датчика. В коде, который я скачал, для каждого датчика используются «поплавки», но я думаю, что это излишество. Float — это псевдоним для числа с плавающей запятой, то есть числа с десятичной точкой, которая может перемещаться влево или вправо, чтобы отображать больше или меньше цифр. Это сложные типы чисел в вычислениях, поэтому они требуют больше памяти и мощности. На Arduino, как и на 8-битных компьютерах старой школы, память и мощность бесценны!
В результате мой орган мог реагировать только на движения пальцев три раза в секунду. Слишком вялый для токатты и фуги. Могут быть и другие проблемы, замедляющие выполнение кода, поэтому, если я их найду, я опубликую их здесь.
Что может быть лучше, чем переменные с плавающей точкой для использования в Arduino? Идеальным было бы 10-битное целое число, а не 32-битное число с плавающей запятой. Arduino считывает напряжение на аналоговых выводах от 0 до 5 В и преобразует его в целое число от 0 до 1023. Это 1024 возможных значения, или 2 в степени 10, следовательно, 10 бит. Также можно запросить большее разрешение, например, 11- или 12-битное (0–2047 или 0–409).5), если проект выиграет от более точных данных.
Наименьшие типы чисел в Arduino — это 8 бит, например знаковый или беззнаковый «char» и «byte». Они предлагают 256 дискретных значений, от 0 до 255 или от -128 до +127. Для чисел со знаком зарезервирован 1 бит для обозначения «-» или «+». Тип «char» предназначен для символов, то есть букв, знаков препинания и специальных символов.
Нам нужно 10-битное число, а не 8-битное, поэтому символов или байтов будет недостаточно при чтении аналоговых выводов Arduino.
Следующий больший тип числа имеет размер 16 бит и может представлять беззнаковые (только положительные) целые числа от 0 до 65535 или знаковые (положительные или отрицательные) целые числа от -32768 до +32767. Эти типы переменных называются подписанным или беззнаковым «целым числом» (для всех Arduino, кроме модели Due), «коротким» или «словом» (что идентично беззнаковому целому).
Таблица типов переменных:
Любой из 16-битных целочисленных типов со знаком или без знака более чем подходит для наших нужд, поскольку все они могут охватывать 10-, 11- или 12-битные числа. Мы можем немного потерять скорость из-за увеличенного количества битов, однако мы легко можем представить показания напряжения Arduino в диапазоне от 0 до 1023 или выше (в два или четыре раза больше), по мере необходимости.
Таблица результатов скорости:
Использование трех «коротких» переменных вместо трех «плавающих» сделало код на 25% быстрее — не так драматично, как я ожидал, но значительное улучшение. Еще одно, несколько очевидное отличие заключается в количестве считываемых выводов. Снятие трех показаний вместо двадцати было примерно в 6 раз быстрее. Наконец, использование переменной типа «слово» требует немного меньше памяти. Не знаю почему, но никакие улучшения нельзя игнорировать, пока не хватает ресурсов памяти.
Это не просто приемы оптимизации кода: это хорошая техника, простая и понятная. Есть много способов научиться, и я разместил несколько ссылок ниже, чтобы вы могли начать. С современными домашними компьютерами мы считаем само собой разумеющимся, что они работают достаточно быстро, но при работе с сегодняшними более простыми микроконтроллерами нам нужно заново учиться эффективно управлять ими.
Возможно, вы захотите глубже изучить эти понятия:
• С фиксированной точкой Математика, а не с плавающей запятой, например баланс вашей чековой книжки в пенни, а не в долларах и центах.
• Только целые числа , например, вам нужно пи, 3,141 , поэтому рассмотрите возможность использования «кило-пи», 3141 и фактор для ответа в 1000 раз больше, чем ожидалось, например, 2 x пи x 1 метр => 2 х 1000 пи х 1 м = 6283 милли метра.
• Компьютеры гораздо лучше умеют умножать, чем делить (например, Arduino в 40 раз быстрее), особенно при использовании степеней двойки. Вы действительно могли бы заморочиться с , сдвигая биты , а не умножая на обратную величину (n x 0,5 вместо n/2), если бы вы могли выразить свои числа, используя степени 2. 910 (= 3216,99) может каким-то образом помочь, сдвинув бит 10 раз влево или вправо для умножения или деления. Это фактически умножение числа пи на 1024 вместо 1000, что соответствует точности 97,6%… Я не совсем понимаю, к чему я веду эту мысль, но, пожалуйста, не стесняйтесь оставлять полезный комментарий о сдвиге битов.
• Деление Ньютона-Рафсона или Гольдшмидта… ?
• Преобразование десятичной дроби в дробную. (Было бы здорово, если бы программисты и теоретики микротонов могли ограничить простые числа и показатели степени.) http://www.mindspring.com/~alanh/fracs.html
Некоторые ссылки
Arduino/Справочник по языку/Переменные/Типы данных http://arduino.cc/en/Reference/HomePage
«Подробное руководство по ускорению разделения AVR», Брайан Бенчофф [и 30 комментаторов ] http://hackaday.com/2012/07/15/a-detailed-explanation-on-speeding-up-avr-division/
«Целая математика = хорошо», автор darkscout http://www. reddit.com/r/arduino/comments/n7rvo/integer_math_good/
«Быстрый код по пятницам: избегайте математики с плавающей запятой», автор EngBlaze http://www.