OneWire

Скачать: 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;
  }
}