Разное о выращивании табака на Алтае
Вы не вошли.
Не в сети
Не в сети
Прикрутил дисплей ST7735 к Arduino UNO + градусник DS18B20. Дисплей не дорогой, но не очень качественно собран. Пришлось заново приклеивать сам дисплей к плате, на двухсторонний скотч.
#include <SPI.h>
#include "Ucglib.h"
#include <DallasTemperature.h>
#include <OneWire.h>
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=_SCL*/ 13, /*data=SDA*/ 11, /*cd=DC*/ 9, /*cs=CS*/ 10, /*reset=RES*/ 8);
//Ucglib_ST7735_18x128x160_HWSPI ucg(/*cd=*/ 9, /*cs=*/ 10, /*reset=*/ 8);
#define ONE_WIRE_BUS_1 7//ВХОД DS18B20
OneWire oneWire_in(ONE_WIRE_BUS_1);
DallasTemperature sensor_inhouse(&oneWire_in);
void setup(void)
{
delay(1000);
ucg.begin(UCG_FONT_MODE_TRANSPARENT);
//ucg.begin(UCG_FONT_MODE_SOLID);
ucg.clearScreen();
Serial.begin(115200);
//ds18b20
sensor_inhouse.begin();
}
void loop(void)
{
//ds18b20//
sensor_inhouse.requestTemperatures();
Serial.print("Inhouse: ");
Serial.println(sensor_inhouse.getTempCByIndex(0));
float tempC = sensor_inhouse.getTempCByIndex(0);
ucg.setRotate90();
ucg.setFont(ucg_font_ncenR24_tr);
ucg.setColor(0, 255, 0);
if (tempC != DEVICE_DISCONNECTED_C)
{
Serial.println("ТЕМПЕРАТУРА 1");
Serial.print(tempC);
//ucg.clearScreen();
ucg.setPrintPos(0,25);
ucg.print("T1_");
ucg.setPrintPos(60,25);
ucg.print(tempC);
delay(1800);
ucg.setColor(0, 0, 0);
ucg.setPrintPos(60,25);
ucg.print(tempC);
}
else Serial.print("DEVICE1 ds18b20 DISCONNECTED");
Serial.print(" ");
}
Не в сети
Новая плата/шилд. Дисплей ST7735 + дисплей светодиодный 4 бит на TM1637. Прототип, в железе ещё не собирал.
Скетч для проверки работоспособности обоих дисплеев.
#include <SPI.h>
#include "Ucglib.h"
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=_SCL*/ 13, /*data=SDA*/ 11, /*cd=DC*/ 10, /*cs=CS*/ 9, /*reset=RES*/ 8);
//Ucglib_ST7735_18x128x160_HWSPI ucg(/*cd=*/ 9, /*cs=*/ 10, /*reset=*/ 8);
#include "TM1637.h"
#define CLK 2
#define DIO 3
TM1637 disp(CLK, DIO);
void setup(void)
{
delay(1000);
ucg.begin(UCG_FONT_MODE_TRANSPARENT);
//ucg.begin(UCG_FONT_MODE_SOLID);
ucg.clearScreen();
Serial.begin(115200);
//TM1637//
disp.init(); // инициализация дисплея
disp.set(3); // яркость дисплея, 0 - 7 (минимум - максимум)
disp.point(1);//ВКЛЮЧИТЬ ДВОЕТОЧИЕ.
}
void loop(void)
{
ucg.setRotate90();
ucg.setFont(ucg_font_ncenR24_tr);
ucg.setColor(0, 255, 0);
//ucg.clearScreen();
ucg.setPrintPos(0,25);
ucg.print("T1_");
delay(1800);
disp.point(1);//ВКЛЮЧИТЬ ДВОЕТОЧИЕ.
disp.displayByte(_dash, _dash, _dash, _dash); //индикация --:--
delay(3000);
}
Не в сети
Не в сети
Код.
#include <SPI.h>
#include "Ucglib.h"
#include <DallasTemperature.h>
#include <OneWire.h>
#include "TM1637.h"
#define CLK 2
#define DIO 3
TM1637 disp(CLK, DIO);
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=_SCL*/ 13, /*data=SDA*/ 11, /*cd=DC*/ 10, /*cs=CS*/ 9, /*reset=RES*/ 8);
#define ONE_WIRE_BUS_1 5//ВХОД DS18B20
OneWire oneWire_in(ONE_WIRE_BUS_1);
DallasTemperature sensor_inhouse(&oneWire_in);
//DeviceAddress insideThermometer, outsideThermometer,outsideThermometer1;
void setup(void)
{
delay(1000);
ucg.begin(UCG_FONT_MODE_TRANSPARENT);
//ucg.begin(UCG_FONT_MODE_SOLID);
ucg.clearScreen();
Serial.begin(115200);
//ds18b20
sensor_inhouse.begin();
//TM1637//
disp.init(); // инициализация дисплея
disp.set(1); // яркость дисплея, 0 - 7 (минимум - максимум)
disp.point(1);//ВКЛЮЧИТЬ ДВОЕТОЧИЕ.
}
void loop(void)
{
//ds18b20//
sensor_inhouse.requestTemperatures();
Serial.print("Inhouse: ");
Serial.println(sensor_inhouse.getTempCByIndex(0));
float tempC = sensor_inhouse.getTempCByIndex(0);
ucg.setRotate270();
ucg.setFont(ucg_font_ncenR24_tr);
ucg.setColor(0, 255, 0);
if (tempC != DEVICE_DISCONNECTED_C)
{
Serial.println("ТЕМПЕРАТУРА 1");
Serial.print(tempC);
ucg.setPrintPos(0,27);
ucg.print("T1:");
ucg.setPrintPos(55,27);
ucg.print(tempC);
ucg.print("C");
disp.displayInt(tempC*100);
ucg.setPrintPos(0,54);
ucg.print("T2:");
ucg.setPrintPos(0,81);
ucg.print("T3:");
ucg.setPrintPos(0,108);
ucg.print("T4:");
delay(1800);
ucg.setColor(0, 0, 0);
ucg.setPrintPos(55,27);
ucg.print(tempC);
}
else Serial.print("DEVICE1 ds18b20 DISCONNECTED");
Serial.print(" ");
}
Не в сети
Добавил NTC датчик 10К. Такой как в W1209 используется. Датчик припаян к аналоговому входу А0 и +5В. С контакта А0 на землю идёт резистор 12К(его реальное сопротивление 11300 Ом // Value of the series resistor).
#include "thermistor.h"
#include "HardwareSerial.h"
#include <SPI.h>
#include "Ucglib.h"
#include <DallasTemperature.h>
#include <OneWire.h>
#include "TM1637.h"
#define CLK 2
#define DIO 3
TM1637 disp(CLK, DIO);
Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=_SCL*/ 13, /*data=SDA*/ 11, /*cd=DC*/ 10, /*cs=CS*/ 9, /*reset=RES*/ 8);
float tempNTC=0;
#define ONE_WIRE_BUS_1 5//ВХОД DS18B20
OneWire oneWire_in(ONE_WIRE_BUS_1);
DallasTemperature sensor_inhouse(&oneWire_in);
//DeviceAddress insideThermometer, outsideThermometer,outsideThermometer1;
// Analog pin used to read the NTC
#define NTC_PIN A0
// Thermistor object
THERMISTOR thermistor(NTC_PIN, // Analog pin
10000, // Nominal resistance at 25 ºC
3950, // thermistor's beta coefficient
11300); // Value of the series resistor
// Global temperature reading
uint16_t temp;
void setup(void)
{
delay(1000);
ucg.begin(UCG_FONT_MODE_TRANSPARENT);
//ucg.begin(UCG_FONT_MODE_SOLID);
ucg.clearScreen();
Serial.begin(115200);
//ds18b20
sensor_inhouse.begin();
//TM1637//
disp.init(); // инициализация дисплея
disp.set(1); // яркость дисплея, 0 - 7 (минимум - максимум)
disp.point(1);//ВКЛЮЧИТЬ ДВОЕТОЧИЕ.
}
void loop(void)
{
//ds18b20//
sensor_inhouse.requestTemperatures();
Serial.print("Inhouse: ");
Serial.println(sensor_inhouse.getTempCByIndex(0));
float tempC = sensor_inhouse.getTempCByIndex(0);
ucg.setRotate270();
ucg.setFont(ucg_font_ncenR24_tr);
ucg.setColor(0, 255, 0);
if (tempC != DEVICE_DISCONNECTED_C)
{
Serial.println("ТЕМПЕРАТУРА 1");
Serial.print(tempC);
ucg.setPrintPos(0,27);
ucg.print("DS18B20:");
ucg.setPrintPos(0,54);
ucg.print(tempC);
ucg.print("*C");
disp.displayInt(tempC*100);
ucg.setPrintPos(0,81);
ucg.print("NTC_10K:");
ucg.setPrintPos(0,110);
temp = thermistor.read(); // Read temperature
tempNTC=temp/10;
ucg.print(tempNTC);
ucg.print("*C");
delay(1800);
ucg.setColor(0, 0, 0);
ucg.setPrintPos(0,54);
ucg.print(tempC);
ucg.setPrintPos(0,110);
Serial.println(temp);
ucg.print(tempNTC);
}
else Serial.print("DEVICE1 ds18b20 DISCONNECTED");
Serial.print(" ");
}
Не в сети
Не в сети
Поправил скетч. Так, правильней.
#include "thermistor.h"
#include "HardwareSerial.h"
#include <SPI.h>
#include "Ucglib.h"
#include <DallasTemperature.h>
#include <OneWire.h>
#include "TM1637.h"
#define CLK 2
#define DIO 3
TM1637 disp(CLK, DIO);
Ucglib_ST7735_18x128x160_SWSPI ucg(/*sclk=_SCL*/ 13, /*data=SDA*/ 11, /*cd=DC*/ 10, /*cs=CS*/ 9, /*reset=RES*/ 8);
float tempNTC=0;
#define ONE_WIRE_BUS_1 5//ВХОД DS18B20
OneWire oneWire_in(ONE_WIRE_BUS_1);
DallasTemperature sensor_inhouse(&oneWire_in);
//DeviceAddress insideThermometer, outsideThermometer,outsideThermometer1;
// Analog pin used to read the NTC
#define NTC_PIN A0
// Thermistor object
THERMISTOR thermistor(NTC_PIN, // Analog pin
10000, // Nominal resistance at 25 ºC
3950, // thermistor's beta coefficient
11300); // Value of the series resistor
// Global temperature reading
uint16_t temp;
void setup(void)
{
delay(1000);
ucg.begin(UCG_FONT_MODE_TRANSPARENT);
//ucg.begin(UCG_FONT_MODE_SOLID);
ucg.clearScreen();
Serial.begin(115200);
//ds18b20
sensor_inhouse.begin();
//TM1637//
disp.init(); // инициализация дисплея
disp.set(1); // яркость дисплея, 0 - 7 (минимум - максимум)
disp.point(1);//ВКЛЮЧИТЬ ДВОЕТОЧИЕ.
}
void loop(void)
{
//ds18b20//
sensor_inhouse.requestTemperatures();
Serial.print("Inhouse: ");
Serial.println(sensor_inhouse.getTempCByIndex(0));
float tempC = sensor_inhouse.getTempCByIndex(0);
ucg.setRotate270();
ucg.setFont(ucg_font_ncenR24_tr);
ucg.setColor(0, 255, 0);
if (tempC != DEVICE_DISCONNECTED_C)
{
Serial.println("ТЕМПЕРАТУРА 1");
Serial.print(tempC);
ucg.setPrintPos(0,27);
ucg.print("DS18B20:");
ucg.setPrintPos(0,54);
ucg.print(tempC);
ucg.print("*C");
disp.displayInt(tempC*100);
}
else Serial.print("DEVICE1 ds18b20 DISCONNECTED");
/////////////////////////////
ucg.setPrintPos(0,81);
ucg.print("NTC_10K:");
ucg.setPrintPos(0,110);
temp = thermistor.read(); // Read temperature
tempNTC=temp/10;
ucg.print(tempNTC);
ucg.print("*C");
delay(1800);
ucg.setColor(0, 0, 0);
ucg.setPrintPos(0,54);
ucg.print(tempC);
ucg.setPrintPos(0,110);
Serial.println(temp);
ucg.print(tempNTC);
}
Не в сети
https://github.com/cbm80amiga/Arduino_ST7735_Fast
Arduino_ST7735_Fast.h - самая быстрая библиотека для тормозных плат/процессоров типа Arduino Uno. Вполне себе прилично библиотека работает. Если оптимизировать код и перерисовывать только изменяющиеся зоны изображения , довольно хорошо работает. Почти не мыргает.
Для устранения артефактов изображения(в виде горизонтальных и вертикальных полос в низу и с лева) нужно немножко поправить библиотеку Arduino_ST7735_Fast.h
Находим в файле Arduino_ST7735_Fast.h значение 160 и меняем его на 161, 128 меняем на 130.
Эти параметры должны стать такими:
#define ST7735_TFTWIDTH 130
#define ST7735_TFTHEIGHT 161
Не в сети
Не в сети