Монк . - Программируем Arduino

Здесь есть возможность читать онлайн «Монк . - Программируем Arduino» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Год выпуска: 2017, ISBN: 2017, Издательство: Издательский дом Питер, Жанр: Базы данных, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Программируем Arduino: краткое содержание, описание и аннотация

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

Программируем Arduino — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Программируем Arduino», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

Оперативные переменные

Так как подпрограмма обработки прерываний не может иметь параметров и не может ничего возвращать, нужен какой-то способ передачи информации между ней и остальной программой. Обычно для этого ­используются глобальные переменные, как показано в следующем примере:

// sketch 03_02_interrupt_flash

int ledPin = 13;

volatile boolean flashFast = false;

void setup()

{

pinMode(ledPin, OUTPUT);

attachInterrupt(0, stuffHapenned, FALLING);

}

void loop()

{

int period = 1000;

if (flashFast) period = 100;

digitalWrite(ledPin, HIGH);

delay(period);

digitalWrite(ledPin, LOW);

delay(period);

}

void stuffHapenned()

{

flashFast = ! flashFast;

}

В этом скетче функция loop использует глобальную переменную flashFast, чтобы определить период задержки. Подпрограмма обработки изменяет значение этой переменной между true и false.

Обратите внимание на то, что в объявление переменной flashFast включено слово volatile. Вы можете успешно разрабатывать скетч и без специ­фикатора volatile, но он совершенно необходим, потому что в отсутствие этого спецификатора компилятор C может генерировать машинный код, кэширующий значение переменной в регистре для увеличения производительности. Если, как в данном случае, кэширующий код будет прерван, он может не заметить изменения значения переменной.

В заключение о подпрограммах обработки прерываний

Когда будете писать подпрограммы обработки прерываний, помните следующие правила.

• Подпрограммы должны действовать быстро.

• Для передачи данных между подпрограммой обработки прерываний и остальной программой должны использоваться переменные, объявленные со спецификатором volatile.

• Не используйте delay, но можете использовать delayMicroseconds.

• Не ожидайте высокой надежности взаимодействий через последовательные порты.

• Не ожидайте, что значение, возвращаемое функцией millis, изменится.

Разрешение и запрет прерываний

По умолчанию прерывания в скетчах разрешены и, как упоминалось ранее, автоматически запрещаются на время работы подпрограммы обработки прерываний. Однако есть возможность явно запрещать и разрешать прерывания в программном коде, вызывая функции noInterrupts и interrupts. Эти функции не имеют параметров, и первая из них запрещает прерывания, а вторая — разрешает.

Явное управление может понадобиться, чтобы исключить возможность прерывания фрагмента кода, например, выводящего последовательность данных или генерирующего последовательность импульсов и точно выдерживающего временные интервалы с помощью функции delayMicroseconds.

Прерывания от таймера

Вызов подпрограмм обработки прерываний можно организовать не только по внешним событиям, но и по внутренним событиям изменения времени. Такая возможность особенно полезна, когда требуется выполнять некоторые операции через определенные интервалы времени.

Библиотека TimerOne упрощает настройку прерываний от таймера. Ее можно найти и загрузить по адресу http://playground.arduino.cc/Code/Timer1.

Следующий пример показывает, как с помощью TimerOne сгенерировать последовательность импульсов прямоугольной формы с частотой 1 кГц. Если в вашем распоряжении имеется осциллограф или мультиметр с возможностью измерения частоты, подключите его к контакту 12, чтобы увидеть сигнал (рис. 3.2).

Рис 32Последовательность прямоугольных импульсов сгенерированная с помощью - фото 29

Рис. 3.2.Последовательность прямоугольных импульсов, сгенерированная с помощью таймера

// sketch_03_03_1kHz

#include

int outputPin = 12;

volatile int output = LOW;

void setup()

{

pinMode(12, OUTPUT);

Timer1.initialize(500);

Timer1.attachInterrupt(toggleOutput);

}

void loop()

{

}

void toggleOutput()

{

digitalWrite(outputPin, output);

output = ! output;

}

То же самое можно было бы реализовать с помощью delay, но применение прерываний от таймера позволяет организовать выполнение любых других операций внутри loop. Кроме того, использование функции delay не позволит добиться высокой точности, потому что время, необходимое на изменение уровня напряжения на контакте, не будет учитываться в величине задержки.

ПРИМЕЧАНИЕ

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

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Программируем Arduino»

Представляем Вашему вниманию похожие книги на «Программируем Arduino» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Программируем Arduino»

Обсуждение, отзывы о книге «Программируем Arduino» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x