Nahodne pixely na OLED
Nahodne pixely na OLED
Ahoj,
mam Nano s Oled dips. 2 cidla dallas pro mereni rozdilovych teplot.
Pri postupnem pridavani kodu se od verze, kdy pouzivam milis a rozhodnuti zda hlavni ci vedlejsi screen zacly objevovat nahodne pixely vpravo dole na disp, kazde 2 vteriny trochu jinak.
Netusi nekdo proc? Je to ovlivnenim milis a I2C nejak?
Dnes jsem pridal do casti zapisu do grafu tone, pro kratke pipnuti pri zapisu hodnoty, a nahodne pixly se rozsirily az pres pismeno C.
Jelikoz se teprve ucim s Arduinem a programovanim v nem, tak kod neni moc hezky a vim ze i mistem plytvam.
Kod je zde:
https://github.com/milhauszn/Rozdilovy- ... isp_v5.ino
Diky za pripadnou radu, ono to funguje, a bude to stacit, jen me to stve ze nevim proc to tak je.
mam Nano s Oled dips. 2 cidla dallas pro mereni rozdilovych teplot.
Pri postupnem pridavani kodu se od verze, kdy pouzivam milis a rozhodnuti zda hlavni ci vedlejsi screen zacly objevovat nahodne pixely vpravo dole na disp, kazde 2 vteriny trochu jinak.
Netusi nekdo proc? Je to ovlivnenim milis a I2C nejak?
Dnes jsem pridal do casti zapisu do grafu tone, pro kratke pipnuti pri zapisu hodnoty, a nahodne pixly se rozsirily az pres pismeno C.
Jelikoz se teprve ucim s Arduinem a programovanim v nem, tak kod neni moc hezky a vim ze i mistem plytvam.
Kod je zde:
https://github.com/milhauszn/Rozdilovy- ... isp_v5.ino
Diky za pripadnou radu, ono to funguje, a bude to stacit, jen me to stve ze nevim proc to tak je.
Re: Nahodne pixely na OLED
Bez přiloženého kódu je to těžké. S největší pravděpodobností se tam vkládá nějaká nedefinovaná hodnota (neinicializovaná proměnná nebo čtení za hranicí pole).
Re: Nahodne pixely na OLED
Kód tam je přiložený (v odkazu).
Já bych v první řadě zkusil, jestli tam ty náhodné tečky nepíšeš nechtěně sám pomocí příkazů drawPixel a drawLine.
Mě se třeba často stává, že mi nějaká proměnná v těch výpočtech přeleze přes rozsah, nebo podteče pod nulu a pak se programy chovají podobně.
Takže bych v prvním pokusu zkusil postupně zakomentovávat následující 4 řádky.
Jestli se po zakomentování jedné z nich přestanou pixely objevovat, tak je problém v té matematice.
Já bych v první řadě zkusil, jestli tam ty náhodné tečky nepíšeš nechtěně sám pomocí příkazů drawPixel a drawLine.
Mě se třeba často stává, že mi nějaká proměnná v těch výpočtech přeleze přes rozsah, nebo podteče pod nulu a pak se programy chovají podobně.
Takže bych v prvním pokusu zkusil postupně zakomentovávat následující 4 řádky.
Jestli se po zakomentování jedné z nich přestanou pixely objevovat, tak je problém v té matematice.
Kód: Vybrat vše
display.drawPixel(127-i, 32-graf[i]/10, SSD1306_WHITE);
display.drawLine(127-3*i, 43-graf[i]/5 , 127-3*(i+1), 43-graf[i+1]/5, SSD1306_WHITE);
display.drawPixel(8+3*(pos-1), 21, SSD1306_WHITE); //kurzor
display.drawLine(7+3*(pos-1), 20, 9+3*(pos-1), 20, SSD1306_WHITE);
Re: Nahodne pixely na OLED
Diky za komentare.
Kod tam opravdu je, bez nej nema smysl posilat dotaz.
Zkusim zakomentovat a.premyslet, nicmene v predchozi verzi jen s hlavni obrazovkou ve smycce to nedelalo, a to jsem tam omylem dostkrat byl za hranici obrazovky (pocitani od nuly do 127 ).
Vzniklo to az pri tom pouziti milis a prekvapilo ze po pridani tone se to zvetsilo.
Kod predchozi verze:
https://github.com/milhauszn/Rozdilovy- ... isp_v2.ino
Kod tam opravdu je, bez nej nema smysl posilat dotaz.
Zkusim zakomentovat a.premyslet, nicmene v predchozi verzi jen s hlavni obrazovkou ve smycce to nedelalo, a to jsem tam omylem dostkrat byl za hranici obrazovky (pocitani od nuly do 127 ).
Vzniklo to az pri tom pouziti milis a prekvapilo ze po pridani tone se to zvetsilo.
Kod predchozi verze:
https://github.com/milhauszn/Rozdilovy- ... isp_v2.ino
Re: Nahodne pixely na OLED
Omlouvám se, nějak mi nedošlo, že ten odkaz je na Tvůj kód a ne na nějaký vzorový příklad
Re: Nahodne pixely na OLED
Kód: Vybrat vše
void vedlobr() {
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.print("1:");
display.print(temp1);
display.print(" R");
display.print(round(rozdil*10.0)/10.0,1);
display.print(" 2:");
display.print(temp2);
display.drawLine(0, 10, 128, 10, SSD1306_WHITE);
display.setCursor(0, 12);
display.print("c: ");
display.print(cas_rozdilu[41-pos]/60.0,1);
display.print(" roz: ");
display.print(graf[41-pos]/20.0);
Re: Nahodne pixely na OLED
Diky za odpoved.
Toho jsem se bal hned pri tvorbe vedlejsi obrazovky, ale pri kompilovani to upozorneni nepise, 0 se ve vedlobr nikdy neobjevi, jelikoz ji volam jen kdyz je pos vic jak 0. Vedlobr je zobrazeni bez chyb, na hlavniobr to stale hazi pixely nahode a pri pouziti tone jich je vic.
Pri psani vedlobr jsem zkusil aj zvetsit pole o jedno, projistotu, ale vse fungovalo stejne, a ted jsem zkusil tyto radky hodit do komentare a nahrat. Pixely nahodne zustaly stale.
Jestli se k tomu dostanu ba delsi cas dnes, zkusit to zkompilovat bez pouziti millis. Ponevadz pri napsani kodu s timto hlidabim casu, to zaclo delat. Aspon si to myslim co si pamatuji.
Toho jsem se bal hned pri tvorbe vedlejsi obrazovky, ale pri kompilovani to upozorneni nepise, 0 se ve vedlobr nikdy neobjevi, jelikoz ji volam jen kdyz je pos vic jak 0. Vedlobr je zobrazeni bez chyb, na hlavniobr to stale hazi pixely nahode a pri pouziti tone jich je vic.
Pri psani vedlobr jsem zkusil aj zvetsit pole o jedno, projistotu, ale vse fungovalo stejne, a ted jsem zkusil tyto radky hodit do komentare a nahrat. Pixely nahodne zustaly stale.
Jestli se k tomu dostanu ba delsi cas dnes, zkusit to zkompilovat bez pouziti millis. Ponevadz pri napsani kodu s timto hlidabim casu, to zaclo delat. Aspon si to myslim co si pamatuji.
Re: Nahodne pixely na OLED
Potenciální problém může být tohle
V přiřazení graf[40] =20* rozdil; máš vlevo typ int a rozdíl je typu float. Asi ti to při kompilaci dává warning, pokud je máš zapnuté. Nevím, jestli je to na 100% ta chyba, ale zkus si nechat do konzole vypisovat hodnoty pole graf, jestli tam nemáš nějaké hausnumera.
Kód: Vybrat vše
if (cas_akt >= cas_predch + 10000) {
cas_predch = cas_akt;
cas_rozdilu[40] = cas_akt/1000;
graf[40] =20* rozdil;
for (int i =0; i<=39; i=i+1){
cas_rozdilu[i]=cas_rozdilu[i+1];
graf[i]=graf[i+1];
}
}
Re: Nahodne pixely na OLED
Diky,
pixely se nahodne meni kazde 2 vteriny, hned od prvniho spusteni, jeste pred prvnim pruchodem cyklu.
Ted jsem zkousel ruzne komentovat a spoustet jen kousky, a ano, v tomto bloku to muze delat.
Pokud narazis na integer pole a float hodnotu, tak problem je v tom, v ze se mi nepodarilo udelat pole float hodnot, proste se boot zasekne a arduino nereaguje, nekde jsem videl napsane ze muze byt jakehokolov datatype. Nicmene i pri pouziti (int) tyto nahodne generovane pixely pokracuji.
Je pravda ze funkce tone je umistnena v teto casti kodu a ta rozsirila mnozstvi pixelu. Jen fakt nevim co v te casti dela problem, nebo je to cela cast?
Nevim proc by mel byt problem. Muzu to klidne napsat do dvou podminek v jednom if, kde pri splneni 2 i 10 sec to udela toto. Ale pak by me.zajimalo proc je toto reseni problem?
pixely se nahodne meni kazde 2 vteriny, hned od prvniho spusteni, jeste pred prvnim pruchodem cyklu.
Ted jsem zkousel ruzne komentovat a spoustet jen kousky, a ano, v tomto bloku to muze delat.
Pokud narazis na integer pole a float hodnotu, tak problem je v tom, v ze se mi nepodarilo udelat pole float hodnot, proste se boot zasekne a arduino nereaguje, nekde jsem videl napsane ze muze byt jakehokolov datatype. Nicmene i pri pouziti (int) tyto nahodne generovane pixely pokracuji.
Je pravda ze funkce tone je umistnena v teto casti kodu a ta rozsirila mnozstvi pixelu. Jen fakt nevim co v te casti dela problem, nebo je to cela cast?
Nevim proc by mel byt problem. Muzu to klidne napsat do dvou podminek v jednom if, kde pri splneni 2 i 10 sec to udela toto. Ale pak by me.zajimalo proc je toto reseni problem?
Re: Nahodne pixely na OLED
Teď nevim, o jaké funkci tone mluvíš. V tom prvním odkazu není v programu nikde použitá.
Pokud se to děje jen ve funkci hlavniobr()
může být asi jedinou příčinou ten poslední řádek display.drawPixel(127-i, 32-graf/10, SSD1306_WHITE);
Zkus ho zakomentovat, nebude se vykreslovat graf a sleduj jestli pixely zmizi. Pokud ano, máš nějaký junk v poli graf[]. Pokud tam budou i nadále, tak fakt nevím.
Pokud se to děje jen ve funkci hlavniobr()
Kód: Vybrat vše
void hlavniobr() {
display.setTextSize(2);
display.clearDisplay();
for (int i = 0; i <=39; i= i+1){ //kresleni grafu maleho a zobrazeni teplot
display.drawPixel(127-i, 32-graf[i]/10, SSD1306_WHITE);
Zkus ho zakomentovat, nebude se vykreslovat graf a sleduj jestli pixely zmizi. Pokud ano, máš nějaký junk v poli graf[]. Pokud tam budou i nadále, tak fakt nevím.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 12 hostů