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   850 / 850
(#) MATA válasza MATA hozzászólására (») Nov 1, 2024 /
 
Illetve nem jól írtam nem megváltoztattuk ezeket a sorokat hanem ezeket írtuk be a PWM illetve a PID értékek kijelzése helyett!
(#) MATA válasza MATA hozzászólására (») Nov 1, 2024 /
 
Az eredeti kijelzés így nézett ki:
(#) pipi válasza MATA hozzászólására (») Nov 1, 2024 / 1
 
Nem lehet hogy egy eløző kiírás eredménye maradt ott? Firi hogy aértékegység hol felül, hol az eredmény után van
(#) MATA válasza pipi hozzászólására (») Nov 1, 2024 /
 
Köszi erre már gondoltunk de nem találtunk erre utaló jelet.
(#) gaspa válasza gaspa hozzászólására (») Nov 1, 2024 / 1
 
Sikerült szóra bírni az SML II invertert,megvannak a napelem és az akku adatai.A hálózat adatait három JSY 194 adja,az inverter meg rs485-el.Az R fázison van a hibrid 14 kWh akkuval,az S,T fázisokon két EHE visszatáplálós inverter.A monitoron jól látható mi történik a hálózaton,a valós fogyasztás/MVM vételezés különbsége és a betáplálás.A hibrid alaposan csökkenti az MVM vételezést,de visszatáplálósoknál kis odafigyeléssel is eredményes.A szenzorok és rs485 kezelést a pincében az inverterek mellett egy Mega 2560 végzi,az adat feldolgozást három szinttel feljebb(30 m kábel után)ESP32 a monitorral.Az volt a cél,mennyi felesleges energiát lehet elvenni a napelemektől más hasznosításra,mint a visszatáplálás.A következő cél ennek megvalósítása lesz.
(#) sargarigo válasza MATA hozzászólására (») Nov 1, 2024 / 1
 
A mért érték amúgy jó lenne? Nem mindegy hogy csak a kijelzéssel van baj, vagy valami komolyabb a hiba. Elsőre én is valami maradékra gondolnék, de ennek azért vannak jelei is ha úgy van (bent maradt pixelek pl). Ha a kijelzett érték amúgy rendben van, én megpróbálnék egy nulla bájtot beírni a txt megfelelő pozíciójára. Elvileg ezzel jelzed hogy vége a szövegnek, ne írja tovább a képernyőre. Ha a kijelzett érték amúgy sincs rendben, akkor az is lehet hogy a számításkor keletkezik valami hiba, ami miatt nem jól működik a megjelenítés, mondjuk végtelen, vagy nullával való osztás vagy ilyesmit tudnék elképzelni. A számolt érték helyett szerintem első körben írj be egy fix értéket, mondjuk 5-öt. Ha ez jó, akkor 5.7-et. Az se baj ha a mért értéket kiírod a soros konzolra, és rögtön látod hogy legalább ugyanazt próbálja kiírni amit kell, vagy teljesen félre megy. Szerintem ebből a pár lépésből rögtön le lehet szűkíteni a hiba helyét.
(#) MATA válasza sargarigo hozzászólására (») Nov 1, 2024 /
 
A mért érték vagyis a teljesítmény és az ellenállás kiszámítása az jó csak annyi hogy sok számot jelenít meg.
De ezeket a javaslatokat megnézzük köszönöm!
(#) MATA válasza sargarigo hozzászólására (») Nov 2, 2024 / 1
 
Jó lett ám négy számjegyet engedéjeztünk majd 0-t írtunk be és most jó lett a kijelzés!
Köszönöm az ötletet!
A hozzászólás módosítva: Nov 2, 2024
(#) sargarigo válasza MATA hozzászólására (») Nov 2, 2024 /
 
Nagyon szívesen!
(#) nemgyuri hozzászólása Nov 13, 2024 /
 

kód kérdés

Sziasztok! Egy egyszerű dolgon nem tudok továbblépni.
1 bájtos számot szeretnék kijeleztetni VFD-n. A szám 0-99-ig lehet, ezt a következő módszerrel próbáltam:
  1. byte sec;
  2. String str(3);
  3.          str=String(sec);
  4.          Serial.print("str[0]="); Serial.print(str[0]);Serial.print(" str[1]=");Serial.println(str[1]);

(a Serial.print... csak a teszthez kell.
Decimális 10-99 -ig rendben van, de 0-9-ig a szám nekem az str[0]-ban jelenik meg.
Nekem arra lenne szükségem, hogy az str[0]-ban "0" legyen és az str[1]-ben a szám. (Ilyenkor az str[1]-ben a string-lezáró hex0-van, ezért azt már nem tudom írni!
Valami használható megoldást keresek.
(#) KBal76 válasza nemgyuri hozzászólására (») Nov 13, 2024 /
 
Zavaros ez a kód, és évek óta nem írtam arduinora, de hátha segít: elôször eldöntöd hogy 10 alatt vagy, akkor csinálsz egy feltételt erre, azaz
  1. if (sec<10) {
  2. sec=sec+10;
  3. utána kirakod hogy a tizes helyiérték kijelzôre nulla kerüljön (miközben valójában 1 kerülne a tízzel növeléstôl;
  4. utána kirakod az utolsó számjegyet ami 0-9-ig valami;
  5. //vagy esetleg eleve beteszed a stringbe a számot, és az tizes helyiértéket felülírod egy 0-val
  6. }
  7. else
  8. {
  9. itt kezeled le ha 10-99 közt van a számod.
  10. }
A hozzászólás módosítva: Nov 13, 2024
(#) Panhard válasza nemgyuri hozzászólására (») Nov 13, 2024 /
 
A String az egy karakter tömb. Nem kell létrehoznod hozzá egy másik tömböt, ki tudod közvetlenül is olvasni a bájtokat.
  1. Serial.print(String(sec)[0]);
(#) majkimester válasza nemgyuri hozzászólására (») Nov 13, 2024 / 2
 
Erre rengeteg megoldás van, a esetedre a legegyszerűbb:

  1. byte sec = 12;
  2. char digit0 = '0' + sec % 10;
  3. char digit1 = '0' + sec / 10;
(#) nemgyuri válasza majkimester hozzászólására (») Nov 13, 2024 /
 
Ez a megoldás szimpatikus volt, de:
  1. for (i=0; i<15; i++){
  2. sec=i;
  3.    char digit0= + sec%10;
  4.     char digit1='0' + sec/10;
  5.     Serial.print(" digit0=");Serial.print(digit0);Serial.print(" digit1="); Serial.println(digit1);
  6. }

Ezzel teszteltem és erre ezt írta ki:
digit0= digit1=0
digit0= digit1=0
digit0= digit1=0 <-- eddig "sec<dec10"
digit0= digit1=1
digit0= digit1=1 <-- innen "sec>dec10"
digit0= digit1=1
(#) nemgyuri válasza KBal76 hozzászólására (») Nov 13, 2024 /
 
Ehhez hasonlóval próbálkoztam, de az szerintem túl hosszú volt. Több számot is szeretnék kiírni, ezért egy "alprogramba" képzeltem el a megoldást.
(#) Panhard válasza nemgyuri hozzászólására (») Nov 13, 2024 /
 
És így:
  1. for (int i=0; i<20; i++){
  2.  
  3.       char digit0;    
  4.       char digit1;
  5.  
  6.       if(i<10){
  7.         digit0= '0';
  8.         digit1= String(i)[0];
  9.       }else{
  10.         digit0= String(i)[0];
  11.         digit1= String(i)[1];
  12.       }
  13.  
  14.       Serial.print("digit0= ");Serial.print(digit0);Serial.print(" digit1= "); Serial.println(digit1);
  15.  
  16.     }
(#) nemgyuri válasza Panhard hozzászólására (») Nov 13, 2024 /
 
Köszönöm, ez már működik! Azt nem tudtam, hogy így is lehet: "digit1= String(i)[0];"
(Arduino "C" nem az én világom, assemblyvel elvagyok..)
(#) majkimester válasza nemgyuri hozzászólására (») Nov 14, 2024 / 2
 
Az Arduino-ban az a jó, hogy bárki könnyen összedobhat egy programot mások által megírt könyvtárak segítségével.

Az Arduino-ban az a rossz, hogy bárki könnyen összedobhat egy programot mások által megírt könyvtárak segítségével anélkül, hogy rá lenne kényszerítve, hogy megértse mi is zajlik a háttérben.

Noha a String(i) használata működik, de egyáltalán nem hatékony.
Miért is?

Nézzük az alábbi kódrészt:
  1. digit0= String(i)[0];
  2. digit1= String(i)[1];


Első probléma, hogy 2 példányt is keletkezik a String-ből, ami két konverziót, 2x-es memóriafoglalást jelent. A String(i)-t ki lehet emelni egy változóba, akkor máris csak fele:

  1. String str = String(i);
  2. digit0= str[0];
  3. digit1= str[1];


De itt is van egy jelentős overhead-je a String használatának:

2 byte memória a digit0 és digit1-nek a stack-en
6 byte memória a String adattagjainak a stack-en
18 byte a int konvertálására a stack-en
Ez 26 byte az egyébként is szűkös 2048-ból (az eredeti példában a duplája), és nincs benne az amit még a String osztály kezeléséhez a fordítónak kell.

Egyébként a String osztály kódját bárki megnézheti, és ajánlom is:
String.cpp
String.h

Nem csinál ez sem mást, mint felhivja az itoa C függvényt, és ezt te is megteheted elkerülve a String osztály használatát, és ezzel nem csak az adat, de a program memória használat is csökken.

  1. int sec = 12;
  2.       char buf[6];
  3.       itoa(sec, buf, 10);
  4.  
  5.       if (i<10) {
  6.         digit0= '0';
  7.         digit1= buf[0];
  8.       } else {
  9.         digit0= buf[1];
  10.         digit1= buf[0];
  11.       }


Egy ilyen egyszerű példánál ez nem számít sokat, de ha valami komolyabbat akarsz csinálni, akkor hamar elfogy a memória ...
(#) nemgyuri válasza majkimester hozzászólására (») Nov 14, 2024 /
 
Köszönöm Neked is! ( Kb ezért szeretem az assembly-t, ott tudom, hogy mit csinálok! )
(#) mnyugger hozzászólása Sze, 21:11 / 1
 

Beszélgettem a mesterséges intelligenciával.

Meggyőzött.
(#) sargarigo válasza mnyugger hozzászólására (») Sze, 22:03 /
 
Azt elhiszem! Szépen összeszedetten fűztétek a témát! Melyik modellt használtad?
(#) mnyugger válasza sargarigo hozzászólására (») Sze, 22:41 /
 
ChatGPT
(#) sargarigo válasza mnyugger hozzászólására (») Csü, 9:31 /
 
A programozás sem megy neki rosszul, de azért erősen kell fogni a kezét. Cserébe minden nyelven (is) tud.
(#) bbatka válasza mnyugger hozzászólására (») Csü, 18:57 /
 
Próbáld ki a szoftvert. Ismerkedtem én is a Chat GPT ezen oldalával. Nem hibamentes a szoftver, amiket készít.
(#) mnyugger válasza bbatka hozzászólására (») 15:33 /
 
Nyilván nem fogom vakon bemásolni az általa írt programot. Nem is adtam meg neki minden paramétert.
Már úton van az FM modul. Ha beválik beépítem egy Vidi RA6363S-be.
Következő: »»   850 / 850
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