Ви не увійшли.
Сторінки 1
Ага, зрозумів. Щиро дякую!!
А що значить round?
Ага, точно так я вже і зробив. Просто пам'ятаю, що в Сі треба обгортати в скобки все, що має відноситись до else, хоча можу помилятися.
ааа, все, я зрозумів чому тільки temperature[0] = ' '; має бути в скобках. Дякую!!!
Я брав у скобки увесь цей шматок
{
temperature[0] = ' ';
temperature[1] = (Temp / 100) % 10 + '0';
temperature[2] = (Temp / 10) % 10 + '0';
temperature[4] = Temp % 10 + '0';
}
Дякую, Ваш код допоміг мені. Але є маленька дивина, якщо я else беру в скобки, то на дисплеї одні нулі, а коли лишаю без них то все чітко показує...
if (Temp < 0) {
temperature[0] = '-';
Temp &= 0x7FFF;
Temp = abs(Temp);
} else
temperature[0] = ' ';
temperature[1] = (Temp / 100) % 10 + '0';
temperature[2] = (Temp / 10) % 10 + '0';
temperature[4] = Temp % 10 + '0';
Залив стандартний приклад з бібліотеки DHT Adafruit dht test, то в терміналі взагалі почав показувати -3276.5.
Доброго здоров'я! По прикладам з інтернету написав скетч типу погодної станції з використанням DHT22, бібліотеку взяв від Adafruit. Все працює добре, але коли температура становиться нижче 0 то показує -76 градусів. Я вже замахався шукати причину.
#include <DHT.h>
#include <DHT_U.h>
#include <stdio.h>
#include <Wire.h>
#include <SPI.h> // include SPI library
#include <virtuabotixRTC.h>
#include <Adafruit_Sensor.h>
//#include <Adafruit_BME280.h>
//#define SEALEVELPRESSURE_HPA (1013.25)
//Adafruit_BME280 bme;
virtuabotixRTC myRTC(6, 7, 8);
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // Устанавливаем дисплей
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define DHTPIN 3 // DHT22 data pin is connected to Arduino analog pin 0
#define DHTTYPE DHT22 // DHT22 sensor is used
DHT dht22(DHTPIN, DHTTYPE); // configure DHT library
char temperature[] = "000.0";
char humidity[] = "000.0%";
void setup() {
//myRTC.setDS1302Time(40, 52, 19, 6, 26, 7, 2024); //сек,хв,год,день,число,місяць,рік
myRTC.updateTime();
sensors.begin();
dht22.begin();
lcd.init();
lcd.backlight(); // Включаем подсветку дисплея
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
delay(1000); // wait 1 second
byte drop[8] = {
0b00100,
0b01010,
0b11011,
0b10011,
0b10001,
0b11011,
0b01110,
0b00000
};
byte cel[8] = {
0b00110,
0b01001,
0b01001,
0b00110,
0b00000,
0b00000,
0b00000,
0b00000
};
lcd.createChar(1, drop);
lcd.createChar(2, cel);
}
// main loop
void loop() {
float tempC = sensors.getTempCByIndex(0);
lcd.setCursor(10, 2);
lcd.print(tempC, 1);
lcd.write(2);
lcd.print("C");
/*lcd.setCursor(0, 3);
lcd.print(bme.readPressure() / 133.32F,0);
lcd.print("mmHg");
lcd.setCursor(10, 3);
lcd.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
lcd.print("m");*/
sensors.requestTemperatures();
// read humidity
int RH = dht22.readHumidity() * 10;
// read temperature in degree Celsius
int Temp = dht22.readTemperature() * 10;
// update temperature and humidity arrays
if (Temp < 0) {
temperature[0] = '-';
Temp = abs(Temp);
} else
temperature[0] = ' ';
temperature[1] = (Temp / 100) % 10 + '0';
temperature[2] = (Temp / 10) % 10 + '0';
temperature[4] = Temp % 10 + '0';
if (RH >= 1000)
humidity[0] = '1';
else
humidity[0] = ' ';
humidity[1] = (RH / 100) % 10 + '0';
humidity[2] = (RH / 10) % 10 + '0';
humidity[4] = RH % 10 + '0';
delay(500); // wait 1 second
lcd.setCursor(0, 1);
lcd.print(temperature);
lcd.write(2);
lcd.print('C');
lcd.setCursor(0, 2);
lcd.print(humidity);
lcd.write(1);
lcd.setCursor(10, 0);
lcd.print(myRTC.dayofmonth);
lcd.print(".");
if (myRTC.month < 10) lcd.print(0);
lcd.print(myRTC.month);
lcd.print(".");
lcd.print(myRTC.year);
lcd.setCursor(0, 0);
myRTC.updateTime();
lcd.print(myRTC.hours, DEC);
lcd.print(":");
if (myRTC.minutes < 10) lcd.print(0);
lcd.print(myRTC.minutes, DEC);
lcd.print(":");
if (myRTC.seconds < 10) lcd.print(0);
lcd.print(myRTC.seconds, DEC);
lcd.setCursor(10, 1);
if (myRTC.dayofweek == 1) lcd.print("SUNDAY");
else if (myRTC.dayofweek == 2) lcd.print("MONDAY");
else if (myRTC.dayofweek == 3) lcd.print("TUESDAY");
else if (myRTC.dayofweek == 4) lcd.print("WEDNESDAY");
else if (myRTC.dayofweek == 5) lcd.print("THURSDAY");
else if (myRTC.dayofweek == 6) lcd.print("FRIDAY");
else if (myRTC.dayofweek == 7) lcd.print("SATURDAY");
}
// end of code.
Сторінки 1