Witam. Mam kod który działa. Problem jest taki że jak chcę podłączyć inny DS18b20 to muszę go odczytać i wpisać adres do projektu. Może ktoś pomoże przerobić aby nie trzeba było tego robić za każdym razem jak wymieniam czujnik.
Mam jeszcze takie pytanie czy można podłączyć każdy z czujników pod inny pin?
Oto początek kodu bo chyba to ma znaczenie?
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Rotary.h>
#include <DS3231.h>
#include <EEPROM.h>
DS3231 clock;
RTCDateTime dt, lastdt, setdt;
typedef struct czasT_ {
byte godz;
byte minuta;
};
czasT_ czasy[4];
czasT_ tmpczasy[4];
#define ONE_WIRE_BUS 5 // Pin OneWire
#define TEMPERATURE_PRECISION 9
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//DeviceAddress DS_NR1, DS_NR2, DS_NR3;
DeviceAddress DS_NR1 = { 0x28, 0xAD, 0xD4, 0x76, 0xE0, 0x01, 0x3C, 0xF6 }; // Tu wpisać adresy czujników
DeviceAddress DS_NR2 = { 0x28, 0x4D, 0x1C, 0x76, 0xE0, 0x01, 0x3C, 0xC3 }; // do szukania adresów program OneWireSearch z przykładów DallasTemperature
DeviceAddress DS_NR3 = { 0x28, 0xB0, 0xBF, 0x76, 0xE0, 0x01, 0x3C, 0x86 };
#define ON LOW
#define OFF HIGH
#define PINA 2 // Pin A enkodera (CLK)
#define PINB 3 // Pin B enkodera (DT)
#define PINSW 4 // Pin SW enkodera (SW)
#define RELAY_1 8 // Pin przekaźnika 1
#define RELAY_2 9 // Pin przekaźnika 2
#define PIN_X1 11 // Pin X1
#define PIN_X2 12 // Pin X2
#define BUZZPIN 10 // Pin buzzera alarmu
#define MIN_CWU 25 // Minimalna temperatura CWU
#define MAX_CWU 70 // Maksymalna tempearatua CWU
#define HISTEREZA 5
#define DEBOUNCE_TIME 20 // debauncing przycisku 20 ms
#define TEMP_TIME 5000 // 5s czas pomiędzy odczytami temperatury
#define MENU_TIME 15000 // 5s po tym czasie wraca automatycznie do ekranu głównego
#define HOLD_TIME 5000 // 10s czas przytrzymania przycisku by wejśc w menu
#define RELAY1_OFF_TIME 120000 // 2 min
#define LCD_OFF_TIME 300000 // 5 min czas wyłaczenia podświetlenia
Rotary enkoder = Rotary(PINA, PINB);
long int Time = 0;
long int tTime = 0;
long int mTime = 0;
long int rTime = 0;
long int pTime = 0;
long int eTime = 0;
byte TempCWU = 50;
byte tmp = 50;
byte opcje = 0;
byte poz = 1;
byte lastpoz = 1;
byte E2poz = 1;
byte E3poz = 1;
byte E4poz = 1;
bool swPressed = false;
bool flag = false;
bool tflag = false;
bool eflag = true;
bool s10 = false;
bool p2minOff = false;
bool sysOFF = false;
//LiquidCrystal_I2C lcd(0x27,20,4);
LiquidCrystal_I2C lcd(0x27,20,4);
//LiquidCrystal_I2C lcd2(0x26,16,2);
uint8_t customChar[8] = { 0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000};
float temp1C = 0;
float temp2C = 0;
float temp3C = 0;
float lastT1 = 0;
float lastT2 = 0;
float lastT3 = 0;
uint16_t zakresTmp, zakres1, zakres2, zakres3, zakres4;
unsigned long lastDebounceTime = 0;
uint8_t debounceDelay = 50; // debouncing - opóźnienie i pozbycie się drganai styków w przyciskach
void saveconfig(){
EEPROM.write(0,TempCWU);
Pozdrawiam
Mam jeszcze takie pytanie czy można podłączyć każdy z czujników pod inny pin?
Oto początek kodu bo chyba to ma znaczenie?
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Rotary.h>
#include <DS3231.h>
#include <EEPROM.h>
DS3231 clock;
RTCDateTime dt, lastdt, setdt;
typedef struct czasT_ {
byte godz;
byte minuta;
};
czasT_ czasy[4];
czasT_ tmpczasy[4];
#define ONE_WIRE_BUS 5 // Pin OneWire
#define TEMPERATURE_PRECISION 9
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//DeviceAddress DS_NR1, DS_NR2, DS_NR3;
DeviceAddress DS_NR1 = { 0x28, 0xAD, 0xD4, 0x76, 0xE0, 0x01, 0x3C, 0xF6 }; // Tu wpisać adresy czujników
DeviceAddress DS_NR2 = { 0x28, 0x4D, 0x1C, 0x76, 0xE0, 0x01, 0x3C, 0xC3 }; // do szukania adresów program OneWireSearch z przykładów DallasTemperature
DeviceAddress DS_NR3 = { 0x28, 0xB0, 0xBF, 0x76, 0xE0, 0x01, 0x3C, 0x86 };
#define ON LOW
#define OFF HIGH
#define PINA 2 // Pin A enkodera (CLK)
#define PINB 3 // Pin B enkodera (DT)
#define PINSW 4 // Pin SW enkodera (SW)
#define RELAY_1 8 // Pin przekaźnika 1
#define RELAY_2 9 // Pin przekaźnika 2
#define PIN_X1 11 // Pin X1
#define PIN_X2 12 // Pin X2
#define BUZZPIN 10 // Pin buzzera alarmu
#define MIN_CWU 25 // Minimalna temperatura CWU
#define MAX_CWU 70 // Maksymalna tempearatua CWU
#define HISTEREZA 5
#define DEBOUNCE_TIME 20 // debauncing przycisku 20 ms
#define TEMP_TIME 5000 // 5s czas pomiędzy odczytami temperatury
#define MENU_TIME 15000 // 5s po tym czasie wraca automatycznie do ekranu głównego
#define HOLD_TIME 5000 // 10s czas przytrzymania przycisku by wejśc w menu
#define RELAY1_OFF_TIME 120000 // 2 min
#define LCD_OFF_TIME 300000 // 5 min czas wyłaczenia podświetlenia
Rotary enkoder = Rotary(PINA, PINB);
long int Time = 0;
long int tTime = 0;
long int mTime = 0;
long int rTime = 0;
long int pTime = 0;
long int eTime = 0;
byte TempCWU = 50;
byte tmp = 50;
byte opcje = 0;
byte poz = 1;
byte lastpoz = 1;
byte E2poz = 1;
byte E3poz = 1;
byte E4poz = 1;
bool swPressed = false;
bool flag = false;
bool tflag = false;
bool eflag = true;
bool s10 = false;
bool p2minOff = false;
bool sysOFF = false;
//LiquidCrystal_I2C lcd(0x27,20,4);
LiquidCrystal_I2C lcd(0x27,20,4);
//LiquidCrystal_I2C lcd2(0x26,16,2);
uint8_t customChar[8] = { 0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000};
float temp1C = 0;
float temp2C = 0;
float temp3C = 0;
float lastT1 = 0;
float lastT2 = 0;
float lastT3 = 0;
uint16_t zakresTmp, zakres1, zakres2, zakres3, zakres4;
unsigned long lastDebounceTime = 0;
uint8_t debounceDelay = 50; // debouncing - opóźnienie i pozbycie się drganai styków w przyciskach
void saveconfig(){
EEPROM.write(0,TempCWU);
Pozdrawiam