Aktualizace promenne jinde nez v loop
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Aktualizace promenne jinde nez v loop
Zdravim vas, potreboval bych poradit s problemem... klasicka - aktualizace cidla dht22 ve slozce loop (teplota=dht.readTemperature() ) mi nefunfuje s e-paper s castecnym obnovenim displeje. Pokud mam toto ve smycce, tak se mi prestane castecne prekreslovat displej (fuul prekresleni jde). Potreboval bych nejak vymyslet, jak aktualizovat tuto hodnotu z dht v setup njlepe. Nevite nekdo zda by to slo ? Dekuji za odpovedi
Re: Aktualizace promenne jinde nez v loop
Dobry den! Bohuzel, nerozumim vasim otazce zcela. Zda se, ze hovorite o problemu s aktualizaci teploty z cidla DHT22 a zobrazovani na displeji, ktery castecne obnovuje. Je mozne, ze problem spoji s omezenymi prostredky procesoru nebo jinymi omezenimi ve vase aplikaci.
Zkuste zkontrolovat, zda pouzivate spravne knihovny pro cidlo a e-papir. Pokud pouzivate knihovny od ruznych vyvojaru, mohou byt nekompatibilni a zpusobovat problemy. Pokud pouzivate pouze jednu knihovnu, zkontrolujte, zda je aktualizovana a zda ji pouzivate spravne.
Dalsi moznosti by mohly zahrnovat snizeni rozliseni obrazovky, co by mohlo pomoci uvolnit nektere zdroje procesoru pro aktualizaci cidla. Take byste mohli zkusit pouzit nejake optimalizace kodu, aby byl co nejefektivnejsi.
Pokud nejste schopen vyresit problem s aktualizaci cidla v cyklu, muzete zkusit aktualizaci v jinem vlaknu, nebo zkusit pouzit preruseni. Nicmene, toto by mohlo byt slozitejsi a mene spolehlive reseni.
V kazdem pripade by bylo nejlepsi si prozkoumat podrobnosti o problemu a zkuste ruzna reseni, abyste zjistili, co nejlepe funguje pro vas konkretni pripad. Doufam, ze vam to pomuze a pokud mate dalsi otazky, nevahajte se zeptat!
Zkuste zkontrolovat, zda pouzivate spravne knihovny pro cidlo a e-papir. Pokud pouzivate knihovny od ruznych vyvojaru, mohou byt nekompatibilni a zpusobovat problemy. Pokud pouzivate pouze jednu knihovnu, zkontrolujte, zda je aktualizovana a zda ji pouzivate spravne.
Dalsi moznosti by mohly zahrnovat snizeni rozliseni obrazovky, co by mohlo pomoci uvolnit nektere zdroje procesoru pro aktualizaci cidla. Take byste mohli zkusit pouzit nejake optimalizace kodu, aby byl co nejefektivnejsi.
Pokud nejste schopen vyresit problem s aktualizaci cidla v cyklu, muzete zkusit aktualizaci v jinem vlaknu, nebo zkusit pouzit preruseni. Nicmene, toto by mohlo byt slozitejsi a mene spolehlive reseni.
V kazdem pripade by bylo nejlepsi si prozkoumat podrobnosti o problemu a zkuste ruzna reseni, abyste zjistili, co nejlepe funguje pro vas konkretni pripad. Doufam, ze vam to pomuze a pokud mate dalsi otazky, nevahajte se zeptat!
Testovaci odpoved pomoci umele inteligence "ChatGPT / openAI".
https://chat.openai.com/
https://chat.openai.com/
Re: Aktualizace promenne jinde nez v loop
Klasika, bez kódu se tu moc nehneme. Knihovny jsou součástí programu a bylo by taky dobré vědět které knihovny používáš. Setup je část programu, která se spouští vždy jen jednou a vždy před loopem, takže tam k aktualizaci ani dojít nemůže.
Re: Aktualizace promenne jinde nez v loop
Kód: Vybrat vše
[code]
#include <GxEPD2_BW.h> // including both doesn't use more code or ram
#include <Fonts/FreeMonoBold9pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
//#include <Fonts/DSEG14_Classic_Bold_60.h>
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Arduino.h>
#include"DHT.h"
#define DHTPIN 27
#define DHTTYPE DHT22
float teplota;
DHT dht(DHTPIN, DHTTYPE);//dht22
//displej zacatek
#define USE_HSPI_FOR_EPD
#define ENABLE_GxEPD2_GFX 0
#define GxEPD2_DISPLAY_CLASS GxEPD2_BW
#define GxEPD2_DRIVER_CLASS GxEPD2_750_T7 // GDEW075T7 800x480, EK79655 (GD7965)
#define GxEPD2_BW_IS_GxEPD2_BW true
#define IS_GxEPD(c, x) (c##x)
#define IS_GxEPD2_BW(x) IS_GxEPD(GxEPD2_BW_IS_, x)
#if defined(ESP32)
#define MAX_DISPLAY_BUFFER_SIZE 65536ul // e.g.
#if IS_GxEPD2_BW(GxEPD2_DISPLAY_CLASS)
#define MAX_HEIGHT(EPD) (EPD::HEIGHT <= MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8) ? EPD::HEIGHT : MAX_DISPLAY_BUFFER_SIZE / (EPD::WIDTH / 8))
#endif
GxEPD2_DISPLAY_CLASS<GxEPD2_DRIVER_CLASS, MAX_HEIGHT(GxEPD2_DRIVER_CLASS)> display(GxEPD2_DRIVER_CLASS(/*CS=*/ 15, /*DC=*/ 27, /*RST=*/ 26, /*BUSY=*/ 25));
#endif
#if defined(ESP32) && defined(USE_HSPI_FOR_EPD)
SPIClass hspi(HSPI);
#endif
//displej konec
void setup()
{
//displej zacatek
// *** speciální manipulace pro desku ovladače Waveshare ESP32
#if defined(ESP32) && defined(USE_HSPI_FOR_EPD)
hspi.begin(13, 12, 14, 15); // remap hspi for EPD (swap pins)
display.epd2.selectSPI(hspi, SPISettings(4000000, MSBFIRST, SPI_MODE0));
#endif
// *** konec speciální manipulace pro desku ovladače Waveshare ESP32
display.init(115200);
Serial.begin(9600);
dht.begin(); // inicializace cidla DHT
}
void loop() {
stranka();
delay(5000);
teplota = dht.readTemperature();
obnoveni();
delay(5000);
}
void stranka() {
display.init;
display.setRotation(0);
display.setFont(&FreeMonoBold24pt7b);
display.setTextColor(GxEPD_BLACK);
display.setFullWindow();
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
display.setCursor(300, 200);
display.print("ahoj");
}
while (display.nextPage());
}
void obnoveni() {
display.setRotation(0);
display.setFont(&FreeMonoBold24pt7b);
display.setTextColor(GxEPD_BLACK);
display.setPartialWindow(290, 100, 200, 110);
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
display.setCursor(300, 200);
display.print(teplota);
}
while (display.nextPage());
delay(1000);
}
tady je kod. proste kdyz se pred castecnym obnovenim aktualizuje promenna teplota, nasledne se neprovede castecna aktualizace epaper. Probehne, jen kdyz dam na zacatek void obnoveni - display init... ale pak neprobehne castecna aktualizace, ale uplna celeho displeje. Aktualizace promenne (teplota) nejak ukonci displey init. Pokud necham promennou teplota v setup tak vse funguje, ale teplota se samozrejme neaktualizuje
Re: Aktualizace promenne jinde nez v loop
Tak uz jsem na to prisel mam E-Paper ESP32 Driver Board od waveshare a k nemu je pripojen displej pres pin17 (mimo jine) a na ten samy pin jsem mel cidlo . Takze vyreseno a dekuji
Re: Aktualizace promenne jinde nez v loop
A jeste jedna vec me trapi, nacitam hodnoty z Thiengspeak do esp32 a zobrazuji na epaper... problem je v tom, ze hodnoty se mi nacitaji jen jako cela cisla i kdyz dam promennou typu float (nacte se na setiny, ale jsou vzdy dve nuly). Nevi nekdo, jak cist data z Thiengspeak alespon na desetiny? Dekuji
Re: Aktualizace promenne jinde nez v loop
Nevim jak je nacitas ty ale ja mam udelany tohle https://www.arze.cz/thingspeak_LED_read.htmla v pohode i desetiny
https://arze.cz - ARduino Zapojení Elektronika
Re: Aktualizace promenne jinde nez v loop
Dekuji Diego, pomohls ... ja volal ThingSpeak.readLongField misto ThingSpeak.readFloatField
Dekuji moc
Dekuji moc
-
- Příspěvky: 1033
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Aktualizace promenne jinde nez v loop
Tato diskuze byla zase typickou ukázkou, jak by to nemělo vypadat.
Tazatel klade otázky, ale není schopen sdělit elementární podmínky, za kterých jeho problémy vznikly. Člověk může jen hádat.
Ale Maros se určitě polepší
Jen bych dodal, že připojovat čidlo DHT k čemukoliv, natož pak k ePaper displeji, je mrhání úsilím i prostředky.
Nechápu, jak může být takový hrozný shit tak oblíbený.
Tazatel klade otázky, ale není schopen sdělit elementární podmínky, za kterých jeho problémy vznikly. Člověk může jen hádat.
Ale Maros se určitě polepší
Jen bych dodal, že připojovat čidlo DHT k čemukoliv, natož pak k ePaper displeji, je mrhání úsilím i prostředky.
Nechápu, jak může být takový hrozný shit tak oblíbený.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti