Примеры Arduino Esplora

Серия примеров для начала работы с платой Arduino Esplora.

Использование входных датчиков и выходных устройств, встроенных в плату Esplora, немного отличается от использования стандартных входов и выходов на других платах Arduino. В результате примеры скетчей, включённые в Arduino IDE, требуют небольшой модификации для использования с Esplora. Это руководство объясняет, как это сделать.

Подключение библиотеки Esplora

Вам нужно подключить библиотеку Esplora к любому скетчу, который вы хотите использовать на Esplora. Для этого выберите Import Library… -> Esplora из меню Sketch, и IDE автоматически добавит следующую строку в начало вашего скетча:

#include <Esplora.h>

Изменения цифровых входов и выходов

Другие платы Arduino имеют два типа входов: цифровые входы, которые имеют только два состояния – HIGH или LOW, и аналоговые входы, которые имеют изменяющийся диапазон состояний, обычно от 0 до 1023. Кнопки на Esplora являются цифровыми входами, а другие датчики – аналоговыми входами. Чтобы адаптировать обычные примеры для Esplora, вы можете заменить цифровые входы на входы кнопок, а аналоговые входы – на любые другие датчики.

Цифровые входы на других платах Arduino также могут использоваться как выходы, поэтому их нужно объявлять как вход или выход с помощью команды pinMode(). Поскольку все входы и выходы Esplora предназначены для одной функции, команды pinMode() не нужны.

Всякий раз, когда вы видите команду digitalRead() в примере Arduino, замените её на команду Esplora.readButton(). Выберите любую кнопку, которую хотите читать. Ниже вы можете увидеть оригинальный пример DigitalReadSerial (находится в File -> Examples -> 01.Basics -> DigitalReadSerial) и изменённую версию, работающую на Esplora с использованием кнопки Switch 1:

Оригинальный пример:

// к цифровому пину 2 подключена кнопка. Дадим ей имя:
int pushButton = 2;                        // эта строка не нужна для Esplora

// процедура setup выполняется один раз при нажатии reset:
void setup() {
  // инициализация последовательной связи на скорости 9600 бит/с:
  Serial.begin(9600);
  // настройка пина кнопки как входа:
  pinMode(pushButton, INPUT);       // эта строка не нужна для Esplora
}

// процедура loop выполняется снова и снова бесконечно:
void loop() {
  // чтение входного пина:
  int buttonState = digitalRead(pushButton); // эту строку нужно изменить
  // вывод состояния кнопки:
  Serial.println(buttonState);
  delay(1);        // задержка между чтениями для стабильности
}

Изменённый пример для Esplora:

#include <Esplora.h>     // нужно подключить библиотеку Esplora
// процедура setup выполняется один раз при нажатии reset:
void setup() {
  // инициализация последовательной связи на скорости 9600 бит/с:
  Serial.begin(9600);
}

// процедура loop выполняется снова и снова бесконечно:
void loop() {
  // чтение входного пина:
  int buttonState = Esplora.readButton(SWITCH_2);  // Esplora.readButton заменяет digitalRead()
  // вывод состояния кнопки:
  Serial.println(buttonState);
  delay(1);        // задержка между чтениями для стабильности
}

Большинство примеров Arduino digitalRead() написаны с предположением, что подключённая кнопка или переключатель будут в состоянии HIGH при нажатии и LOW, когда не нажаты. Кнопки Esplora работают наоборот: LOW при нажатии и HIGH, когда не нажаты. Поэтому, если вы хотите определить нажатие кнопок Esplora, проверяйте LOW вместо HIGH. Если хотите определить, что они не нажаты, проверяйте HIGH вместо LOW.

Для большинства примеров Arduino светодиоды используются как цифровые выходы, то есть вы можете только включить или выключить их (HIGH или LOW). RGB-светодиод на Esplora, однако, используется как аналоговый выход, то есть вы можете установить его яркость от 0 до 255. Чтобы он работал как цифровой выход, установите уровень 255 для HIGH и 0 для LOW.

Ниже вы увидите пример Button (находится в File -> 02.Digital -> Button) в оригинальной и изменённой формах:

Оригинальный пример: Выделенные строки будут изменены. Константы пинов и команды pinMode() будут убраны, так как они не нужны.

// константы не изменяются. Они используются здесь для
// задания номеров пинов:
const int buttonPin = 2;     // номер пина кнопки
const int ledPin =  13;      // номер пина светодиода

// переменные будут изменяться:
int buttonState = 0;         // переменная для чтения состояния кнопки

void setup() {
  // инициализация пина светодиода как выхода:
  pinMode(ledPin, OUTPUT);
  // инициализация пина кнопки как входа:
  pinMode(buttonPin, INPUT);
}

void loop(){
  // чтение значения кнопки:
  buttonState = digitalRead(buttonPin);

  // проверка, нажата ли кнопка.
  // если да, buttonState равен HIGH:
  if (buttonState == HIGH) {
    // включить светодиод:
    digitalWrite(ledPin, HIGH);
  }
  else {
    // выключить светодиод:
    digitalWrite(ledPin, LOW);
  }
}

Изменённый пример для Esplora:

#include <Esplora.h>   // нужно подключить библиотеку Esplora

int buttonState = 0;   // переменная для чтения состояния кнопки

void setup() {
 // нечего настраивать
}

void loop(){
  // чтение значения кнопки:
  // Esplora.readButton заменяет digitalRead()
  buttonState = Esplora.readButton(SWITCH_1);

  // проверка, нажата ли кнопка.
  // если да, buttonState равен LOW:
  if (buttonState == LOW) {     // Кнопка нажата при LOW, а не HIGH
    // включить светодиод:
    Esplora.writeRed(255);  // Esplora.writeRed() заменяет digitalWrite()
  }
  else {
    // выключить светодиод:
    Esplora.writeRed(0);  // Esplora.writeRed() заменяет digitalWrite()
  }
}

Вам не обязательно использовать только красный канал светодиода; вы можете использовать любой из каналов RGB в качестве цифрового выхода таким образом. Аналогично, вы можете использовать любую из кнопок для замены цифровых входов.

Изменения аналоговых входов и выходов

Изменения аналоговых примеров аналогичны цифровым. Однако здесь нет команд pinMode(), которые нужно убирать, поскольку аналоговые входы на других платах Arduino по умолчанию являются входами.

Вот ещё один пример, на этот раз с заменой аналогового входа одним из аналоговых входов Esplora. Пример ReadAnalogVoltage (находится в File -> 01.Basics -> ReadAnalogVoltage) считывает аналоговый вход и сообщает напряжение на пине. Ниже вы замените команду analogRead() на чтение с датчика освещённости:

Оригинальный пример:

// процедура setup выполняется один раз при нажатии reset:
void setup() {
  // инициализация последовательной связи на скорости 9600 бит/с:
  Serial.begin(9600);
}

// процедура loop выполняется снова и снова бесконечно:
void loop() {
  // чтение входа на аналоговом пине 0:
  int sensorValue = analogRead(A0);    // Эту строку нужно изменить
  // преобразование аналогового показания (от 0 до 1023) в напряжение (0 - 5В):
  float voltage = sensorValue * (5.0 / 1023.0);
  // вывод прочитанного значения:
  Serial.println(voltage);
}

Изменённый пример для Esplora:

#include <Esplora.h>     // нужно подключить библиотеку Esplora
// процедура setup выполняется один раз при нажатии reset:
void setup() {
  // инициализация последовательной связи на скорости 9600 бит/с:
  Serial.begin(9600);
}

// процедура loop выполняется снова и снова бесконечно:
void loop() {
  // чтение входа на аналоговом пине 0:
  int sensorValue = Esplora.readLightSensor();  //Esplora.readLightSensor() заменяет analogRead()
  // преобразование аналогового показания (от 0 до 1023) в напряжение (0 - 5В):
  float voltage = sensorValue * (5.0 / 1023.0);
  // вывод прочитанного значения:
  Serial.println(voltage);
}

Большинство аналоговых датчиков Esplora можно подставить вместо команд analogRead() напрямую, потому что они просто являются аналоговыми датчиками. Джойстик состоит из двух потенциометров, поэтому каждую из его осей можно рассматривать как отдельный analogRead(). Аналогично, акселерометр можно рассматривать как три канала analogRead(), по одному на каждую ось.

Датчик температуры на Esplora отличается от других аналоговых датчиков. Команда Esplora.readTemperature() не просто выдаёт аналоговое показание, как другие команды датчиков. Вместо этого она преобразует показания датчика в градусы Цельсия или Фаренгейта. Поэтому вы не можете просто подставить датчик температуры вместо команды analogRead().

Команда analogWrite() на других платах Arduino работает только на определённых пинах. Её диапазон от 0 до 255, как и у команд Esplora.writeRed(), Esplora.writeGreen() и Esplora.writeBlue(), поэтому вы можете заменить команды analogWrite() любой из этих трёх команд и увидеть рабочий результат. Обратите внимание, что analogWrite() принимает два параметра – номер пина и уровень яркости, тогда как Esplora.writeRed() и аналогичные команды принимают только один параметр – яркость. Ниже вы можете увидеть пример Fade (находится в File -> Examples -> 01.Basics -> Fade) в оригинальной и изменённой формах:

Оригинальный пример: Команда pinMode() будет убрана, так как она не нужна.

int led = 9;           // пин, к которому подключён светодиод
int brightness = 0;    // яркость светодиода
int fadeAmount = 5;    // на сколько пунктов изменять яркость

// процедура setup выполняется один раз при нажатии reset:
void setup()  {
  // объявление пина 9 как выхода:
  pinMode(led, OUTPUT);
}

// процедура loop выполняется снова и снова бесконечно:
void loop()  {
  // установка яркости пина 9:
  analogWrite(led, brightness);

  // изменение яркости для следующего прохода цикла:
  brightness = brightness + fadeAmount;

  // обратное направление затухания на краях:
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }
  // ожидание 30 миллисекунд для наблюдения эффекта затухания
  delay(30);
}

Изменённый пример для Esplora:

#include <Esplora.h>   // нужно подключить библиотеку Esplora

int brightness = 0;    // яркость светодиода
int fadeAmount = 5;    // на сколько пунктов изменять яркость

// процедура setup выполняется один раз при нажатии reset:
void setup()  {
 // нечего настраивать
}

// процедура loop выполняется снова и снова бесконечно:
void loop()  {
  // установка яркости синего канала:
  Esplora.writeBlue(brightness);    // Esplora.writeBlue() заменяет analogWrite()

  // изменение яркости для следующего прохода цикла:
  brightness = brightness + fadeAmount;

  // обратное направление затухания на краях:
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }
  // ожидание 30 миллисекунд для наблюдения эффекта затухания
  delay(30);
}

Связь с компьютером через USB

Последовательная связь через USB с использованием команд Serial.read(), Serial.write(), Serial.print и Serial.println() должна работать на Esplora так же, как и на других платах. Однако последовательный вывод Esplora работает немного быстрее, чем у Uno, поэтому вы можете добавить небольшую задержку в скетчи, которые только считывают датчик и выводят результат по последовательному порту, чтобы не заполнить буфер последовательного входа вашего компьютера. Когда буфер заполнится, монитор порта будет работать значительно медленнее, и вы заметите задержку при переключении окон с него на основное окно IDE. Задержка даже в 1 миллисекунду будет достаточной.

Вы также можете использовать библиотеки USB Mouse и Keyboard на Esplora. Примеры, найденные в File -> Examples -> 09.USB, будут работать только с модификациями для цифрового и аналогового ввода-вывода, как описано выше. Есть также пример для Esplora – EsploraJoystickMouse, который позволяет использовать джойстик в качестве контроллера мыши.

Связь с другими устройствами

Другие платы Arduino предлагают две дополнительные формы последовательной связи: SPI (с использованием библиотеки SPI) и I2C (с использованием библиотеки Wire). Esplora может обмениваться данными через SPI, используя разъём ICSP, который также используется для опциональной внутрисхемной последовательной прошивки платы. Выводы разъёма ICSP расположены следующим образом. Пин 1 – это пин, ближайший к белой точке на плате Esplora. Это нижний правый пин, если вы держите Esplora USB-разъёмом вверх:

Распиновка ICSP

Для подключения SPI-устройства к Esplora вам потребуется изготовить собственный кабель-переходник для этого разъёма.

Esplora не предоставляет выводов для связи по I2C, поэтому вы не сможете использовать примеры с библиотекой Wire на Esplora.

В целом, если вам нужна связь по SPI или I2C, лучше использовать другую модель Arduino.

После Esplora

Освоив Esplora, если вы ищете другие платы Arduino, следующим лучшим шагом будет Arduino Uno, который является основой линейки Arduino. Он позволяет подключать собственные схемы датчиков и приводов или дополнительные шилды для расширения функциональности. Вы также можете рассмотреть Arduino Leonardo. Он построен на том же процессоре, что и Esplora, и также может выступать в качестве USB-клавиатуры или мыши. Он предлагает всю функциональность обычных плат Arduino.