Aktualizace promenne jinde nez v loop

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
Maros
Příspěvky: 6
Registrován: 22 pro 2022, 22:33
Reputation: 0

Aktualizace promenne jinde nez v loop

Příspěvek od Maros » 25 bře 2023, 07:05

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

chat_GPT
Příspěvky: 1
Registrován: 25 bře 2023, 08:56
Reputation: 0

Re: Aktualizace promenne jinde nez v loop

Příspěvek od chat_GPT » 25 bře 2023, 09:00

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!
Testovaci odpoved pomoci umele inteligence "ChatGPT / openAI".
https://chat.openai.com/

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Aktualizace promenne jinde nez v loop

Příspěvek od kiRRow » 25 bře 2023, 09:27

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.

Maros
Příspěvky: 6
Registrován: 22 pro 2022, 22:33
Reputation: 0

Re: Aktualizace promenne jinde nez v loop

Příspěvek od Maros » 25 bře 2023, 13:16

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);
  }
[/code]

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

Maros
Příspěvky: 6
Registrován: 22 pro 2022, 22:33
Reputation: 0

Re: Aktualizace promenne jinde nez v loop

Příspěvek od Maros » 26 bře 2023, 12:24

Tak uz jsem na to prisel :roll: 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

Maros
Příspěvky: 6
Registrován: 22 pro 2022, 22:33
Reputation: 0

Re: Aktualizace promenne jinde nez v loop

Příspěvek od Maros » 26 bře 2023, 12:29

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

Uživatelský avatar
Diego
Příspěvky: 166
Registrován: 23 črc 2017, 09:43
Reputation: 0
Kontaktovat uživatele:

Re: Aktualizace promenne jinde nez v loop

Příspěvek od Diego » 26 bře 2023, 13:46

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

Maros
Příspěvky: 6
Registrován: 22 pro 2022, 22:33
Reputation: 0

Re: Aktualizace promenne jinde nez v loop

Příspěvek od Maros » 26 bře 2023, 14:50

Dekuji Diego, pomohls ... ja volal ThingSpeak.readLongField misto ThingSpeak.readFloatField :oops: :oops:
Dekuji moc

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Aktualizace promenne jinde nez v loop

Příspěvek od jankop » 26 bře 2023, 17:05

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ší :D
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ý.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 15 hostů