- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Программируем Arduino. Основы работы со скетчами - Монк Саймон
Шрифт:
Интервал:
Закладка:
void setup()
{
Serial.begin(9600);
}
void loop()
{
int delayPeriod = random(2000, 8000);
delay(delayPeriod);
int messageIndex = random(4);
Serial.println(messages[messageIndex]);
}
Все сообщения, или строки, как часто называют коллекции символов, имеют тип char*. Символ звездочки (*) говорит о том, что это указатель на что-то. Подробнее об указателях будет рассказываться в главе 6. Квадратные скобки ([]) в конце объявления переменной указывают, что данная переменная хранит массив данных типа char*, а не единственное значение char*.
Внутри функции loop переменной delayPeriod присваивается случайное значение из диапазона от 2000 до 7999 (второй аргумент random не входит в диапазон). Затем вызовом функции delay выполняется пауза, продолжительность которой равна полученному промежутку.
Переменной messageIndex также присваивается случайное значение с помощью команды random, но на этот раз ей передается единственный параметр, в результате чего она возвращает случайное число в диапазоне от 0 до 3, которое затем используется как индекс сообщения для отправки в монитор порта.
Наконец, сообщение, находящееся в выбранной позиции, посылается в монитор порта. Опробуйте этот скетч, не забыв открыть окно монитора последовательного порта.
Аналоговые входы
Контакты с метками от A0 до A5 на плате Arduino можно использовать для измерения приложенного к ним напряжения. Уровень напряжения должен находиться в диапазоне от 0 до 5 В. Измерение выполняется с помощью встроенной функции analogRead, которая возвращает значение в диапазоне от 0 до 1023: значение 0 соответствует напряжению 0 В, а значение 1023 — напряжению 5 В. То есть, чтобы преобразовать число в значение, находящееся в диапазоне от 0 до 5, нужно разделить полученное число на 5: 1023/5 = 204,6.
Тип данных int не очень хорошо подходит для измерения напряжения, так как представляет только целые числа, а нам было бы желательно видеть также дробную часть. Для этого следует использовать тип данных float.
Загрузите следующий скетч в плату Arduino и затем замкните скрепкой контакты A0 и 3.3V (рис. 1.15).

Рис. 1.15. Соединение контактов A0 и 3.3V
// sketch 01_06_analog
int analogPin = A0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int rawReading = analogRead(analogPin);
float volts = rawReading / 204.6;
Serial.println(volts);
delay(1000);
}
Откройте монитор последовательного порта, и вы должны увидеть поток чисел (рис. 1.16). Числа должны быть близки к значению 3,3.

Рис. 1.16. Вывод значений напряжения
ВНИМАНИЕ
Не замыкайте между собой контакты электропитания (5V, 3.3V и GND). Это может привести к выходу из строя платы Arduino, а может быть, и компьютера.
Если теперь один конец скрепки оставить соединенным с контактом A0, а другой подключить к контакту 5V, числа в мониторе изменятся и будут близки к 5 В. Теперь соедините контакт A0 с контактом GND, и вы увидите числа 0 В.
Аналоговые выходы
Плата Arduino Uno не имеет настоящих аналоговых выходов (такие выходы вы найдете на плате Arduino Due), но она имеет несколько выходов с широтно-импульсной модуляцией (Pulse-Width Modulation, PWM). Они имитируют аналоговые выходы, управляя длительностью импульсов (рис. 1.17).

Рис. 1.17. Широтно-импульсная модуляция
Чем длиннее положительный импульс, тем выше среднее напряжение на выходе. Так как импульсы следуют с частотой 500 раз в секунду, а большинство устройств, которые вам доведется подключать к выходам PWM, не обладают мгновенной реакцией, возникает эффект изменения напряжения.
Контакты, отмеченные на плате Arduino Uno значком ~ (контакты 3, 5, 6, 9, 10 и 11), можно использовать как аналоговые выходы.

Рис. 1.18. Измерение напряжения на выходе
Если у вас есть вольтметр, установите на нем диапазон измерения 0…20 В постоянного тока и подключите положительный щуп к контакту 6, а отрицательный — к контакту GND (рис. 1.18). Затем загрузите следующий скетч.
// sketch 01_07_pwm
int pwmPin = 6;
void setup()
{
pinMode(pwmPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
if (Serial.available())
{
int dutyCycle = Serial.parseInt();
analogWrite(pwmPin, dutyCycle);
}
}
Откройте монитор последовательного порта и введите число в диапазоне от 0 до 255 в текстовое поле в верхней части окна, слева от кнопки Send (Отправить). Затем щелкните на кнопке Send (Отправить) — вы должны увидеть, как на мультиметре изменится напряжение. Если послать число 0, напряжение должно упасть до 0. Отправка числа 127 должна дать середину между 0 и 5 В (2,5 В), а число 255 должно дать напряжение около 5 В.
В этом скетче функция loop начинается с оператора if. Условием для if является результат выполнения команды Serial.available(). То есть если монитор последовательного порта получил сообщение, выполняются команды внутри фигурных скобок. В этом случае команда Serial.parseInt преобразует текст сообщения, введенного в окне монитора порта, в значение типа int, которое затем передается как аргумент команде analogWrite для вывода импульсов на контакт.
Использование библиотек
Так как платы Arduino обладают весьма ограниченным объемом памяти, имеет смысл включать в программу, которая в конечном итоге окажется в плате, только тот код, который действительно потребуется. Один из способов добиться этого — использовать библиотеки. В Arduino и вообще в языке C под библиотекой понимается коллекция функций.
Например, Arduino IDE включает библиотеку для работы со светодиодным жидкокристаллическим дисплеем. Она занимает примерно 1,5 Кбайт памяти для программ. Нет никакого смысла подключать эту библиотеку, если она не используется, поэтому такие библиотеки подключаются только при необходимости.
Подключение выполняется добавлением директив #include в начало скетча. Добавить инструкции include для подключения любых библиотек, поставляемых в составе Arduino IDE, можно с помощью пунктов меню Sketch—>Import Library… (Скетч—>Подключить библиотеку).
В состав Arduino IDE входит большая коллекция официальных библиотек, в том числе:
• EEPROM — для сохранения данных в электрически стираемую программируемую постоянную память (ЭСППЗУ) (Electrically Erasable Programmable Read-Only Memory);
• Ethernet — для реализации сетевых взаимодействий;
• Firmata — стандартная библиотека для реализации взаимодействий через последовательный порт;
• LiquidCrystal — для работы с алфавитно-цифровыми жидкокристаллическими дисплеями;
• SD — для чтения и записи данных на карты флеш-памяти;
• Servo — для управления сервоприводами;
• SPI — для реализации взаимодействий по шине последовательного периферийного интерфейса;
• Software Serial — для реализации взаимодействий по последовательным линиям с использованием любых цифровых выходов;
• Stepper — для управления шаговыми электромоторами;
• WiFi — для доступа к беспроводной сети WiFi;
• Wire — для реализации взаимодействий с периферией по протоколу I2C.
Некоторые библиотеки предназначены для конкретных моделей плат Arduino:
• Keyboard — позволяет платам Arduino имитировать USB-клавиатуру (Leonardo, Due и Micro);
• Mouse — позволяет платам Arduino имитировать USB-мышь (Leonardo, Due и Micro);

