Читаем Программируем Arduino. Профессиональная работа со скетчами полностью

Мы уже сталкивались с одной из разновидностей массивов в предыдущем разделе, где знакомились с монитором последовательного порта. Сообщения, такие как «Paperclip NOT connected» (скрепка не замыкает контакты), называют массивами символов, потому что фактически они являются коллекциями символов.

Например, научим Arduino посылать в монитор порта всякую чепуху.

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

// sketch 01_05_gibberish

char* messages[] = {

               "My name is Arduino",

               "Buy books by Simon Monk",

               "Make something cool with me",

               "Raspberry Pis are fruity"};

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);

  }

}

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных

Все жанры