Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   863 / 863
(#) morgo válasza morgo hozzászólására (») Jún 13, 2025 /
 
Sziasztok! Megvan a megoldás az ST7735 lcd villogásának megszüntetésére. Talán hasznát veszi valaki. A változó karakterek miatt nem kell törölni a képernyőt, csak a betűszín megadásakor a háttérszínt is meg kell adni. Így amikor frissíti a karaktereket, azok háttere is frissül. Mivel nem az egész képernyőre vonatkozik, így nincs villogás, vibrálás.
Jelen esetben fehér a háttér, tehát fehér színt adok meg a betű hátterének.
Az 5. sor a lényeges.
  1. tft.setCursor(10, 75);
  2. tft.setTextColor(ST77XX_BLACK);
  3. tft.setTextSize(2);
  4. tft.print("Meres:");
  5. tft.setTextColor(ST77XX_RED, ST77XX_WHITE);
  6. tft.println(voltage, 3);
A hozzászólás módosítva: Jún 13, 2025
(#) kameleon2 válasza morgo hozzászólására (») Júl 7, 2025 /
 
Én megpróbálnám más libbel is. Némelyik használhatatlan. A chatgpt sokat tud segíteni az ilyen hibák felderítésében.
(#) morgo válasza kameleon2 hozzászólására (») Júl 7, 2025 /
 
Szerintem ez így jól használható, egyszerű. Azt elfelejtettem írni, hogy az Adafruit libjét használom.
(#) proli007 válasza morgo hozzászólására (») Júl 7, 2025 /
 
Hello! "Adafruit libjét használom" Na itt van a kutya elásva, mert a másik lib-nél akkor is villog, ha a betűháttér színét megadod.
(#) kobold333 hozzászólása Aug 28, 2025 /
 

Monitor programot keresek

Monitor programot keresek. Tudom, hogy az Arduino rendelkezik monitor kapcsolattal, de olyat keresek, amelyik kiírja az állandó szöveget, és utána folyamatosan írható a változó érték, vagy szöveg. Az állandó soremelés, és minden újra írás felesleges figyelem és megállítást igényel...
Pl. Motor áram: 210mA, Távolság: 110mm. stb... A Processing kicsit bonyolult ehhez a feladathoz. Köszönöm a segítséget.
(#) tki válasza kobold333 hozzászólására (») Aug 28, 2025 /
 
Ehhez terminál-emuláció kell, ami annyit jelent, hogy a "monitorprogram" képes kell legyen vezérlőkaraktereket, ún. ESC-szekvenciákat feldolgozni. Ezek nem jelennek meg, de pl. visszateszik a kurzort egy sorral feljebb minden kiírás után, vagy akár szép színeket is beállíthatsz vele. Persze neked ezeket a vezérlőkaraktereket is ki kell íratni a firmware-edből.

Tehát a kiírásaid a programodból olyanok lesznek, hogy a szöveg elé-közé ilyen parancsokat kell betenned: az ESC kódja (ami a 0x1b) megfelelő formában, aztán néhány más karakter. Pl.: a sor elejére való visszaugrás kódja: "\x1b[2K\r"

\x1b = ESC (0x1B hexában),
[2K = teljes sor törlése,
\r = kurzor a sor elejére.

Ezzel a módszerrel már ki lehet írni valamit ugyanabba a sorba, de nem csak teljes sortörléssel lehet célt érni, ez csak példa volt. A kódok táblázata pl. itt megtalálható (görgetni kell egy kicsit): https://en.wikipedia.org/wiki/ANSI_escape_code

Programból sokféle akad, ami ismeri ezt, Windows-hoz hirtelen csak a Tera Term és a Putty jut eszembe. Mindkettő aktív állapotú, fejlesztik és karbantartják, és nyílt forrású. A Tera Term nagyon jó, a Putty egy elterjedt és igen jól beállítható eszköz, de abban a soros vonal használata csak másodlagos, TCP/IP-hez készült, így nem a legkényelmesebb.
A hozzászólás módosítva: Aug 28, 2025
(#) tki válasza tki hozzászólására (») Aug 28, 2025 /
 
Én is rákerestem: állítólag az MS alkalmazásboltjából letölthető, a Win 11-ben pedig eleve telepített Windows Terminal is fejlesztve lett, az is boldogul az ESC-szekvenciák megjelenítésével. Én most ki nem próbálom, bocsánat, amúgy sincsenek jó emlékeim a régi beépített terminálról, azt csak elkerülni volt érdemes. : -)
(#) kobold333 válasza tki hozzászólására (») Aug 28, 2025 /
 
Köszönöm a hozzászólást.
Azt még nem próbáltam ki, hogy az arduino program miként fordítja le a kódot. Bár amint látom, elég nehéz lenne ezt a formulát alkalmazni.
Nagy vonalakban ilyenre gondolnék. Van kb10 sor, soronként 10-20 karakter lehetőség a szöveghez, és utána a mért eredmény. A szöveget nem kellene mindig kiírnom, csak a mérést. Gondolok valamilyen kódra, amivel megadom a hasznos monitor méretét, aztán a karakterek helye ebben a méretben lenne. A szín már csak hab a tortán. Hasonlóan a Processinhez. Tudom, hogy régen valaki megadott egy file nevet, ilyen programhoz, de az már eltűnt a gépemről, miután a HDD megadta magát
A puttyit már próbáltam, de csak felbosszantott, nem jutottam előre. Vagy csak ügyetlenkedtem.
(#) tki válasza kobold333 hozzászólására (») Aug 28, 2025 / 2
 
Szívesen. Szóval van egy soros adatfolyamod, vagyis ha kiküldesz egy karaktert a soros vonalon, azt a monitor a következő pozícióban jeleníti meg, és ha a sor végére ér, akkor folytatja a következő sorban. Ezt kell megtörni, és ezt csak speciális karaktersorozatokkal lehet.

Ilyen szempontból a "kocsi vissza" és "új sor" is speciális karakterek, a \r és \n is vezérlőkód, amiket bizonyára magad is használsz. Vagy a println függvény eltakarja, azért nem tudsz róla, de az maga is pont ezeket a karaktereket adja hozzá a kiírandó szöveghez (vagy csak a másodikat, ez most nem számít)... Tehát az ESC kódokban igazából semmi extra sincs. Elsőre minden bonyolultnak tűnik, de tényleg nem olyan nagy ügy.

Az ESC szekvenciában, amit mutattam, egyedül a \ ("visszaper") karakterrel keződő ASCII karakterkód megadása jelenthet gondot, vagyis furcsa első ránézésre. Egy C vagy C++ programban a printf formázásában ezt pont így kell leírni, és persze hexa számról van szó (\x1b == 0x1b == 27 == az ESC karakter kódja).

Tehát egyszerűen ki kell íratnod a következő stringet a monitorra, és az ezt követő kiírásod, szöveged ugyanabba sorba fog kerülni, vagyis kötött pozícióba. Aztán ezt a módszert lehet finomítani soron belüli pozíciókra is. Hogy van-e valami library, ami megteszi ezeket helyetted és eltakarja a kódokat, és pl. eleve koordinátákat lehet megadni neki, hogy hova tegye a következő kiírást, azt nem tudom - elképzelhető, hogy csak keresni kell.

Arduino-ban:
Serial.print("Egy szöveg");
Serial.print("\x1b[2K\r");
Serial.print("az érték");

C könyvtári függvénnyel (a referencia kedvéért):
printf("\x1b[2K\r");

Persze finomítani kell, hogy legyen pl. kettőspont és szóköz az ESC szekvencia végén, csak elbonyolítja a példát, de itt van az is:
int a_változó = 10;
Serial.print("Egy szöveg\x1b[2K\r: %d", a_változó);
a_változó = 6;
Serial.print("Egy szöveg\x1b[2K\r: %d", a_változó);

Nem próbáltam ki, úgyhogy lehetnek tévedések. Ilyesmit az AI-ok gyorsan megírnak neked ("a szekvencia állítsa a kurzort a 13, 15-ös pozícióba"), már a vezérlőkódokat sem kell keresgélned a wikiben. Ez is így készült:

Serial.print("\x1b[13;15H");
Serial.print("Hello!");
Serial.print("\x1b[13;15H");
Serial.print("Hello!");
Serial.print("\x1b[13;15H");
Serial.print("Hello!");

Itt törlés nincs, de a "Hello!" mindig ugyanoda lesz kiírva, így csak egyszer fog csak látszani. Persze csak a Tera Term-ben és társaiban.
A hozzászólás módosítva: Aug 28, 2025
(#) tki válasza tki hozzászólására (») Aug 28, 2025 /
 
Na, ezt csak elbénáztam:

Arduino-ban:
Serial.print("Egy szöveg");
Serial.print("\x1b[2K\r");
Serial.print("az érték");


helyette ez a jó:

Serial.print("Egy szöveg");
Serial.print("az érték");
Serial.print("\x1b[2K\r");

És ezt ismételgetve ugyanabba a sorba kerül a "szöveg" és az "érték" újra és újra - az egyszerűség jegyében szóköz meg értékek nélkül. Ezt bontottam ki jobban az ezt követő példákkal.
A hozzászólás módosítva: Aug 28, 2025
(#) kobold333 válasza tki hozzászólására (») Aug 29, 2025 / 1
 
Köszönöm a részletes leírást. Hazaérek a munkából, kipróbálom...
(#) kobold333 válasza tki hozzászólására (») Aug 29, 2025 /
 
Próba meg volt. A szöveget egymás után írta. A "[2K" parancsot is írta, ez nem tetszett neki.
(#) tki válasza kobold333 hozzászólására (») Aug 29, 2025 /
 
Végül is mit telepítettél a monitorozáshoz?
(#) kobold333 válasza tki hozzászólására (») Aug 30, 2025 /
 
Csak Arduino fut a háttérben. Nem foglalkozik a parancsokkal, de nem áll hibára sem.
(#) tki válasza kobold333 hozzászólására (») Aug 30, 2025 / 1
 
Attól volt szó, hogy az Arduino saját monitorprogramja nem képes a vezérlőkarakterek feldolgozására (és egyben elrejtésére), ezért jelennek meg rajta.

Visszaolvastam, látom, nem hangsúlyoztam külön, hogy _csak_ úgy fog működni, egy külső programmal, pl. a Tera Term-mel, de te azzal nyitodtad ezt a threadet, hogy "monitorprogramot keresek", ezért vettem természetesnek, hogy másikat fogsz használni, nem az Arduino sajátját. : -)

Amúgy ha leírást adsz, mindig írj pontosabb alanyt is a mondatokba, ill. hogy mi, mivel, hogyan történik, mert így nehéz kitalálni, bár ez most egyelőre egyszerűnek tűnik. : -)
(#) kobold333 válasza tki hozzászólására (») Aug 30, 2025 /
 
Hmm. Igaz, másik programot kell használnom, hiszen nincs leírása az Arduinonak, hogy felismer más parancsot. Megkeresem a TeraTerm programot, és próba lesz. Köszönöm. Remélem, tényleg egyszerű lesz.
(#) Kera_Will válasza kobold333 hozzászólására (») Aug 31, 2025 /
 
Lehet inkabb a lapdobas ESC szekvenciat hasznald .

Igen vmikor en is belefutottam ebbe zavart a println fuggvenyek terminalban futo orult scrollozasa mikor en egy allando fix "tablazatot" szerettem volna latni.
Kb 8 10 sor es 2 3 oszlopot irtam be print es println sorolbol reszben ugyesen "zonazva" a kirando 3 4 karaktert foglalo ertekekre is ugyelve ... kicsit tobb szokozt dobtam be ... ( persze van kurzor pozicionalo escape is ) .

A lenyeg az eredmenyek kiiratasat vegzo sorok utani utolsonak kiadott egyetlen lapdobas szekvencia !.

Ekkor magatol" cls " (clearscreen) lesz es balfelso sarokban kezd a kurzor irni mindet az utolso sor jobb also sarkaig majd "ures lapot dob" es kezdi bal fent az irast.

Ardu "buta" terminaljaban is mukodik"
Aszem #escape szekvencia decimalis erteke kell a write() fuggvenynek.
Bocs kicsit keveredik a C es Ardu szintaktika bennem !
(#) Kera_Will válasza Kera_Will hozzászólására (») Aug 31, 2025 /
 
Form feed ascii 12 lapdobas ...

  1. Serial.write(12); // biztosan a form feed ASCII karaktert küldi ki


"Pörgős" kódrészlet mintának lapdobasra

  1. int a = 0, b = 10, c = 20, d = 30, e = 40;
  2.  
  3. void setup() {
  4.   Serial.begin(9600);
  5.   delay(1000); // kis várakozás indulásnál
  6. }
  7.  
  8. void loop() {
  9.   // Frissítés előtt képernyő törlése (lapdobás)
  10.   Serial.write(12);  // ASCII 12 = form feed
  11.  
  12.   // Kiírás
  13.   Serial.print("a: "); Serial.println(a);
  14.   Serial.print("b: "); Serial.println(b);
  15.   Serial.print("c: "); Serial.println(c);
  16.   Serial.print("d: "); Serial.print(d); Serial.print(", e: "); Serial.println(e);
  17.  
  18.   // Változók frissítése (csak hogy változzanak a számok)
  19.   a++;
  20.   b += 2;
  21.   c += 3;
  22.   d += 4;
  23.   e += 5;
  24.  
  25.   delay(1000); // 1 másodpercenként frissítés
  26. }


Talan ez segit ...
Ardusorosmonitorban van 1 2 pipa auto CR meg LF re ezremlik.

Masik minta :
  1. void setup() {
  2.   Serial.begin(9600);
  3.   delay(1000);
  4.  
  5.   Serial.println("a: 10");
  6.   Serial.println("b: 20");
  7.   Serial.println("c: 30");
  8.   Serial.println("d: 40, e: 50");
  9.  
  10.   // Lapdobás (form feed) különböző módokon:
  11.   Serial.print("\f");        // vagy
  12.   // Serial.write(12);       // vagy
  13.   // Serial.write(0x0C);     // vagy
  14.   // Serial.write('\f');     // mind ugyanaz
  15. }
  16.  
  17. void loop() {
  18.   // nincs további teendő
  19. }


Remelem segit a lapdobas.

Teheted az elejere is ha ugy kevesbe villog a sorosterminal.

Segithet
A hozzászólás módosítva: Hé, 5:34
Moderátor által szerkesztve
(#) kameleon2 válasza kobold333 hozzászólására (») Hé, 12:50 /
 
Én egy Hterm nevű programot használok - elég jó. Ez tud sorozatos küldéseket is, de lehet egyedi a küldés. Elég sok féle kódolással. Modbus tesztekhez is elég jó volt.
Következő: »»   863 / 863
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem