Файл: С чего начинаются роботы. О проекте Arduino для школьников (В.Н. Гололобов, 2011).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.06.2025

Просмотров: 1232

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Приложение А. О языке программирования Arduino

analogRead (pin)

Считывает значение из заданного аналогового входа (pin) с 10-битовым разрешением. Эта функция работает только на аналоговых портах (0-5). Результирующее целое значение находится в диапазоне от 0 до 1023.

value = analogRead (pin); // задаѐм значение 'value' равным 'pin'

Примечание: Аналоговые выводы не похожи на цифровые, и нет необходимости предварительно объявлять их как INPUT или OUTPUT (если только вы не планируете использовать их в качестве цифровых портов 14-18).

аналоговый ввод-вывод | 143

Приложение А. О языке программирования Arduino

analogWtite (pin, value)

Записывает псевдо-аналоговое значение, используя схему с широтно-импульсной модуляцией (PWM), на выходной вывод, помеченный как PWM. На новом модуле

Arduino с ATmega168 (328), эта функция работает на выводах 3, 5, 6, 9, 10 и 11.

Старый модуль Arduino c ATmega8 поддерживает только выводы 9, 10 и 11. Значение может быть задано как переменная или константа в диапазоне 0-255.

analogWrite (pin, value); // записываем ‘value’ в аналоговый ‘pin’

Значение 0 генерирует устойчивое напряжение 0 вольт на выходе заданного вывода; значение 255 генерирует 5 вольт на выходе заданного вывода. Для значений между 0 и 255 вывод быстро переходит от 0 к 5 вольтам — чем больше значение, тем чаще вывод в состоянии HIGH (5 вольт). Например, при значении 64 вывод будет в 0 три четверти времени, а в состоянии 5 вольт одну четверть; при значении 128 половину времени будет вывод будет в 0, а половину в 5 вольт; при значении 192 четверть времени вывод будет в 0 и три четверти в 5 вольт.

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

Примечание: Аналоговые выводы, не такие как цифровые, и не требуют предварительной декларации их как INPUT или OUTPUT.

Следующий пример читает аналоговое значение с входного аналогового вывода, конвертирует значение делением на 4 и выводит PWM сигнал на PWM вывод:

int led = 10;

// LED с резистором на выводе 10

int pin = 0;

// потенциометр на аналоговом выводе 0

int value;

// переменная для чтения

void setup() {}

// setap не нужен

void loop()

{

value = analogRead (pin);

// задаѐт ‘value’ равной ‘pin’

value /= 4;

// конвертируем 0 – 1023 в 0 – 255

analogWrite (led, value);

// выводим PWM сигнал на LED

}

аналоговый ввод-вывод | 144


Приложение А. О языке программирования Arduino

время и математика

delay (ms)

Приостанавливает вашу программу на заданное время (в миллисекундах), где 1000 равно 1 секунде.

delay (1000); // ждѐм одну секунду

millis()

Возвращает число миллисекунд, как unsigned long, с момента старта программы в модуле Arduino.

value = millis(); // задаѐт ‘value’ равной millis()

Примечание: Это число будет переполняться (сбрасываться в ноль), после, примерно, 9 часов.

min (x, y)

Вычисляется минимум двух чисел любого типа данных и возвращает меньшее число.

value = min (value, 100); // устанавливает 'value' в наименьшее из

//‘value’ и 100, обеспечивая, что

//оно никогда не превысит 100

max (x, y)

Вычисляется максимум двух чисел любого типа данных и возвращает большее число.

value = max (value, 100); // устанавливает 'value' в наибольшее из

//‘value’ и 100, обеспечивая, что

//оно никогда не меньше 100

время и математика | 145

Приложение А. О языке программирования Arduino

случайные числа

randomSeed (seed)

Устанавливает значение, или начальное число, в качестве начальной точки функции random().

randomSeed (value); // задаѐт ‘value’ как начальное значение random

Поскольку Arduino не может создавать действительно случайных чисел, randomSeed позволяет вам поместить переменную, константу или другую функцию в функцию random, что помогает генерировать более случайные «random» числа. Есть множество разных начальных чисел, или функций, которые могут быть использованы в этой функции, включая millis(), или даже analogRead() для чтения электрических шумов через аналоговый вывод.

random (max) random (min, max)

Функция random позволяет вам вернуть псевдослучайное число в диапазоне, заданном значениями min и max.

value = random (100, 200); // задаѐт 'value' случайным

// числом между 100 и 200

Примечание: Используйте это после использования функции randomSeed().

Следующий пример создаѐт случайное число между 0 и 255 и выводит PWM сигнал на PWM вывод, равный случайному значению:

int randNumber; // переменная для хранения случайного значения int led = 10; // LED с резистором на выводе 10

void setup() {} // setup не нужен

void loop ()

{

randomSeed (millis());

// задаѐт millis() начальным числом

randNumber = random (255);

// случайное число из 0 – 255

analogWrite (led, randNumber);

// вывод PWM сигнала

delay (500);

// пауза в полсекунды

}

случайные числа | 146


Приложение А. О языке программирования Arduino

последовательный обмен

Serial.begin (rate)

Открывает последовательный порт и задаѐт скорость для последовательной передачи данных. Типичная скорость обмена для компьютерной коммуникации — 9600, хотя поддерживаются и другие скорости.

void setup ()

{

Serial.begin (9600); // открывает последовательный порт // задаѐт скорость обмена 9600

}

Примечание: При использовании последовательного обмена, выводы 0 (RX) и 1 (TX) не могут использоваться одновременно как цифровые.

Serial.println (data)

Передаѐт данные в последовательный порт, сопровождая автоматическим возвратом каретки и переходом на новую строку. Команда такая же, что и Serial.print(), но легче для последующего чтения на данных в терминале.

Serial.println (analogValue);

// отправляет значение

// ‘analogValue’

Примечание: За дальнейшей информацией о различных изменениях

Serial.println() и Serial.print() обратитесь на сайт Arduino.

Следующий простой пример читает аналоговый вывод 0 и отсылает эти данные на компьютер каждую секунду.

void setup ()

{

Serial.begin (9600);

// задаѐм скорость 9600 bps

}

void loop ()

{

Serial.println (analogRead(0);

// шлѐм аналоговое значение

delay (1000);

// пауза 1 секунда

}

последовательный обмен | 147

Приложение А. О языке программирования Arduino

приложение

приложение | 148

Приложение А. О языке программирования Arduino

цифровой выход

Это базовая программа «hello world», используемая для включения и выключения чего-нибудь. В этом примере светодиод подключѐн к выводу 13 и мигает каждую секунду. Резистор в данном случае может быть опущен, поскольку на 13-м порту Arduino уже есть встроенный резистор.

int ledPin = 13;

// LED на цифровом выводе 13

void setup ()

// запускается один раз

{

pinMode (ledPin, OUTPUT);

// устанавливаем вывод 13 на выход

}

void loop ()

// запускается вновь и вновь

{

digitalWrite (ledPin, HIGH);

// включаем LED

delay (1000);

// пауза 1 секунда

digitalWrite (ledPin, LOW);

// выключаем LED

delay (1000);

// пауза 1 секунда

}

приложение | 149


Приложение А. О языке программирования Arduino

цифровой ввод

Это простейшая форма ввода с двумя возможными состояниями: включено или выключено. В примере считывается простой переключатель или кнопка, подключѐнная к выводу 2. Когда выключатель замкнут, входной вывод читается как HIGH и включает светодиод.

int ledPin = 13;

// выходной вывод для LED

int inPin = 2;

// входной вывод (для выключателя)

void setup ()

{

pinMode (ledPin, OUTPUT);

// объявляем LED как выход

pinMode (inPin, INPUT);

// объявляем выключатель как вход

}

void loop ()

{

if (digitalRead (inPin) == HIGH)

// проверяем, вход HIGH?

{

digitalWrite (ledPin, HIGH);

// включаем LED

delay (1000);

// пауза 1 секунда

digitalWrite (ledPin, LOW);

// выключаем LED

delay (1000);

// пауза 1 секунда

}

}

приложение | 150

Приложение А. О языке программирования Arduino

сильноточный выход

Иногда возникает необходимость в управлении более, чем 40 мА от Arduino. В этом случае может использоваться транзистор MOSFET для коммутации сильноточной нагрузки. В следующем примере MOSFET быстро включается и выключается 5 раз в секунду.

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

int outPin = 5; // выходной вывод для MOSFET

void setup ()

{

pinMode (outPin, OUTPUT);

// задаѐм вывод 5 как выход

}

void loop ()

{

for (int i=0; i<5; i++) // цикл 5 раз

{

digitalWrite (outPin, HIGH);

// включаем MOSFET

delay (250);

// пауза в ¼ секунды

digitalWrite (outPin, LOW);

// выключаем MOSFET

delay (250);

// пауза в ¼ секунды

}

delay (1000);

// пауза 1 секунда

}

приложение | 151


Приложение А. О языке программирования Arduino

pwm выход

Широтно-импульсная модуляция (PWM) — это способ имитировать аналоговый выход с помощью импульсного сигнала. Это можно использовать для гашения и увеличения яркости светодиода или позже для управления сервомотором. Следующий пример медленно увеличивает яркость и гасит LED, используя цикл for.

int ledPin = 9;

// PWM вывод для LED

void setup () {}

// setup не нужен

void loop ()

{

for (int i=0; i<=255; i++)

// растущее значение для i

{

analogWrite (ledPin, i); // устанавливаем уровень яркости для i

delay (100);

// пауза 100 миллисекунд

}

for (int i=255; i>=0; i--)

// уменьшающееся значение для i

{

analogWrite (ledPin, i); // устанавливаем уровень яркости для i

delay (100);

// пауза 100 миллисекунд

}

}

приложение | 152

Приложение А. О языке программирования Arduino

вход с потенциометра

Использование потенциометра и одного из аналоговых портов Arduino (аналогоцифрового преобразователя (ADC)) позволяет читать аналоговые значения в диапазоне 0-1023. Следующий пример показывает использование потенциометра для управления временем мигания светодиода LED.

int potPin = 0;

// входной вывод для потенциометра

int ledPin = 13;

// выходной вывод для LED

void setup ()

{

pinMode (ledPin, OUTPUT);

// объявляем ‘ledPin’ как OUTPUT

}

void loop ()

{

digitalWrite (ledPin, HIGH);

// включаем 'ledPin’

delay (analogRead(potPin));

// пауза

digitalWrite (ledPin, LOW);

// выключаем ‘ledPin’

delay (analogRead (potPin));

// пауза

}

приложение | 153