Roma_40
New member
Господа, подскажите.
Нужно, что бы показания с 2-х датчиков ds18b20 выводились на дисплей с точностью до одного знака после запятой.
методом тыка собрал следующий скетч:
Вроде как все работает.
Но обнаружил проблему. Знак после запятой меняется с интервалом не "0.1", а "0,3". Т.е. показывает значение 24.0, следующее становится 23.7 или 24.3
Нужно, что бы показания с 2-х датчиков ds18b20 выводились на дисплей с точностью до одного знака после запятой.
методом тыка собрал следующий скетч:
#include <Wire.h> // include Wire library (required for I2C devices)
#include <Adafruit_GFX.h> // include Adafruit graphics library
#include <Adafruit_ST7735.h> // include Adafruit ST7735 TFT library
//#include <Adafruit_BME280.h> // include Adafruit BME280 sensor library
// ST7735 TFT module connections
#define TFT_RST -1 // TFT RST pin is connected to NodeMCU reset pin
#define TFT_CS D8 // TFT CS pin is connected to NodeMCU pin D8 (GPIO15)
#define TFT_DC D4 // TFT DC pin is connected to NodeMCU pin D4 (GPIO2)
// initialize ST7735 TFT library with hardware SPI module
// SCK (CLK) ---> NodeMCU pin D5 (GPIO14)
// MOSI(DIN) ---> NodeMCU pin D7 (GPIO13)
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
/* ESP & Blynk */
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial
/* Blynk credentials */
char auth[] = "G-dy-92lhAjxqaFzEl6s5OjoFSMaW0CW";
/* WiFi credentials */
char ssid[] = "Keenetic Giga II";
char pass[] = "waFpmReW";
/* TIMER */
//#include <SimpleTimer.h>
SimpleTimer timer;
/* DS18B20 Temperature Sensor */
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 5 // DS18B20 подключаем на D1 на плате
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
float temp_0;
float temp_1;
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
DS18B20.begin();
timer.setInterval(1000L, getSendData);
Serial.println(" ");
Serial.println("Testing Dual Sensor data");
//void setup(void)
{
tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab
tft.fillScreen(ST7735_BLACK); // fill screen with black color
tft.drawFastHLine(0, 10, tft.width(), ST7735_WHITE); // draw horizontal white line at position (0, 15)
tft.setTextColor(ST7735_WHITE, ST7735_BLACK); // set text color to white and black background
tft.setTextSize(1); // text size = 1
tft.setCursor(44, 0); // move cursor to position (40, 0) pixel
tft.print("KOLONNA");
tft.setTextColor(ST7735_GREEN, ST7735_BLACK); // set text color to green and black background
tft.setCursor(8, 20); // move cursor to position (8, 20) pixel
tft.print("TEMPERATURA =");
tft.fillTriangle(4, 60, 10, 41, 16, 60, ST77XX_RED); // print Triangle up symbol
tft.fillTriangle(4, 71, 10, 90, 16, 71, ST77XX_BLUE); // print Triangle down symbol
}
}
void loop()
{
timer.run(); // Initiates SimpleTimer
Blynk.run();
{
tft.setTextSize(3);
tft.setCursor(20, 40);
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
if(temp_0 < 0) // if temperature < 0
tft.printf( "-%02u.%01u", (int)abs(temp_0), (int)(abs(temp_0) * 10) % 10 );
else // temperature >= 0
tft.printf( " %02u.%01u", (int)temp_0, (int)(temp_0 * 10) % 10 );
tft.setCursor(20, 70);
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
if(temp_1 < 0) // if temperature < 0
tft.printf( "-%02u.%01u", (int)abs(temp_1), (int)(abs(temp_1) * 10) % 10 );
else // temperature >= 0
tft.printf( " %02u.%01u", (int)temp_1, (int)(temp_1 * 10) % 10 );
tft.drawCircle(120, 42, 2, ST7735_CYAN); // print degree symbol ( ° )
tft.drawCircle(120, 72, 2, ST7735_CYAN); // print degree symbol ( ° )
delay(1000); // wait a second
}
}
/***************************************************
* Send Sensor data to Blynk
**************************************************/
void getSendData()
{
DS18B20.requestTemperatures();
temp_0 = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях
temp_1 = DS18B20.getTempCByIndex(1); // Sensor 0 показания для датчика 2 в цельсиях
//Serial.print(" Temp_0-");
//Serial.print(temp_0 );
//Serial.print(" Temp_1-");
//Serial.print(temp_1 );
Blynk.virtualWrite(10, temp_0); //вывод данных на виртуальный пин V10
Blynk.virtualWrite(11, temp_1); //вывод данных навиртуальный пин V11
}
#include <Adafruit_GFX.h> // include Adafruit graphics library
#include <Adafruit_ST7735.h> // include Adafruit ST7735 TFT library
//#include <Adafruit_BME280.h> // include Adafruit BME280 sensor library
// ST7735 TFT module connections
#define TFT_RST -1 // TFT RST pin is connected to NodeMCU reset pin
#define TFT_CS D8 // TFT CS pin is connected to NodeMCU pin D8 (GPIO15)
#define TFT_DC D4 // TFT DC pin is connected to NodeMCU pin D4 (GPIO2)
// initialize ST7735 TFT library with hardware SPI module
// SCK (CLK) ---> NodeMCU pin D5 (GPIO14)
// MOSI(DIN) ---> NodeMCU pin D7 (GPIO13)
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
/* ESP & Blynk */
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial
/* Blynk credentials */
char auth[] = "G-dy-92lhAjxqaFzEl6s5OjoFSMaW0CW";
/* WiFi credentials */
char ssid[] = "Keenetic Giga II";
char pass[] = "waFpmReW";
/* TIMER */
//#include <SimpleTimer.h>
SimpleTimer timer;
/* DS18B20 Temperature Sensor */
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 5 // DS18B20 подключаем на D1 на плате
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
float temp_0;
float temp_1;
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
DS18B20.begin();
timer.setInterval(1000L, getSendData);
Serial.println(" ");
Serial.println("Testing Dual Sensor data");
//void setup(void)
{
tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab
tft.fillScreen(ST7735_BLACK); // fill screen with black color
tft.drawFastHLine(0, 10, tft.width(), ST7735_WHITE); // draw horizontal white line at position (0, 15)
tft.setTextColor(ST7735_WHITE, ST7735_BLACK); // set text color to white and black background
tft.setTextSize(1); // text size = 1
tft.setCursor(44, 0); // move cursor to position (40, 0) pixel
tft.print("KOLONNA");
tft.setTextColor(ST7735_GREEN, ST7735_BLACK); // set text color to green and black background
tft.setCursor(8, 20); // move cursor to position (8, 20) pixel
tft.print("TEMPERATURA =");
tft.fillTriangle(4, 60, 10, 41, 16, 60, ST77XX_RED); // print Triangle up symbol
tft.fillTriangle(4, 71, 10, 90, 16, 71, ST77XX_BLUE); // print Triangle down symbol
}
}
void loop()
{
timer.run(); // Initiates SimpleTimer
Blynk.run();
{
tft.setTextSize(3);
tft.setCursor(20, 40);
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
if(temp_0 < 0) // if temperature < 0
tft.printf( "-%02u.%01u", (int)abs(temp_0), (int)(abs(temp_0) * 10) % 10 );
else // temperature >= 0
tft.printf( " %02u.%01u", (int)temp_0, (int)(temp_0 * 10) % 10 );
tft.setCursor(20, 70);
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
if(temp_1 < 0) // if temperature < 0
tft.printf( "-%02u.%01u", (int)abs(temp_1), (int)(abs(temp_1) * 10) % 10 );
else // temperature >= 0
tft.printf( " %02u.%01u", (int)temp_1, (int)(temp_1 * 10) % 10 );
tft.drawCircle(120, 42, 2, ST7735_CYAN); // print degree symbol ( ° )
tft.drawCircle(120, 72, 2, ST7735_CYAN); // print degree symbol ( ° )
delay(1000); // wait a second
}
}
/***************************************************
* Send Sensor data to Blynk
**************************************************/
void getSendData()
{
DS18B20.requestTemperatures();
temp_0 = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях
temp_1 = DS18B20.getTempCByIndex(1); // Sensor 0 показания для датчика 2 в цельсиях
//Serial.print(" Temp_0-");
//Serial.print(temp_0 );
//Serial.print(" Temp_1-");
//Serial.print(temp_1 );
Blynk.virtualWrite(10, temp_0); //вывод данных на виртуальный пин V10
Blynk.virtualWrite(11, temp_1); //вывод данных навиртуальный пин V11
}
Вроде как все работает.
Но обнаружил проблему. Знак после запятой меняется с интервалом не "0.1", а "0,3". Т.е. показывает значение 24.0, следующее становится 23.7 или 24.3