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   524 / 854
(#) kaqkk válasza JoeA hozzászólására (») Ápr 25, 2019 /
 
Én a menüből kilépéskor mentem a beállított adatokat , de ha fix értékek és sűrűn cserélgetni kell őket akkor jobb megoldás lehet a tömb használata az eeprom helyett
A hozzászólás módosítva: Ápr 25, 2019
(#) JoeA válasza kaqkk hozzászólására (») Ápr 25, 2019 /
 
Csináltam 50 memóriabankot, abba el lehet menteni. Bekapcsoláskor jön egy alap, amivel amúgy is megvizsgálom, hogy ez első indítás (friss install) vagy volt már használatban. Ezt a korábban linkelt projektből állítottam be. Még várok az alkatrészek egy részére, hogy kipróbáljam Úgy döntöttem egyenlőre, hogy nem mentek automatikusan, 51 bank elég kell legyen. (az 51. az alapbeállítás). Majd a próba után eldöntöm, hogy mi legyen vele.
(#) sargarigo hozzászólása Ápr 25, 2019 / 2
 
Az eeprommal én úgy csinálnám, hogy felprogramozáskor törölném a tartalmát (FF értékkel tölteném fel minden bájtját). Attól függően hogy hány bájt egy keret, fognám az első keretet, kiolvasnám hogy minden értéke FF-e. Ha igen, akkor az az első üres keret, lehet írni bele az adatot. Kiolvasáskor szintén megkeresném az utolsó még nem FF tartalmú keretet, és az a keresett adat. Így minden írás új helyre kerül, nem terheled az eeprom bájtjait. Amikor a tárterület végét eléred, akkor megint törlöd az egészet, kezded a legelején. Szerintem így soha nem éred el a bájtonkénti 100k írást.
Főleg ha kombinálod azzal, hogy csak kikapcsoláskor írsz. Olvasni meg ugye tetszőlegesen sokszor lehet.
(#) JoeA hozzászólása Ápr 25, 2019 /
 
Ez az adat átadás/visszaadás fura néha pl: if.... setup() és működik a visszatérő adatokkal, pedig 5 adatot kapok vissza. Akartam, hogy az aktuális menjen a setupba a loopból if...setup(a,b,c,d,e,), át is adja, de vissza ebben az esetben nem kapok semmit, minden 0 lesz. Kínomban kiírattam minden lépés előtt az lcd-re a változót amit vissza várok és a return a; előtt még megvan az adat, de ahová visszatért, megint kiíratom és ott már 0 Ha elhagyom akkor a másik irányba nem megy át Tudom, hogy valamit nem veszek észre, csak még nem tudom, hogy mit Ha esetleg valakinek volna egy ilyesmire linkje, azt szívesen olvasgatnám Nem itt akarom terhelni vele a fórumot, csak akkor jövök ha végképp nem megy!
más:
BigNumbers könyvtárat használ valaki? A 4-es és a 7-es karaktereknél hibádzik és nem jövök rá, hogy mi.
(#) sargarigo válasza JoeA hozzászólására (») Ápr 25, 2019 /
 
A függvény visszatérésekor egyetlen értéket ad vissza. Ha azt közben átnevezed az a te dolgod, őt nem zavarja. Ha több értéket akarsz visszaadni, akkor globális változókon keresztül tudod megtenni.
(#) sargarigo válasza sargarigo hozzászólására (») Ápr 25, 2019 /
 
Ilyenkor azért jó lenne ha példakódot mutatnál, mert lehet hogy csak elírtál valamit.
(#) morgo válasza JoeA hozzászólására (») Ápr 25, 2019 /
 
Ha már kitapasztaltad a jó beállításokat, azokból 4-5 fog kelleni maximum. De ha 10 akkor sem gond. Ezeket fixen beírod egy választható menübe, és nem kell az eepromírással vacakolni.
(#) sargarigo válasza JoeA hozzászólására (») Ápr 25, 2019 /
 
Mellesleg a setup()-ot miért akarod a loop()-ból hívni?
A setup dolga hogy egyszer induláskor elinduljon, aztán átadja a vezérlést a loop-nak. Aztan meg az már magától loop-ol. Ne erőszakold meg
(#) JoeA válasza sargarigo hozzászólására (») Ápr 25, 2019 /
 
Nem rossz!!!
Most első bekapcsoláskor keresi az utolsó bájton, hogy egy általam beállított érték van vagy nem, ha nem akkor nullákkal írom tele a memóriát, mert van ahol a 255 hibás (például be lehet állítani, hogy hány alkalommal menjen végig a hegesztésen és oda max 20-at állítottam be) Az 50 bank, az 50x5 bájt, ezeket ha egyszer megtölti valaki, már csak olvasni kell, ritka, hogy átírja (ha mégis az sem számottevő). A maradékkal megpróbálom amit írsz, nagyon tetszik az ötlet
Köszönöm!!!
(#) mateatek válasza JoeA hozzászólására (») Ápr 25, 2019 / 2
 
A BigNumbers helyet használhatod ezt is. Minden számot és karaktert megjelenít és nem hibádzik.
(#) JoeA válasza sargarigo hozzászólására (») Ápr 25, 2019 /
 
Ez nálam weldsetup(); Már megint hamarabb küldtem el, mint gondolkodtam az itteni elnevezésen!
(#) JoeA válasza sargarigo hozzászólására (») Ápr 25, 2019 /
 
Erre kérhetnék egy gyakorlatias linket? Ha nem értem, majd jövök
Pár hete kezdtem az arduino-t, túl sok egyértelmű kérdést tennék fel, ami egy asztalnál ülve nem akkora gáz, mint itt Kár, hogy nincs senki a közelemben aki el tudna néhány dolgot magyarázni.
(#) sargarigo válasza JoeA hozzászólására (») Ápr 25, 2019 /
 
Hidd el, egyszerűbb ha mutatsz kódot, és az elnevezéseket mi már fejben átkonvertáljuk. De akkor nincs elírás. Az ördög többnyire a részletekbe bújik bele.
(#) JoeA válasza sargarigo hozzászólására (») Ápr 25, 2019 /
 
hát jelen pillanatban nem mutatnám meg a teljeset Tele van //-el , de majd ha emészthető lesz, visszateszem a githubra.
(#) JoeA válasza mateatek hozzászólására (») Ápr 25, 2019 /
 
Ezt megnézem gyorsan! A bignumbers csak számok és nekem elég lenne a hőmérséklet kijelzéshez, amikor épp túlmelegedett.
(#) sargarigo válasza JoeA hozzászólására (») Ápr 25, 2019 /
 
  1. void sajat_semmi()
  2. {
  3.  // nem fogad paramétert, és nem is ad vissza semmit. Például várakozik 5 másodpercet.
  4. }
  5.  
  6. void sajat_egy_parameter(int parameter)
  7. {
  8.   // nem ad vissza semmit, de fogad egy paramétert, pl. várakozik "paraméter" másodpercig
  9. }
  10.  
  11. void sajat_ketto_parameter(int p1, p2)
  12. {
  13.   // nem ad vissza semmit, de fogad ketto darab parametert.
  14. }
  15.  
  16. int sajat_semmi()
  17. {
  18.   // visszaad egy erteket, amit a return mond neki.
  19.   return 3;
  20. }
  21.  
  22. int sajat_egy_parameter(int vissza)
  23. {
  24.   // fogad egy paramétert, és visszaad egy értéket
  25.  return vissza * 2;
  26. }
(#) sargarigo válasza sargarigo hozzászólására (») Ápr 25, 2019 /
 
Globális a változó ha a függvényen kívül hozod létre, tipikusan a program elején hogy ott legyen egy rakáson, könnyen megtaláld. Ha a függvényből változtatod az értékét, azt mindenki látja.
Ha lokálisan vagyis a függvény zárójelei között hozod létre, akkor annak értéke a függvényből való kilépés során megsemmisül. Helyi vagy munka változóknak hívjuk őket, és olyan értékek tárolására használjuk amire máskor már nem lesz szükség. Mivel megsemmisül, memóriatakarékos, azért szeretjük őket.
(#) sargarigo válasza mateatek hozzászólására (») Ápr 25, 2019 /
 
Ez a bigfont nagyon jó! Ment érte a mancs!
(#) JoeA válasza sargarigo hozzászólására (») Ápr 25, 2019 /
 
Itt épp settingsnek hívom, de volt már majdnem abrakadabra is a neve, nehogy az legyen a baja
  1. void settings()
  2. //int settings(int packet, int preweld, int pause, int weldtime, int packetpause)
  3. //ez adná vissza a loopba ahonnan így hívom meg: if.... settings(packet, preweld,pause,weldtime,packetpause);
  4.   {
  5.     packetsetup(packet);
  6.     preweldtimesetup();
  7.     pausesetup();
  8.     weldtimesetup();
  9.     packetpausesetup();
  10.   funktion = 0;
  11.  
  12.   }


a // után van egy próbám, de volt void-al is és akkor sem ment. A return után a változó neve stimmelt minden esetben.
  1. void packetsetup(packet)
  2. {
  3.      value = packet;
  4.      valuemax = maxpackets;
  5.      lcd.clear();
  6.      lcd.setCursor(0,0);
  7.      lcd.print("Packets Multiply");  
  8.   do
  9.   {
  10.          value -= encoder->getValue();
  11.           if (value != last) {
  12.           encoderValue = value;
  13.            if (value > valuemax) { value = valuemax; }
  14.             if (value < 1) { value = 1; }
  15.           last = encoderValue;
  16.           packet = encoderValue;
  17.            lcd.setCursor(0,1);
  18.            clearChar(0,1);
  19.            clearChar(2,1);
  20.            lcd.setCursor(0,1);
  21.            lcd.print(encoderValue);
  22.            lcd.setCursor(4,1);
  23.            lcd.print("X");
  24.            delay(15);        
  25.           }
  26.   funktion = 0;
  27.   button1.Update();
  28.   if (button1.clicks != 0) funktion = button1.clicks;
  29.   }
  30.   while (funktion != 1);
  31.   funktion = 0;
  32. // itt még kiírta az lcd-re a helyes értéket
  33. return packet;


A „packet = encoderValue;”-t tettem ár mindenhová, a return előttig mindig megvan az értékem.
(#) sargarigo válasza JoeA hozzászólására (») Ápr 25, 2019 /
 
És melyik értéked veszik el? A packet? Hogyan akarod kiírni? Szerintem ott rontod el (látatlanban), hogy a lokálisan létrehozott packet változót akarod globálisan a függvények kívülről használni. De mivel az már megszűnt léteznim a fordító jelez hogy hiányzik. Jól sejtem?
Ha igen, akkor a függvény nevével próbáld kiírni! println(packetsetup(érték));
A return hatására a függvény felveszi a változó értékét!
(#) sargarigo válasza JoeA hozzászólására (») Ápr 25, 2019 /
 
Egyébként szerintem ez nem jó:
Idézet:
„void packetsetup(packet)”

Helyette inkább:
Idézet:
„void packetsetup(int packet)”

Itt létrehozod a lokális változót, de adj neki típust is! És nem kell mindjárt áttenni egy value változóba, használhatod simán is.
A hozzászólás módosítva: Ápr 25, 2019
(#) JoeA válasza sargarigo hozzászólására (») Ápr 25, 2019 /
 
Azért látod benne, mert próbáltam már mindent amit a neten találtam Jelen pillanatban nincs semmi a zárójelek között és visszatér az értékkel jól viszont így a loopból (ahol szintén () van) híváskor nem adja át az épp aktuális értéket és a beállításkor egy teljesen másik értékről (az első néha semmi, néha az aktuális, a következő érték 300, a következő 400 az azt követő első alkalommal 500, de azután mindig 1000 míg az utolsó beáll az általam meghatározott maximum 150-re) kell állítani. Használható, de jobb lenne, ha csak egyet-kettőt kellene tekerni, ha épp 10-20ms-ot akarok állítani.
Az eddigieket az itteni segítségekkel és sok githubos projekt elemzésével értem el. Szeretek kész kódból tanulni, belenyúlni, elrontani majd megint rendbe tenni. Ezt köszönöm mindenkinek aki eddig is segített, közel a cél Kitakarítom a kódot és felteszem majd. Jelenleg van egy csomó változóm, amit már nem használok, van egy csomó // rész amit szintén nem, de még nem akarom kidobni
(#) Laslie válasza JoeA hozzászólására (») Ápr 25, 2019 /
 
Idézet:
„void packetsetup(packet)”

Ez soha nem fog visszaadni semmit, mivel a függvény void-nak lett deklarálva.
Próbáld így:
Idézet:
„int packetsetup(int packet)”

Arduino return leírás
A hozzászólás módosítva: Ápr 25, 2019
(#) JoeA hozzászólása Ápr 25, 2019 /
 
Visszavonom az LCD Bignummeres kérdésem. LCD-t cseréltem és ezzel megy. A bigfont is rossz volt a másikon. A régi egy zöld, tavir-os kijelző, az új amin megy egy kék. Nem tudtam, hogy van kölönbség
(#) JoeA válasza Laslie hozzászólására (») Ápr 25, 2019 /
 
Úgy sem ment, itt valami mást néztem be szerintem, valahol valami apróság lesz amin átsiklok. Nemsoká összeáll a teljes kód a hibámmal (nem csak ezzel valószínűleg ), takarítok benne kicsit és feltöltöm népítéletre
(#) Laslie válasza JoeA hozzászólására (») Ápr 25, 2019 /
 
Addig is tedd fel a függvény meghívásának környékét! pl. +-5 sor a kódból, ott lesz a bibi.
(#) JoeA válasza Laslie hozzászólására (») Ápr 25, 2019 /
 
  1. void loop()
  2. {
  3.  // This prevents any activations if the temperature is too high
  4.   if (int(Thermistor(analogRead(MOTthermpin))) >= cutofftemp){
  5.        cooldown();
  6.   }
  7.  
  8. //  funktion = 0;
  9.   button1.Update();
  10.   if (button1.clicks != 0) funktion = button1.clicks;
  11.     if (funktion == 1) settings();
  12.    
  13.    //{ digitalWrite(ledPin, HIGH); save();}
  14. //    if (funktion == 1) serialmonitor();
  15.     if (funktion == 2) load();
  16.     if (funktion == 3) save();
  17.  
  18. //  if (funktion == 1) settings(packet, preweld, pause, weldtime, packetpause);
  19. //  Serial.println(freeRam());
  20. //  if (funktion == 2) load(bank);
  21.  
  22. // This begins a weld when the weld button is pressed
  23.   button2.Update();
  24.   if (button2.clicks != 0) funktion = button2.clicks;
  25.     if (funktion == 1) weld();
  26. //  if (digitalRead(weldbuttonpin)==HIGH) {
  27. //      delay(debouncepause);
  28. //      weld();
  29. //    }  
  30.  
  31. // Print the LCD menu.
  32.    menudisplay();
  33.    delay(5);  
  34.  
  35. }

settings:
  1. void settings()
  2. //int settings(int packet, int preweld, int pause, int weldtime, int packetpause)
  3.   {
  4.     packetsetup();
  5.     preweldtimesetup();
  6.     pausesetup();
  7.     weldtimesetup();
  8.     packetpausesetup();
  9.   funktion = 0;
  10.  
  11.   }

Benne hagytam minden szemetet is
A hozzászólás módosítva: Ápr 25, 2019
(#) Laslie válasza JoeA hozzászólására (») Ápr 25, 2019 /
 
Ez így tényleg hiányos!
Kicsit jobban átnézve ezt a kódot néhány dolog egyből szemetszúrt.
- A function változó hol van deklarálva? Gondolom global, mivel a settings()-ben értéket adsz neki.
- Ha tényleg global változó a funktion, akkor gondoskodni kell a menudisplay() meghívása előtt annak kiürítéséről. Vagy innen ki kell vennia komment jelet.
Idézet:
„// funktion = 0;”
(benne marad a button2.clicks értéke, így ha a button1.clicks-ből nem kap értéket (nem nyomták meg a button1-t), akkor ezek közül
Idézet:
„if (funktion == 1) settings();

//{ digitalWrite(ledPin, HIGH); save();}
// if (funktion == 1) serialmonitor();
if (funktion == 2) load();
if (funktion == 3) save();
lefuthat akármelyik az értéknek megfelelően.
- A packetsetup() függvény hiába ad vissza értéket, mivel a visszaadott értékkel nem csinálsz semmit.
Így első blikkre ennyi. Többet a teljes kód ismeretében lehetne mondani.
A hozzászólás módosítva: Ápr 25, 2019
(#) JoeA válasza Laslie hozzászólására (») Ápr 25, 2019 /
 
A funktion=0 értékkel nullázom a gombnyomást és hol itt hol ott próbáltam, gyakorlatilag mindegy, hogy hol csak valahol az új lekérdezés előtt nullázni kell, különben megnyomottnak hiszi. Ez a clickbutton.h hozadéka, visszatehetném a button2.Update(); elé is, de mindenhonnan ezzel tér most vissza. Majd később visszateszem, gondolom kicsit kisebb lesz a kész program ha nem 100 helyen nullázom, csak jelenleg ezt is kipróbáltam, hogy lehet-e ez az ok. (az én hibakeresésem még sok helyen találgatáson alapszik, kezdő vagyok íratok az lcd-re, néha a soros portra, mikor mennyit kell lássak) Ez ebben a részben nem releváns, működik! Ami érdekes, hogy így visszakapom az adatokat! Így bekerül a loopba, ha függvény(akármi)-t használok a return akármi; nem ad vissza semmit. Valamit nagyon nem veszek észre, kis időt kérek még a teljes kódhoz, csak épp az imént felvetett eepromos tárolást kalapálom, tetszik ez a 255 kereséses dolog Az életben nem megy tönkre az eeprom ezzel
(#) Laslie válasza Laslie hozzászólására (») Ápr 25, 2019 /
 
De a legjobb lenne a funktion változót elhagyni. pl. így:
  1. void loop()
  2. {
  3.         // This prevents any activations if the temperature is too high
  4.         if (int(Thermistor(analogRead(MOTthermpin))) >= cutofftemp){
  5.        cooldown();
  6.         }
  7.  
  8.         button1.Update();
  9.         switch(button1.clicks) {
  10.         case 1:
  11.                 settings();
  12.                 break;
  13.         case 2:
  14.                 load();
  15.                 break;
  16.         case 3:
  17.                 save();
  18.                 break;
  19.         default: // ide nem kerül semmi, ez egyenértékű a 0-val
  20.                 break;
  21.         }
  22.  
  23.         //  if (funktion == 1) settings(packet, preweld, pause, weldtime, packetpause);
  24.         //  Serial.println(freeRam());
  25.         //  if (funktion == 2) load(bank);
  26.  
  27.         // This begins a weld when the weld button is pressed
  28.         button2.Update();
  29.         switch(button1.clicks) {
  30.         case 1:
  31.                 weld();
  32.                 break;
  33.         default: // ide nem kerül semmi, ez egyenértékű a 0-val
  34.                 break;
  35.         }
  36.  
  37.         //  if (digitalRead(weldbuttonpin)==HIGH) {
  38.         //      delay(debouncepause);
  39.         //      weld();
  40.         //    }  
  41.  
  42.         // Print the LCD menu.
  43.         menudisplay();
  44.         delay(5);  
  45. }
A hozzászólás módosítva: Ápr 25, 2019
Következő: »»   524 / 854
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