Два датчика ds18b20 показывают -127
- Войдите на сайт для отправки комментариев
Пт, 26/03/2021 - 14:28
3драствуйте, есть скетч контроллер холодильника, Проблема в том что 2 датчика температур ds18b20 показывают -127, при том что в тестовой прошивке от библиотеки dallas-temperature все ок, работало и с адресами и с индексом. Прикрепляю прошивку
#include <OneWire.h>
#include <Wire.h>
#include <DallasTemperature.h>
#include <iarduino_RTC.h>
#include <LiquidCrystal_I2C.h>
#define ONE_WIRE_BUS 15
iarduino_RTC time(RTC_DS3231);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27,16,2);
uint8_t sensor1[8] = {0x28, 0xD0, 0x03, 0x07, 0xD6, 0x01, 0x3C, 0x03};
uint8_t sensor2[8] = {0x28, 0x90, 0xB4, 0x07, 0xD6, 0x01, 0x3C, 0x68};
unsigned long period_time = 2000;
unsigned long my_timer;
bool btnStateU;
bool btnStateD;
bool btnStateS;
byte num;
int Mor;
int Hol;
int menu = 1;
int temH;
int temM;
int setH = 5;
int setM = -5;
int arr;
int FirstStart = 0;
int pinReleH = 11;
int pinReleM = 12;
int pinReleVent = 3;
int pinReleK = 2;
int pinLed = 9;
int pinPiezo = 9;
int ButtU = 4;
int ButtD = 5;
int ButtS = 6;
bool flagU = false;
bool flagD = false;
bool flagS = false;
bool flagSuccH = 0;
bool flagSuccM = 0;
bool StateM = 0;
bool StateH = 0;
void setup() {
Serial.begin(9600);
pinMode(pinReleH, OUTPUT);
pinMode(pinReleM, OUTPUT);
pinMode(pinReleVent, OUTPUT);
pinMode(pinReleK, OUTPUT);
pinMode(pinLed, OUTPUT);
pinMode(ButtU, INPUT_PULLUP);
pinMode(ButtD, INPUT_PULLUP);
pinMode(ButtS, INPUT_PULLUP);
digitalWrite(pinReleH, HIGH);
digitalWrite(pinReleM, HIGH);
digitalWrite(pinReleVent, HIGH);
digitalWrite(pinReleK, HIGH);
time.begin();
time.settime(0, 30, 18, 12, 6, 20, 5); // 0 сек, 30 мин, 18 часов, 12, июня, 2020, четверг
sensors.begin();
lcd.init();
lcd.backlight();
}
void loop() {
sensors.requestTemperatures();
Serial.print("Sensor 1: ");
Serial.println(sensors.getTempC(sensor1));
temH = sensors.getTempC(sensor1);
Serial.print("Sensor 2: ");
Serial.println(sensors.getTempC(sensor2));
temM = sensors.getTempC(sensor2);
if (millis() - my_timer >= period_time) {
lcd.clear();
my_timer = millis();
}
btnStateU = !digitalRead(ButtU);
btnStateD = !digitalRead(ButtD);
btnStateS = !digitalRead(ButtS);
// Селект //
if (btnStateS && !flagS && menu == 1) {
flagS = true;
menu = 2;
}
if (!btnStateS && flagS) flagS = false;
if (btnStateS && !flagS && menu == 2) {
flagS = true; if (arr == 1) {
arr = 0;
menu = 1;
}
if (arr == 0) {
arr = 1;
}
}
if (!btnStateS && flagS) flagS = false;
// ПЕРШЕ ВКЛЮЧЕННЯ //
if (FirstStart == 0) {
if (temH != setH && flagSuccH == 0) {
Holod();
}
if (temM != setM && flagSuccM == 0 && flagSuccH == 1 ) {
Moroz();
}
if (flagSuccH == 1 && flagSuccM == 1) {
FirstStart = 1;
digitalWrite(pinReleK, HIGH);
flagSuccH = 0;
flagSuccM = 0;
}
}
if (FirstStart == 1) {
if (((temH > setH + 3 || temH < setH - 3) && StateM == 0) || Hol == 1) {
Hol = 1;
Holod();
if (flagSuccH == 1) {
digitalWrite(pinReleK, HIGH);
flagSuccH = 0;
Hol = 0;
}
}
if (((temM > setM + 3 || temM < setM - 3) && StateH == 0) || Mor == 1) {
Mor = 1;
Moroz();
if (flagSuccM == 1) {
digitalWrite(pinReleK, HIGH);
flagSuccM = 0;
Mor = 0;
}
}
}
/* if(temM == -127 || temH == -127){
menu =3;
} */
switch (menu) {
case 1: menu1();
break;
case 2: menu2();
break;
case 3: menu3();
break;
}
}
void menu1() {
if (millis() % 1000 == 0) {
lcd.setCursor(4,0);
lcd.print(time.gettime("H:i:s"));
}
lcd.setCursor(0, 1);
lcd.print("Hol:");
lcd.print(temH);
lcd.setCursor(8, 1);
lcd.print("Mor:");
lcd.print(temM);
}
void menu2() {
lcd.setCursor(0, 0);
lcd.print("Set temp H:");
lcd.print(setH);
if (arr == 0) {
lcd.print("<<");
}
lcd.setCursor(0, 1);
lcd.print("Set temp M:");
lcd.print(setM);
if (arr == 1) {
lcd.print("<<");
}
if (arr == 0) {
if (btnStateU && !flagU) {
flagU = true;
if (setH < 10) {
setH++;
}
}
if (!btnStateU && flagU) flagU = false;
if (btnStateD && !flagD) {
flagD = true;
if (setH > 5) {
setH--;
}
}
if (!btnStateD && flagD) flagD = false;
}
if (arr == 1) {
if (btnStateU && !flagU) {
flagU = true;
if (setM < 0) {
setM++;
}
}
if (!btnStateU && flagU) flagU = false;
if (btnStateD && !flagD) {
flagD = true;
if (setM > -18) {
setM--;
}
}
if (!btnStateD && flagD) flagD = false;
}
}
void menu3() {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("ERROR!");
lcd.setCursor(2, 1);
lcd.print("CHECK SENSOR");
digitalWrite(pinLed, HIGH);
tone(pinPiezo, 1000, 500);
if(temM == -127 || temH == -127){
digitalWrite(pinLed, LOW);
menu = 1;
}
}
void Holod() {
if (StateH == 0) {
digitalWrite(pinReleH, LOW);
digitalWrite(pinReleVent, LOW);
digitalWrite(pinReleK, LOW);
delay(1000);
digitalWrite(pinReleH, HIGH);
StateH = 1;
}
if (temH == setH || temH == setH + 1 || temH == setH - 1) {
flagSuccH = 1;
StateH = 0;
}
}
void Moroz() {
if (StateM == 0) {
digitalWrite(pinReleM, LOW);
digitalWrite(pinReleVent, HIGH);
digitalWrite(pinReleK, LOW);
delay(1000);
digitalWrite(pinReleM, HIGH);
StateM = 1;
}
if (temM == setM || temM == setM + 1 || temM == setM - 1) {
flagSuccM = 1;
StateM = 0;
}
}
Пробний скетч с библиотеки
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(15); // порт подключения датчиков (A1)
DallasTemperature ds(&oneWire);
byte num; // количество подключенных датчиков
void setup() {
Serial.begin(9600); // инициализация монитора порта
ds.begin(); // инициализация датчика ds18b20
num = ds.getDeviceCount(); // узнаем количество датчиков
Serial.print("Number: "); // выводим полученное количество
Serial.println(num);
}
void loop() {
// выполняем цикл столько, сколько найдено датчиков на шине
for (byte i = 0; i < num; i++){
Serial.print("Sensor ");
Serial.print(i);
Serial.print(": ");
ds.requestTemperatures(); // считываем температуру с датчика
Serial.print(ds.getTempCByIndex(i));
Serial.println("C");
}
Serial.println("");
}
Тестовая работала или работает?
Паузу в секунду добавьте между 24 и 25 строк в пробную программу - всё заработает
попробуйте так. Библиотека dallas temperature тем более задерживает loop.
Сейчас попробую бе3 библиотеки dallas
Тестовая работает хорошо, а вот в моей пишет -127
Тестовая работала или работает?
Работает тестовая
Тестовая работает хорошо, а вот в моей пишет -127
А сделайте тестовую с 2 датчиками. Уверен - работать не будет.
Кстати в библиотеке: