Чтение онлайн

на главную - закладки

Жанры

Программируем Arduino. Основы работы со скетчами
Шрифт:

Использование DS18B20

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

Рис. 8.3. Схема подключения DS18B20 к Arduino

Для датчика температуры компании Dallas Semiconductor имеется собственная

библиотека, упрощающая операцию запроса температуры и декодирования результата. Библиотека DallasTemperature доступна для загрузки по адресу https://github.com/milesburton/Arduino-Temperature-Control-Library.

// sketch_08_02_OneWire_DS18B20

#include <OneWire.h>

#include <DallasTemperature.h>

const int busPin = 10;

OneWire bus(busPin);

DallasTemperature sensors(&bus);

DeviceAddress sensor;

void setup

{

Serial.begin(9600);

sensors.begin;

if (!sensors.getAddress(sensor, 0))

{

Serial.println("NO DS18B20 FOUND!");

}

}

void loop

{

sensors.requestTemperatures;

float tempC = sensors.getTempC(sensor);

Serial.println(tempC);

delay(1000);

}

Этот скетч выводит в окно монитора последовательного порта температуру в градусах Цельсия, прочитанную с единственного датчика температуры (рис. 8.4).

Рис. 8.4. Вывод температуры, прочитанной с датчика DS18B20

В этом примере используется только один датчик температуры, но его легко можно распространить на случай с несколькими датчиками. Библиотека DallasTemperature сама определяет адреса устройств с помощью OneWire в функции getAddress, вторым параметром которой передается номер позиции датчика. Чтобы добавить второй датчик, нужно определить новую переменную для хранения его адреса и затем определить адрес вызовом getAddress. Пример с использованием двух датчиков можно загрузить с сайта книги, где он хранится под именем sketch_08_03_OneWire_DS18B20_2.

В заключение

В этой главе вы познакомились с шиной 1-Wire и узнали, как использовать ее для подключения популярного температурного датчика DS18B20.

В следующей главе мы исследуем еще одну разновидность последовательного интерфейса с названием SPI.

9. Взаимодействие с устройствами SPI

Последовательный периферийный интерфейс (Serial Peripheral Interface, SPI) — еще одна последовательная шина для подключения периферийных устройств к плате Arduino. Это быстрая шина, но для передачи данных в ней используются четыре линии против двух, используемых интерфейсом I2C. В действительности SPI не является истинной шиной, так как четвертая линия в нем называется «выбор ведомого» (Slave Select, SS). Каждое периферийное устройство на шине должно быть соединено своей линией SS с отдельным контактом на плате Arduino. Такая схема подключения эффективно выбирает нужное периферийное устройство на шине, отключая все остальные.

Интерфейс SPI поддерживается широким спектром устройств, включая многие типы тех же устройств, что поддерживают I2C. Нередко периферийные устройства поддерживают оба интерфейса, I2C и SPI.

Операции с битами

Взаимодействие

по интерфейсу SPI часто связано с выполнением большого объема операций с отдельными битами. Первый пример, демонстрирующий использование АЦП на основе микросхемы MCP3008, в частности, требует хорошего понимания битовых операций и того, как маскировать ненужные биты, чтобы получить целое значение при чтении аналогового сигнала. По этой причине, прежде чем погружаться в особенности работы SPI, я хочу подробно поговорить об операциях с битами.

Двоичное и шестнадцатеричное представление

Впервые с битами мы встретились в главе 4 (см. рис. 4.2). Оперируя битами в байте или в слове (два байта), можно использовать их десятичные значения, но выполнять мысленно преобразования между двоичным и десятичным представлениями очень неудобно. Поэтому в скетчах для Arduino значения часто выражаются в виде двоичных констант, для чего поддерживается специальный синтаксис:

byte x = 0b00000011; // 3

unsigned int y = 0b0000000000000011; // 3

В первой строке определяется байт с десятичным значением 3 (2 + 1). Ведущие нули при желании можно опустить, но они служат отличным напоминанием о том, что определяется 8-битное значение.

Во второй строке определяется значение типа int, состоящее из 16 бит. Квалификатор unsigned перед именем типа int указывает, что определяемая переменная может хранить только положительные числа. Этот квалификатор имеет значение лишь для операций с переменной, таких как +, –, * и др., которые не должны применяться, если переменная предназначена для манипуляций с битами. Но добавление слова unsigned в определения таких переменных считается хорошей практикой.

Когда дело доходит до 16-битных значений, двоичное представление становится слишком громоздким. По этой причине многие предпочитают использовать шестнадцатеричную форму записи.

Шестнадцатеричные числа — это числа в системе счисления с основанием 16, для обозначения цифр в этой системе используются не только десятичные цифры от 0 до 9, но и буквы от A до F, представляющие десятичные значения от 10 до 15. В этом представлении каждые четыре бита числа можно представить единственной шестнадцатеричной цифрой. В табл. 9.1 перечислены десятичные значения от 0 до 15 и показаны их двоичные и шестнадцатеричные представления.

Таблица 9.1. Двоичные и шестнадцатеричные числа

Десятичное значение

Двоичное значение

Шестнадцатеричное значение

0

0000

0

1

0001

1

2

0010

2

3

0011

3

4

0100

4

5

0101

5

6

0110

6

7

0111

7

8

1000

8

9

1001

9

10

1010

A

11

1011

B

12

1100

C

13

1101

D

14

1110

E

15

1111

F

Шестнадцатеричные константы, как и двоичные, имеют специальную форму записи:

int x = 0x0003; // 3

int y = 0x010F; // 271 (256 + 15)

Эту форму записи используют не только в программном коде на C, но и в документации, чтобы показать, что число является шестнадцатеричным, а не десятичным.

Поделиться:
Популярные книги

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Все не случайно

Юнина Наталья
Любовные романы:
современные любовные романы
7.10
рейтинг книги
Все не случайно

Око василиска

Кас Маркус
2. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Око василиска

Неудержимый. Книга XIV

Боярский Андрей
14. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIV

Жребий некроманта 3

Решетов Евгений Валерьевич
3. Жребий некроманта
Фантастика:
боевая фантастика
5.56
рейтинг книги
Жребий некроманта 3

Делегат

Астахов Евгений Евгеньевич
6. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Делегат

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Real-Rpg. Еретик

Жгулёв Пётр Николаевич
2. Real-Rpg
Фантастика:
фэнтези
8.19
рейтинг книги
Real-Rpg. Еретик

Восход. Солнцев. Книга VI

Скабер Артемий
6. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга VI

Действуй, дядя Доктор!

Юнина Наталья
Любовные романы:
короткие любовные романы
6.83
рейтинг книги
Действуй, дядя Доктор!

Авиатор: назад в СССР 12

Дорин Михаил
12. Покоряя небо
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Авиатор: назад в СССР 12

Адепт. Том 1. Обучение

Бубела Олег Николаевич
6. Совсем не герой
Фантастика:
фэнтези
9.27
рейтинг книги
Адепт. Том 1. Обучение

Земная жена на экспорт

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Земная жена на экспорт

Варлорд

Астахов Евгений Евгеньевич
3. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Варлорд