Błędny odczyt temperatury - mateuszmilke97@gmail.com - 16-03-2022
Cześć, Wie ktoś może dlaczego pokazuje mi błędne odczyty z termometrów na poziomie -127 jeżeli w setupie zainicjalizuje wyświetlacz LCD? jak odznaczę wszystkie funkcje z wyświetlacza w setupie wtedy wartości z termometrów są prawidłowe próbowałem odznaczać funkcje po kolei lecz dopiero przy odznaczonych wszystkich funkcjach termometr działa. Poniżej kod.
Kod: #include <DallasTemperature.h>
#include <OneWire.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
OneWire oneWire(2);
DallasTemperature sensors(&oneWire);
#if defined(ARDUINO) && ARDUINO >= 100
#define printByte(args) write(args);
#else
#define printByte(args) print(args,BYTE);
#endif
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte tmp[8] = {
0b00000,
0b00100,
0b00100,
0b00100,
0b01110,
0b01010,
0b01110,
0b00000
};
byte stC[8] = {
0b00000,
0b01000,
0b00011,
0b00100,
0b00100,
0b00100,
0b00011,
0b00000
};
void setup() {
sensors.begin();
Serial.begin(9600);
lcd.init();
lcd.backlight();
sensors.begin();
lcd.createChar(0, tmp);
lcd.createChar(1, stC);
}
void tmps() {
sensors.requestTemperatures();
float tempC1 = sensors.getTempCByIndex(0);
float tempC2 = sensors.getTempCByIndex(1);
Serial.print("In: ");
Serial.print(tempC1);
Serial.print(" st.C ");
Serial.print(" Out: ");
Serial.print(tempC2);
Serial.println(" st.C");
//lcd.setCursor(1, 0);
// lcd.printByte(0);
//lcd.print(tempC1);
//lcd.printByte(1);
}
void loop() {
tmps();
}
RE: Błędny odczyt temperatury - OMK - 16-03-2022
(16-03-2022, 18:54)mateuszmilke97@gmail.com napisał(a): Cześć, Wie ktoś może dlaczego pokazuje mi błędne odczyty z termometrów na poziomie -127 jeżeli w setupie zainicjalizuje wyświetlacz LCD? jak odznaczę wszystkie funkcje z wyświetlacza w setupie wtedy wartości z termometrów są prawidłowe próbowałem odznaczać funkcje po kolei lecz dopiero przy odznaczonych wszystkich funkcjach termometr działa. Poniżej kod.
Kod: #include <DallasTemperature.h>
#include <OneWire.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
OneWire oneWire(2);
DallasTemperature sensors(&oneWire);
#if defined(ARDUINO) && ARDUINO >= 100
#define printByte(args) write(args);
#else
#define printByte(args) print(args,BYTE);
#endif
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte tmp[8] = {
0b00000,
0b00100,
0b00100,
0b00100,
0b01110,
0b01010,
0b01110,
0b00000
};
byte stC[8] = {
0b00000,
0b01000,
0b00011,
0b00100,
0b00100,
0b00100,
0b00011,
0b00000
};
void setup() {
sensors.begin();
Serial.begin(9600);
lcd.init();
lcd.backlight();
sensors.begin();
lcd.createChar(0, tmp);
lcd.createChar(1, stC);
}
void tmps() {
sensors.requestTemperatures();
float tempC1 = sensors.getTempCByIndex(0);
float tempC2 = sensors.getTempCByIndex(1);
Serial.print("In: ");
Serial.print(tempC1);
Serial.print(" st.C ");
Serial.print(" Out: ");
Serial.print(tempC2);
Serial.println(" st.C");
//lcd.setCursor(1, 0);
// lcd.printByte(0);
//lcd.print(tempC1);
//lcd.printByte(1);
}
void loop() {
tmps();
}
Kod: #include <LiquidCrystal_I2C.h>
byte znak0[8] = { 0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000 };
byte znak1[8] = { 0b11111, 0b10000, 0b10000, 0b11111, 0b10000, 0b10000, 0b11111, 0b00010 };
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS D7 // Pin OneWire
#define TEMPERATURE_PRECISION 9
int przekaznik1 = D9;
int przekaznik2 = D10;
int buzer = D2;
bool sp1 = true; //zmienna boolowska sp1 do steowania stanem przekaznika1
bool sp2 = true;
unsigned long czas;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress DS_NR1 = { 0x28, 0x32, 0xFD, 0x48, 0xF6, 0xA8, 0x3C, 0xF2 }; // Tu wpisać adresy czujników
DeviceAddress DS_NR3 = { 0x28, 0x6F, 0x82, 0x95, 0xF0, 0x01, 0x3C, 0x85 };
LiquidCrystal_I2C lcd(0x27,16,2);
float temp1C = 0;
float temp2C = 0;
//float temp3C = 0;
void setup()
{
// lcd.backlight(); //załącza podświetlenie
lcd.noBacklight(); //wyłącza podświetlenie
sensors.begin();
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.clear();
//unsigned long czas;
czas = millis();
pinMode(przekaznik1, OUTPUT); //przekaznik1 jako wyjście
pinMode(przekaznik2, OUTPUT);
pinMode(buzer, OUTPUT);
digitalWrite(przekaznik1, HIGH); //stan początkowy przekaznika1 wysoki
digitalWrite(przekaznik2, HIGH);
digitalWrite(buzer, LOW);
sensors.setResolution(DS_NR1, TEMPERATURE_PRECISION);
sensors.setResolution(DS_NR3, TEMPERATURE_PRECISION);
}
void loop()
{
sensors.requestTemperatures();
temp1C = sensors.getTempC(DS_NR1); // pobierz temperaturę po kolei z 3 termometrów
temp2C = sensors.getTempC(DS_NR3);
// temp3C = sensors.getTempC(DS_NR2);
if(temp2C>=35)
{
digitalWrite(przekaznik1, LOW);
digitalWrite(przekaznik2, HIGH);
}
// else {
// digitalWrite(przekaznik1, HIGH);
// digitalWrite(przekaznik2, LOW);
// }
if(temp2C<=30)
{
digitalWrite(przekaznik1, HIGH);
digitalWrite(przekaznik2, LOW);
}
if((temp2C>80) || (temp1C>85))
{
digitalWrite(buzer, HIGH);
lcd.backlight(); //załącza podświetlenie
// lcd.noBacklight(); //wyłącza podświetlenie
}
else
{
digitalWrite(buzer, LOW);
}
lcd.createChar(0, znak0);
lcd.createChar(1, znak1);
lcd.setCursor(0,0);
lcd.print("PIEC GAZ: ");
lcd.setCursor(10,0);
lcd.print(temp1C,1);
lcd.print((char)0);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("PIEC W");
lcd.print((char)1);
lcd.print("G: ");
lcd.setCursor(10,1);
lcd.print(temp2C,1);
// lcd.print(" ");
lcd.print((char)0);
lcd.print("C");
delay (3000);
}
Wywal co ci nie potrzebne. Dwa czujniki działają stabilnie. Były trzy ale jeden okazał się zbyteczny.
RE: Błędny odczyt temperatury - mateuszmilke97@gmail.com - 17-03-2022
A skąd masz taki adres? 0x28, 0x32, 0xFD, 0x48, 0xF6, 0xA8, 0x3C, 0xF2 ??
mi w testerze wyświetla tylko taki 28FF1D7F501501DC jaki rodzaj adresu tego Twojego to jest może idzie jakoś go przekonwertować ?
RE: Błędny odczyt temperatury - OMK - 17-03-2022
Można przerobić tak program do odczytu aby dodawał 0x albo samemu. To np. Twój
0x28, 0xFF, 0x1D, 0x7F, 0x50, 0x15, 0x01, 0xDC
RE: Błędny odczyt temperatury - mateuszmilke97@gmail.com - 17-03-2022
Dobra temat sam rozwiązałem przypomniało mi się że kiedyś moje oryginalne leonardo już parę lat przeżyło i nie zawsze wszystkie funkcje działają jak powinny na różnych pinach wystarczyło linie danych z termometrów przełożyć na inny pin i działa jak należy. Musze powoli nastawiać się na kupno kolejnego ardu. Ale dzięki za pomoc, dzęki Tobie nauczyłem się konwertować adresy i ustawiać rozdzielczość temeratury w poszczególnych czujnikac. Dzięki
|