Скачать: https://github.com/PaulStoffregen/OneWire
Библиотека OneWire служит помощником получени информации с датчиков, например, для работы с датчиком температуры DS18B20, в котором предусмотрен обмен данными по одной шине и где можно подключить сразу несколько датчиков на одну шину.
Основные команды библиотеки OneWire:
search(addressArray) - ищет температурный датчик, при нахождении в массив addressArray записывается его код, в ином случае - false.
reset_search() - производится поиск на первом приборе.
reset() - выполнение сброса шины перед тем, как связаться с устройством.
select(addressArray) - выбирается устройство после операции сброса, записывается его ROM код.
write(byte) - производится запись байта информации на устройство.
write(byte, 1) - аналогично write(byte), но в режиме паразитного питания.
read() - чтение байта информации с устройства.
crc8(dataArray, length) - вычисление CRC кода, dataArray - выбранный массив, length - длина кода.
Пример для работы с датчиком температуры:
#include "OneWire.h" OneWire ds(9); // Объект OneWire int temperature = 0; // Глобальная переменная для хранения значение температуры с датчика DS18B20 long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика const int TEMP_UPDATE_TIME = 1000; // Определяем периодичность проверок void setup() { Serial.begin(9600); } void loop() { detectTemperature(); // Определяем температуру от датчика DS18b20 Serial.println(temperature); // Выводим полученное значение температуры // Т.к. переменная temperature имеет тип int, дробная часть будет просто отбрасываться } int detectTemperature() { byte data[2]; ds.reset(); ds.write(0xCC); ds.write(0x44); if (millis() - lastUpdateTime > TEMP_UPDATE_TIME) { lastUpdateTime = millis(); ds.reset(); ds.write(0xCC); ds.write(0xBE); data[0] = ds.read(); data[1] = ds.read(); // Формируем значение temperature = (data[1] << 8) + data[0]; temperature = temperature >> 4; } }