Спасибо, посмотрю, может быть поменяю, если она лучше.
@ua6em так сказать на первоисточник этой библиотеки ссылку дал. У неё есть множество форков. Разбираться, какой вариант лучше, можно до посинения. Если экран работает, то я бы пока с этим сильно не заморачивался. У Вас и без этого ещё много интересного
Хотя с другой стороны, может он и прав…
Вот в исходном скетче упоминается iarduino_RTC. Так библиотеки от iarduino у многих здесь приводили к проблемам. Не любит их никто. Лучше что-нибудь другое найти.
Всем привет. подключил часы. Разобрал пример из библиотеки RTClib , по аналогии дописал в скетч с датчиком. В монитор порта все выводится нормально, на дисплей не соображу как вывести. По аналогии с выводом данных датчика не получается.
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
#include <UTFT.h>
extern uint8_t nadianne[];
extern uint8_t DotMatrix_M[]; //Подключаем шрифт DotMatrix_M
extern uint8_t DotMatrix_XL_Num[]; //Подключаем шрифт SevenSeg_XXXL_Num
extern uint8_t GroteskBold32x64[];
extern uint8_t GroteskBold24x48[];
extern uint8_t SevenSegNumFontPlusPlus[];
extern uint8_t Dingbats1_XL[];
extern uint8_t GroteskBold16x32[];
extern uint8_t arial_italic[];
extern uint8_t nadianne[];
extern uint8_t hallfetica_normal[];
extern uint8_t various_symbols[];
extern uint8_t Various_Symbols_16x32[];
//extern uint8_t SmallFont[];
UTFT myGLCD(CTE40,38,39,40,41); // Remember to change the model parameter to suit your display module!
void setup()
{
Serial.begin(115200);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
Serial.println(F("DHT11"));
dht.begin();
myGLCD.InitLCD(); //Инициализируем дисплей
myGLCD.clrScr();
myGLCD.setColor(255, 255, 255);
myGLCD.fillRect(0,4,450,0);
myGLCD.setColor(255, 255, 255);
myGLCD.fillRect(1,272,5,0);
myGLCD.setColor(255, 255, 255); //розовый, 255,225,225 синий,255,225,255 светло голубой
myGLCD.fillRect(218,272,220,0);
myGLCD.setColor(255, 255, 255); //розовый, 255,225,225 синий,255,225,255 светло голубой
myGLCD.fillRect(0,90,450,92);
myGLCD.setColor(255, 255, 255);
myGLCD.fillRect(0,272,450,270);
myGLCD.setColor(255, 255, 255);
myGLCD.fillRect(0,182,450,180);
myGLCD.setColor(255, 255, 255);
myGLCD.fillRect(450,272,452,0);
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("Street temp", 40, 5);
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("mm", 182,110);
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("Hg", 186,125);
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("Pressure", 20,94);
myGLCD.setColor(0, 255, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("Home temp", 235, 5);
myGLCD.setColor(0, 255, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("o", 365,20);
myGLCD.setColor(0, 255, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("C", 380,30);
myGLCD.setColor(0, 255, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("%", 370,110);
myGLCD.setColor(0, 255, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("Humidity", 235,94);
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("o", 180,20);
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("C", 195,30);
}
void loop()
{
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print("Temperature: ");
Serial.print(rtc.getTemperature());
Serial.println(" C");
Serial.println();
delay(3000);
delay(2000);
int h = dht.readHumidity(); // чтение датчика на пине 2
int t = dht.readTemperature(); // чтение датчика на пине 2
//float h = dht.readHumidity(); // чтение датчика на пине 2
// float t = dht.readTemperature(); // чтение датчика на пине 2
if (isnan(h) || isnan(t))
{
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.println(t);
{
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(GroteskBold16x32);
myGLCD.print(String(h),295,141);
}
{
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(GroteskBold16x32);
myGLCD.print(String(t),295,50);
}
{
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(GroteskBold16x32);
// myGLCD.print(,30,250);
}
}
А что это?
почему эти три куска выделены в отдельные блоки? Зачем трижды устанавливать один и тот же цвет? В третьем блоке вообще ничего не выводится на экран - зачем он?
вот тут еще лучше… Семь раз один и тот же цвет?
Как говорится в анекдоте - идите уже, зеленее не будет!
@Влад47 Вы бы скетч-то привели именно тот, в котором пытались вывести, но не получилось.
А то в последнем приведённом варианте вроде как и нет попытки вывода времени на экран.
Ну и да, чтобы всё это легче смотрелось, можно часть, рисующую всякие рамки и статический текст подсократить существенно по строчкам - выкинуть те, которые ничего не меняют (одинаковый цвет, одинаковый шрифт).
всё время надо собрать в одну строку, добавить в нужное место незначащие нули и разделители, а потом единой строкой и вывести, я так делал когда-то, лет 6 назад
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
#include <UTFT.h>
extern uint8_t nadianne[];
extern uint8_t DotMatrix_M[]; //Подключаем шрифт DotMatrix_M
extern uint8_t DotMatrix_XL_Num[]; //Подключаем шрифт SevenSeg_XXXL_Num
extern uint8_t GroteskBold32x64[];
extern uint8_t GroteskBold24x48[];
extern uint8_t SevenSegNumFontPlusPlus[];
extern uint8_t Dingbats1_XL[];
extern uint8_t GroteskBold16x32[];
extern uint8_t arial_italic[];
extern uint8_t nadianne[];
extern uint8_t hallfetica_normal[];
extern uint8_t various_symbols[];
extern uint8_t Various_Symbols_16x32[];
//extern uint8_t SmallFont[];
UTFT myGLCD(CTE40,38,39,40,41); // Remember to change the model parameter to suit your display module!
void setup()
{
Serial.begin(115200);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
Serial.println(F("DHT11"));
dht.begin();
myGLCD.InitLCD(); //Инициализируем дисплей
myGLCD.clrScr();
myGLCD.setColor(255, 255, 255);
myGLCD.fillRect(0,4,450,0);
myGLCD.fillRect(1,272,5,0);
myGLCD.fillRect(218,272,220,0);
myGLCD.fillRect(0,90,450,92);
myGLCD.fillRect(0,272,450,270);
myGLCD.fillRect(0,182,450,180);
myGLCD.fillRect(450,272,452,0);
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("Street temp", 40, 5);
myGLCD.print("mm", 182,110);
myGLCD.print("Hg", 186,125);
myGLCD.print("Pressure", 20,94);
myGLCD.print("o", 180,20);
myGLCD.print("C", 195,30);
myGLCD.setColor(0, 255, 255);
myGLCD.setFont(hallfetica_normal);
myGLCD.print("Home temp", 235, 5);
myGLCD.print("o", 365,20);
myGLCD.print("C", 380,30);
myGLCD.print("%", 370,110);
myGLCD.print("Humidity", 235,94);
}
void loop()
{
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print("Temperature: ");
Serial.print(rtc.getTemperature());
Serial.println(" C");
Serial.println();
delay(3000);
delay(2000);
int h = dht.readHumidity(); // чтение датчика на пине 2
int t = dht.readTemperature(); // чтение датчика на пине 2
//float h = dht.readHumidity(); // чтение датчика на пине 2
// float t = dht.readTemperature(); // чтение датчика на пине 2
if (isnan(h) || isnan(t))
{
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print(F("Humidity: "));
Serial.print(h);
Serial.print(F("% Temperature: "));
Serial.println(t);
{
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(GroteskBold16x32);
myGLCD.print(String(h),295,141);
myGLCD.print(String(t),295,50);
}
{
myGLCD.setColor(255, 0, 255);
myGLCD.setFont(GroteskBold16x32);
// myGLCD.print(,30,250);
}
}
А как выводили время, что оно не вывелось - так и не показали. (Это видимо где-то в районе 142 строки по последнему скетчу было.) Чего бы ему не выводиться-то?
Добрый день всем! Пока не получается вывод на дисплей даты и время, я подключил датчик давления ВМР 180, на основе примеров из инета дописал измерение давления в скетч, вывел на дисплей. Все получилось. Что касается как я пробовал вывести на дисплей дату и время. Наверное я все пробовал неправильно. Я пробовал так: myGLCD.print(String(now.hour(),30,250)); пробовал так : myGLCD.print(String( hour()([now.hour()]) пробовал так RTC.read™; myGLCD. print(tm.Hour() и так далеею Я здесь пишу сокращенно, по одному числу. Очевидно все делал в корне неверно. Подскажите, в какую сторону идти
Смотрите внимательно, куда ставите скобки. У вас координаты дисплея оказались внутри инициализации класса String. Зачем они там?
Или вы вообще не понимаете, что тут написано?
now.hour() - по сути-то обычное целое число. Чего бы ему не выводиться? Так что ещё раз проверяйте синтаксис. Если в скетче скобки стояли, как здесь написали, то понятно, что ничего не вывелось. Видимо так надо было: myGLCD.print(String(now.hour()), 30, 250);
Во-первых, НИКОГДА не показывайте программный код в виде картинок с монитора. Это крайне неудобно для обсуждения и потому трактуется как неуважение к другим участникам.
А во-вторых - прямо в указанной строке на мониторе - ошибка, написано “string” вместо “String” - вы думаете это одно и то же???
И внизу именно про эту ошибку сообщает компилятор!
Поэтому тут всегда и просят точно приводить именно тот скетч о котором идёт речь и так же точно копировать сообщения об ошибках.
Критику принял. Прошу меня извинить, больше такого не повторится. Всем большое спасибо. Все получилось. Теперь буду разбираться с радиомодулем, приемник, передатчик.
Добрый день всем! На основе примеров из инета составил скетч для передатчика
01 #include <SPI.h>
02 #include "nRF24L01.h"
03 #include "RF24.h"
04 #include <OneWire.h> //библиотека работы шины для ds18b20
05 #include <DallasTemperature.h> //библиотека для считывания температуры с ds18b20
06
07 const uint64_t pipe = 0xF0F1F2F3F4LL; //идентификатор передачи данных.
08 RF24 radio(9, 10); //указываем пины подключения передатчика.
09 OneWire oneWire(2); //указываем пины для подключения датчика ds18b20.
10 DallasTemperature ds(&oneWire); //активируем библиотеку ds.
11
12 DeviceAddress sensor = {0x28, 0xFF, 0x68, 0x6A, 0x84, 0x16, 0x5, 0x69}; //адрес датчика.
13
14
15 void setup(){
16 Serial.begin(9600);
17 ds.begin(); //запускаем функцию считывания температуры ds.
18 radio.begin(); //делаем инициализацию.
19 delay(2); //ждем реакции модуля передачи данных.
20 radio.setChannel(5); // канал для передачи данных (0-127).
21 radio.setDataRate(RF24_1MBPS); //указываем на какой скорости будут общаться модули.
22 radio.setPALevel(RF24_PA_HIGH); //указываем мощность передатчика.
23 radio.openWritingPipe(pipe); // открываем трубу на передачу.
24 }
25
26
27 void loop(){
28 ds.requestTemperatures(); // считываем температуру с датчика
29 float data ; //создаем массив
30 data = float(ds.getTempC(sensor)); //присваиваем значению массива данные с sensor (за один раз можно отправить до 32 байт).
31
32 radio.write(&data, sizeof(data)); // передаем массив и его размер.
33
34 Serial.println(data); //выводим данные в сериал порт для проверки.
35 Serial.println(); //пробел.
36 delay(500); //ждем пол секунды.
37 }
подскажите, где я накосячил. В монитор порта через каждые полсекунды выдает число 127 и все.
Перед загрузкой я дублирующие номера строк убирал