получилось это
Код: Выделить всё
// термометр, датчик DS18B20
#include <MsTimer2.h>
#include <Led4Digits.h>
#include <OneWire.h>
#include <Wire.h> //Библиотека для работы с I2C
#include <Adafruit_BMP085.h> //Библиотека для датчика давления
Adafruit_BMP085 press_data; //переменная для работы с датчиком
byte mA = 3;
int tmp;
float Pmm; //для хранения показаний давления
float Tc; //для хранения температуры
#define POWER_MODE 0 // режим питания, 0 - внешнее, 1 - паразитное
#define MEASURE_PERIOD 500 // время измерения, * 2 мс
// тип индикатора 1; выводы разрядов 5,4,3,2; выводы сегментов 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,16,2, 6,7,8,9,10,11,12,13);
OneWire sensDs (15); // датчик подключен к выводу 14
int timeCount; // счетчик времени измерения
boolean flagSensReady; // признак готовности данных с датчика
byte bufData[9]; // буфер данных
float temperature; // измеренная температура
void setup() {
press_data.begin(); //подключаемся к датчику
press_data.begin();
pinMode(mA, OUTPUT);
M// термометр, датчик DS18B20
#include <MsTimer2.h>
#include <Led4Digits.h>
#include <OneWire.h>
#include <Wire.h> //Библиотека для работы с I2C
#include <Adafruit_BMP085.h> //Библиотека для датчика давления
Adafruit_BMP085 press_data; //переменная для работы с датчиком
byte mA = 3;
int tmp;
float Pmm; //для хранения показаний давления
float Tc; //для хранения температуры
#define POWER_MODE 0 // режим питания, 0 - внешнее, 1 - паразитное
#define MEASURE_PERIOD 500 // время измерения, * 2 мс
// тип индикатора 1; выводы разрядов 5,4,3,2; выводы сегментов 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,16,2, 6,7,8,9,10,11,12,13);
OneWire sensDs (15); // датчик подключен к выводу 14
int timeCount; // счетчик времени измерения
boolean flagSensReady; // признак готовности данных с датчика
byte bufData[9]; // буфер данных
float temperature; // измеренная температура
void setup() {
press_data.begin(); //подключаемся к датчику
press_data.begin();
pinMode(mA, OUTPUT);
MsTimer2::set(5, timerInterrupt); // задаем период прерывания по таймеру 2 мс
MsTimer2::start(); // разрешаем прерывание по таймеру
Serial.begin(9600); // инициализируем порт, скорость 9600
}
void loop() {
{
Tc=press_data.readTemperature(); //читаем температуру
Pmm=press_data.readPressure()/133.322; //читаем и пересчитываем давление
//выводим в порт
Serial.print("C= ");
Serial.print(Tc);
Serial.print(" P= ");
Serial.println(Pmm);
delay(1000); //ждем 1 секунду
Pmm=map(Pmm, 700, 800, 0, 255);
analogWrite(mA, Pmm);
}
if ( flagSensReady == true ) {
flagSensReady= false;
// данные готовы
if ( OneWire::crc8(bufData, 8) == bufData[8] ) { // проверка CRC
// данные правильные
temperature= (float)((int)bufData[0] | (((int)bufData[1]) << 8)) * 0.0625 + 0.03125;
// вывод измеренной температуры на индикаторы
if (temperature >= 0) {
// температура положительная
disp.print((int)(temperature * 10.), 4, 1);
}
else {
// температура отрицательная
disp.print((int)(temperature * -1 * 10.), 3, 1);
disp.digit[3]= 0x40; // отображается минус
}
disp.digit[1] |= 0x80; // зажечь точку второго разряда
// передача температуры на компьютер
Serial.println(temperature);
}
else {
// ошибка CRC, отображается ----
disp.digit[0]= 0x40;
disp.digit[1]= 0x40;
disp.digit[2]= 0x40;
disp.digit[3]= 0x40;
}
}
}
//-------------------------------------- обработчик прерывания 2 мс
void timerInterrupt() {
disp.regen(); // регенерация индикатора
// управление датчиком DS18B20 паралллельным процессом
timeCount++; if ( timeCount >= MEASURE_PERIOD ) { timeCount=0; flagSensReady=true; }
if (timeCount == 0) sensDs.reset(); // сброс шины
if (timeCount == 1) sensDs.write(0xCC, POWER_MODE); // пропуск ROM
if (timeCount == 2) sensDs.write(0x44, POWER_MODE); // инициализация измерения
if (timeCount == 480) sensDs.reset(); // сброс шины
if (timeCount == 481) sensDs.write(0xCC, POWER_MODE); // пропуск ROM
if (timeCount == 482) sensDs.write(0xBE, POWER_MODE); // команда чтения памяти датчика
if (timeCount == 483 ) bufData[0]= sensDs.read(); // чтение памяти датчика
if (timeCount == 484 ) bufData[1]= sensDs.read(); // чтение памяти датчика
if (timeCount == 485 ) bufData[2]= sensDs.read(); // чтение памяти датчика
if (timeCount == 486 ) bufData[3]= sensDs.read(); // чтение памяти датчика
if (timeCount == 487 ) bufData[4]= sensDs.read(); // чтение памяти датчика
if (timeCount == 488 ) bufData[5]= sensDs.read(); // чтение памяти датчика
if (timeCount == 489 ) bufData[6]= sensDs.read(); // чтение памяти датчика
if (timeCount == 490 ) bufData[7]= sensDs.read(); // чтение памяти датчика
if (timeCount == 491 ) bufData[8]= sensDs.read(); // чтение памяти датчика
}
работает только градусник. Убираю прерывание
MsTimer2::set(5, timerInterrupt); // задаем период прерывания по таймеру 2 мс
MsTimer2::start(); // разрешаем прерывание по таймеру
работает только барометр.
пробовал вывести температуру сразу с датчика давления не получилось. это второй мой проект. Помогите кто может
Спасибо