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   527 / 839
(#) Kovidivi válasza D_Zsolt hozzászólására (») Ápr 27, 2019 / 1
 
Én fájlokra szoktam szétszedni a programom, pl. külön fájl a kijelző kezelésnek, a hardware-es résznek, a setup-ban lefutó, egyszeri beállítások, az általános fv-ek, a menürendszer, a fix szövegek, a rengeteg változó, ez is szétszortírozva, felhasználó által változtatható és csak a programozás előtt változtathatóra (finomhangolás), interruptok, ha vannak, stb. Így átlátható marad a projekt. Arra kell figyelni, hogy ne includold be a fájlt, mert minden .ino fájl, ami egy könyvtárban van a fő programoddal, automatikusan a programodhoz fűződik (utána, a végétől kezdődően!). Tehát azok a dolgok, amiknek a program elején kell lenniük, trükkösen kell megoldani: a .ino fájlt egy mappával feljebb kell elhelyezni, mint a főprogram, és azt már inclidolni kell! Tehát a definíciók, a változók mind ide kerülnek. Idegesítő egy rendszer, de ez van... Ja, és a füleknek rövid nevet kell adni, mert kb. 10 fül fölött az utolsókat már nehézkes elérni (legördülő menüből kell kiválasztani).
(#) kapu48 válasza D_Zsolt hozzászólására (») Ápr 27, 2019 /
 
Mert normális arduino projectben csak egy *.ino kiterjesztésű fájl van.
A többi *.h, *.c, *.cpp lehetne.

Most hirtelen azt sem lehet tudni, hogy melyik *.ino-dat kel elindítani?
Legalább a könyvtárad neve azonos lenne a főprogramodéval!

És ahogyan fejlesztik az arduino IDEt, lehet, hogy a következő verzióban ezeket visszafogja dobálni, hibajelzésekkel.
Mivel teljesen szabálytalanok!
A hozzászólás módosítva: Ápr 27, 2019
(#) kapu48 válasza Kovidivi hozzászólására (») Ápr 27, 2019 /
 
Idézet:
„trükkösen kell megoldani: a .ino fájlt egy mappával feljebb kell elhelyezni, mint a főprogram, és azt már inclidolni kell!”

Ezzel megint gondok fognak adódni, ha kétszer fogja meghívni az *.ino-ját!

Inkább tanuljon meg rögtön szabványos header állományt készíteni!
Hiszen állítólag a tanulás a célja?
A hozzászólás módosítva: Ápr 27, 2019
(#) D_Zsolt válasza kapu48 hozzászólására (») Ápr 27, 2019 /
 
Nálam azonos nevű a könyvtárral, csak a gitre tettem recycledbe, mert csak itt akartam megmutatni. Az ino fájlokat nem tudtam, hogy át kellene neveznem, legközelebb úgy lesz. Ezt, hogy mit érdemes külön tenni még nem tudom csak a funktions is jóval nagyobb lett, mint az első verzió, ahol azért szedtem szét, mert sokat kellett görgetni. No majd átszervezem
(#) D_Zsolt válasza kapu48 hozzászólására (») Ápr 27, 2019 /
 
Ezzel megint az a bajom, hogy a gyakorlatlanságom miatt még nem tudom, hogy mit érdemes headerbe írni és miért pont azt? Sajnos ilyen nyakatekert vagyok, sokat teszem fel azt a kérdést, hogy: Miért? Néha észreveszem magam, olyankor hallgatok, de okosabb nem leszek ha nem értem a miértjét! Nézd el nekem ha sokat kérdezek! Olvasok németül/angolul, de ezt (a logikáját és nem azt, hogy hogyan) nem találtam még sehol. Kéne valami for dummies könyvet néznem, hátha benne van
(#) kapu48 válasza D_Zsolt hozzászólására (») Ápr 27, 2019 /
 
Hirtelen a mindig kéznél levő könyvem: Bővebben: Link

Bár ez inkább PCs alkalmazásokról szól!
De minden lényeges dolgot megtalálsz benne, ami a C-ben szabvány.
A hozzászólás módosítva: Ápr 27, 2019
(#) morgo válasza Kovidivi hozzászólására (») Ápr 27, 2019 /
 
Én is ezt csinálom. Ha nem lenne "szabályos", nem adna rá lehetőséget az IDE. Maximum nem megszokott. Sokkal áttekinthetőbb a kód.
A hozzászólás módosítva: Ápr 27, 2019
(#) kapu48 válasza morgo hozzászólására (») Ápr 27, 2019 /
 
Rengeteg szabadság volt az 1.5xx IDE-k előtt, Amikre az 1.8xx IDE-k már hibát dobnak.
És volt is rengeteg értetlenkedés, hogy miért nincsen visszafelé kompatibilitás?

Pedig csak a fejlődés hozta magával a jobb hiba ellenőrzést.
(#) kapu48 válasza D_Zsolt hozzászólására (») Ápr 27, 2019 /
 
Elöző link:
Idézet:
„4.11.1. Állományok beépítése
Az állománybeépítés egyszerű lehetőséget kínál a #define utasítással létrehozott definíciókból, deklarációkból és más elemekből összeállított részek kezelésére. A programban bárhol előforduló
#include "állománynév"
vagy
#include <állománynév>
alakú programsor a fordítás során kicserélődik a megadott nevű állomány tartalmával. Ha az állománynév idézőjelek között volt, akkor az adott állomány keresése ott kezdődik, ahol a rendszer a forrásprogramot megtalálta. Ha a keresett állomány ott nem található vagy a nevét csúcsos zárójelek között adtuk meg, akkor a keresés egy géptől és rendszertől függő szabály szerint állományról állományra folytatódik. Az így beépített állomány maga is tartalmazhat #include sorokat.
Gyakran több #include sor van a forrásállomány elején, amely az egész program számára közös #define utasításokat és a külső változók extern deklarációit tartalmazó állományokat vagy a könyvtári függvények prototípus-deklarációihoz való hozzáférést lehetővé tevő header állományokat (mint pl. az <stdio.h>) építi be a programba. (Szigorúan véve a headerek nem szükségképpen állományok, a kezelésük módja géptől és rendszertől függ.)

Az #include nagy programok deklarációinak összefogására használható előnyösen. Alkalmazásával garantálható, hogy minden forrásállomány azonos definíciókat és változódeklarációkat használ, amivel kizárható néhány nagyon csúnya hiba. Természetesen, ha egy beépített állományt megváltoztatunk, akkor az összes azt felhasználó állományt újra kell fordítani.”
(#) D_Zsolt válasza kapu48 hozzászólására (») Ápr 27, 2019 /
 
Ezt még átrágom párszor Még nem látom, hogy a jelen projektben mit lenne érdemes kiszervezni xy.h-ba... Lehet, hogy ehhez több tapasztalat kell... A többi dologra meg odafigyelek legközelebb (ezt is megpróbálom rendbe tenni)!
(#) kapu48 válasza D_Zsolt hozzászólására (») Ápr 27, 2019 /
 
Inkább kapjanak sorszámozás a könyvtáraid pl.:
Spotwelder.001, Spotwelder.002
A bennük levő tartalom rögtön fordítható, és jól látod a fejlődési sorrendet is.
A hozzászólás módosítva: Ápr 27, 2019
(#) D_Zsolt válasza kapu48 hozzászólására (») Ápr 27, 2019 /
 
A baj, hogy nem mentettem külön-külön, hanem ugyan abban a könyvtárban dolgoztam végig, így nincs korábbi visszalépésre lehetőség a Ctrl-Z-n kívül. Jó lett volna lépésről lépésre dokumentálni, hogy mit miért csináltam, itt is megígértem, hogy majd feltöltöm, de elkapott a gépszíj és most már késő, mert be is zártam már egyszer amikor a háttérben az új kernel frissült a rendszeren és úgy gondoltam, hogy itt az idő újra indítani a gépem Mindegy már. Szerettem volna magyarázatokat olyanoktól akik tényleg értenek hozzá, de már a konkrét kérdéseket sem tudom amióta működik
(#) Kovidivi válasza kapu48 hozzászólására (») Ápr 27, 2019 /
 
Igazad van. de az Arduinonál nem a szabvány headerrel van gond, hanem alapból az include el van rontva. Próbáld ki, ha gondolod. Készíts egy main.ino-t, legyen ez a fájl mellett, mappán belül a header fájlod, meg egy másik, amit majd használni akarsz. Includold be, ahogy kell, a főprogram elején mindkettőt. Nem fog menni, mert hibát jelez: a fájlok kétszer vannak include-olva, mert az Arduino automatikusan, a főprogram mappájában levő összes fájlt a főprogram után (!!!) fűzi! Akkor van gond, ha a fájl tartalmának a főprogram elején kellene lennie (mint pl. egy nagy tömb, amivel később dolgozni fogsz).
Ha a szabványos header fájlod olyan, hogy megvizsgálja, be lett-e már töltve, akkor nem fog hibát dobni.
Viszont most elgondolkodtam. Lehetséges, hogy az Arduino a fájlok kiterjesztése szerint kiválogatja, hogy mit tölt be a program legelején és mit a legvégén? Abban biztos vagyok, hogy a lapfüleken levő fájlokat, .ino kiterjesztéssel a főprogram vége után fűzi, erre találtam is utalást. De minden egyéb titok, nem szerepel sehol, nincs dokumentálva, de szinte biztos, hogy bonyodalmakat okoz, mire rájön az ember, mit hogyan.
A hozzászólás módosítva: Ápr 27, 2019
(#) Kovidivi válasza Kovidivi hozzászólására (») Ápr 27, 2019 /
 
Első teszt:
megnyitottam a blink-et, elmentettem az asztalra main.ino néven. Total commanderrel készítettem mellé egy prog.c-t, és egy prog.h-t (a fájlok üresek). Bezártam az Arduinot, majd megnyitottam az asztalról a main.ino-t, és mi történt? Megjelent két új lapfül a main mellett: prog.c, prog.h. Mikor én nem is változtattam a main-on, tehát az alap blink-et tartalmazza! Ha lefordítom a main-t, belefordítódik mindkét prog fájl, kérdés nélkül (a prog.c-be beírtam ezt: volatile long tomb[100][30];, és azonnal panaszkodott az Arduino, hogy kevés memória marad).
Ha beírom a main.h elejébe, hogy #include "prog.c", akkor nem dob hibaüzenetet!
Ha ugyanezt eljátszom egy prog.ino fájllal, ez is automatikusan megjelenik lapfülként (újraindítás után), és be is másolódik a főprogramba. Viszont ha beírom a main-be ezt: #include "prog.ino" vagy <>-zel, akkor jön a hibaüzenet: nem találja a fájlt!
Viszont ha teljes elérési úttal írom be: #include "C:\Users\david\Desktop\ardu\main\prog.ino"
, akkor pedig megkapom a "error: redefinition of 'volatile long int tomb [100][30]'". Tehát sikerült az include-olás, viszont ez már a második!
Itt lehet kitérni arra, hogy melyik megoldásnál hova lesz a main-en belül a program bemásolva: ahol inculde-olom, ott abba a sorba, ahol nem pedig nem include-olok, és automatikusan teszi az IDE helyettem, ott pedig a főprogram végétől kezdve. Pl. ha a prog.c-be beírom, hogy char eszek; akkor main-ben, a loopban nem fogom a változót látni, mivel a változó csak a loop után kerül deklarálásra! Ha a program elejére bekerül a #include "prog.c", ami tartalmazza a char eszek;-t, akkor lefut a program, látja a loop az eszek változót, és nem jön semmi hibajelzés sem.
Ilyen egy *** rendszert. Hogy lehet ennyire átláthatatlan???
A hozzászólás módosítva: Ápr 27, 2019
(#) pipi válasza Kovidivi hozzászólására (») Ápr 27, 2019 /
 
Hali!
Hányas verziójó arduinót használsz?
Nekem is volt olyan régebben, hogy még a további alkönyvtárakban lévő cuccost is automatikusan befordította, aztán módodsítottak, és már nem fordult le a projektem, meg kellett szüntetnem a további alkönyvtárakat. Mostanában nncs bajom vele, lehet mert "szabályosan" csinálom?
A projekt mappában nem tartok semmilyen "nem odavaló" C-val kapcsolatos fáljt, az esetleges régebbi/mentett verziót külön alkönyvtárban tartok, az esetleges átmeneti/próba dolgokat ( a projekt mappában) átnevezem *.ino_ *.cpp_ stb, így nem akarja használni...
(#) Kovidivi válasza pipi hozzászólására (») Ápr 27, 2019 /
 
1.8.8-at használok. Reméltem, hogy kijavítják ezt valami logikusabbra, ezért frissítettem régebben, de nem hozott változást. Legalább le lenne dokumentálva, de szerintem az IDE készítői sem látják át, mikor mi történik.
(#) vargham válasza Kovidivi hozzászólására (») Ápr 27, 2019 /
 
h fájlt nem szabad header guard nélkül használni. Ez alapszabály C és C++ nyelveken.
Az Arduino pedig sima C++ nyelven írt könyvtárak gyűjteménye, amik AVR architektúra esetén az AVR libC könyvtárakon keresztül érik el a hardvert. Az egészet a GCC fordító fordítja le.
(#) Kovidivi válasza vargham hozzászólására (») Ápr 27, 2019 /
 
Header guard nem sokat segít, maximum a dupla include-olást akadályozza meg (elrejti a hibát, mert nem veszed észre, hogy az IDE, önállósodva, már beinclude-olta a fájlt valahol (a megkérdezésem nélkül). Hogy hova, és mi kerül beillesztésre az nem egyértelmű.
Egy saját programban az include-olás a legegyszerűbb, sima hivatkozás. Nem tudom, hol van erre a header guardra szükség. Ismerem, de ha valami kétszer lesz beinclude-olva, akkor ott a program hibás.
A hozzászólás módosítva: Ápr 27, 2019
(#) asrock hozzászólása Ápr 27, 2019 /
 
Hello!

Szűrni szeretném json fájl tartalmát pl value de nem sikerül hiába a minta példa soros porton át jön a json teljes tartalma!


  1. #include <ESP8266WiFi.h>
  2. #include <WiFiClient.h>
  3. #include <ESP8266HTTPClient.h>
  4. #include <ArduinoJson.h>
  5.  
  6. const char* wifiName = "xxxxxx";
  7. const char* wifiPass = "yyyyy";
  8.  
  9. //Web Server address to read/write from
  10. const char *host = "http://192.168.1.100/json";
  11.  
  12. void setup() {
  13.  
  14.   Serial.begin(115200);
  15.   delay(10);
  16.   Serial.println();
  17.  
  18.   Serial.print("Connecting to ");
  19.   Serial.println(wifiName);
  20.  
  21.   WiFi.begin(wifiName, wifiPass);
  22.  
  23.   while (WiFi.status() != WL_CONNECTED) {
  24.     delay(500);
  25.     Serial.print(".");
  26.   }
  27.  
  28.   Serial.println("");
  29.   Serial.println("WiFi connected");
  30.   Serial.println("IP address: ");
  31.   Serial.println(WiFi.localIP());   //You can get IP address assigned to ESP
  32. }
  33.  
  34. void loop() {
  35.   HTTPClient http;    //Declare object of class HTTPClient
  36.  
  37.   Serial.print("Request Link:");
  38.   Serial.println(host);
  39.  
  40.   http.begin(host);     //Specify request destination
  41.  
  42.   int httpCode = http.GET();            //Send the request
  43.   String payload = http.getString();    //Get the response payload from server
  44.  
  45.   Serial.print("Response Code:"); //200 is OK
  46.   Serial.println(httpCode);   //Print HTTP return code
  47.  
  48.   Serial.print("Returned data from Server:");
  49.   Serial.println(payload);    //Print request response payload
  50.  
  51.   if(httpCode == 200)
  52.   {
  53.     // Allocate JsonBuffer
  54.     // Use arduinojson.org/assistant to compute the capacity.
  55.     const size_t capacity = JSON_OBJECT_SIZE(4);
  56.     DynamicJsonBuffer jsonBuffer(capacity);
  57.  
  58.    // Parse JSON object
  59.     JsonObject& root = jsonBuffer.parseObject(payload);
  60.     if (!root.success()) {
  61.       Serial.println(F("Parsing failed!"));
  62.       return;
  63.     }
  64.  
  65.     // Decode JSON/Extract values
  66.    // Serial.println(F("Response:"));
  67.    // Serial.println(root["Humidity"].as<char*>());
  68.    // Serial.println(root["Pressure"].as<char*>());
  69.     Serial.println(root["Value"][0].as<char*>());
  70.     //Serial.println(root["data"][1].as<char*>());
  71.   }
  72.   else
  73.   {
  74.     Serial.println("Error in response");
  75.   }
  76.  
  77.   http.end();  //Close connection
  78.  
  79.   delay(5000);  //GET Data at every 5 seconds
  80. }




  1. },
  2. "Sensors":[
  3. {
  4. "DataAcquisition": [
  5. {"Controller":1,
  6. "IDX":0,
  7. "Enabled":"false"
  8. },
  9. {"Controller":2,
  10. "IDX":0,
  11. "Enabled":"false"
  12. },
  13. {"Controller":3,
  14. "IDX":0,
  15. "Enabled":"false"
  16. }],
  17. "TaskInterval":10,
  18. "Type":"Display - OLED SSD1306/SH1106 Framed",
  19. "TaskName":"oled3",
  20. "TaskEnabled":"true",
  21. "TaskNumber":1
  22. },
  23. {
  24. "TaskValues": [
  25. {"ValueNumber":1,
  26. "Name":"Temperature",
  27. "NrDecimals":1,
  28. "Value":15.3
  29. },
  30. {"ValueNumber":2,
  31. "Name":"Humidity",
  32. "NrDecimals":1,
  33. "Value":69.9
  34. },
  35. {"ValueNumber":3,
  36. "Name":"Pressure",
  37. "NrDecimals":1,
  38. "Value":1013.7
  39. }],
  40. "DataAcquisition": [
  41. {"Controller":1,
  42. "IDX":0,
  43. "Enabled":"false"
  44. },
  45. {"Controller":2,
  46. "IDX":0,
  47. "Enabled":"false"
  48. },
  49. {"Controller":3,
  50. "IDX":0,
  51. "Enabled":"false"
  52. }],
  53. "TaskInterval":30,
  54. "Type":"Environment - BMx280",
  55. "TaskName":"BM280",
  56. "TaskEnabled":"true",
  57. "TaskNumber":2
  58. },
  59. {
  60. "TaskValues": [
  61. {"ValueNumber":1,
  62. "Name":"Temperature",
  63. "NrDecimals":1,
  64. "Value":55.1
  65. }],
  66. "DataAcquisition": [
  67. {"Controller":1,
  68. "IDX":0,
  69. "Enabled":"false"
  70. },
  71. {"Controller":2,
  72. "IDX":0,
  73. "Enabled":"false"
  74. },
  75. {"Controller":3,
  76. "IDX":0,
  77. "Enabled":"false"
  78. }],
  79. "TaskInterval":30,
  80. "Type":"Environment - DS18b20",
  81. "TaskName":"SOLAR_BJ",
  82. "TaskEnabled":"true",
  83. "TaskNumber":3
  84. },
  85. {
  86. "TaskValues": [
  87. {"ValueNumber":1,
  88. "Name":"Temperature",
  89. "NrDecimals":1,
  90. "Value":64.3
  91. }],
  92. "DataAcquisition": [
  93. {"Controller":1,
  94. "IDX":0,
  95. "Enabled":"false"
  96. },
  97. {"Controller":2,
  98. "IDX":0,
  99. "Enabled":"false"
  100. },
  101. {"Controller":3,
  102. "IDX":0,
  103. "Enabled":"false"
  104. }],
  105. "TaskInterval":30,
  106. "Type":"Environment - DS18b20",
  107. "TaskName":"ALSO_BJ",
  108. "TaskEnabled":"true",
  109. "TaskNumber":4
  110. },
  111. {
  112. "DataAcquisition": [
  113. {"Controller":1,
  114. "IDX":0,
  115. "Enabled":"false"
  116. },
  117. {"Controller":2,
  118. "IDX":0,
  119. "Enabled":"false"
  120. },
  121. {"Controller":3,
  122. "IDX":0,
  123. "Enabled":"false"
  124. }],
  125. "TaskInterval":5,
  126. "Type":"Display - OLED SSD1306/SH1106 Framed",
  127. "TaskName":"oled2",
  128. "TaskEnabled":"false",
  129. "TaskNumber":5
  130. }
  131. ],
  132. "TTL":30000
  133. }
(#) KoblogPerGyok válasza asrock hozzászólására (») Ápr 27, 2019 /
 
Helló!

A payload változóban eltárolódik rendesen minden? Belefér ennyi adat?
(#) elektronika95 hozzászólása Ápr 28, 2019 /
 
Sziasztok!

Van egy 2D plotter aminek már elkészítettem a vázát, tehát mechanikailag, de a programban némi gondom akadt...
Az arduinó kód megvan, meg a hozzátartozó GCTRL is, viszont azt nem tudja beolvasni a processing IDE nevű program..valakinek van valami ötlete?

Előre is köszönöm!
(#) tbarath válasza elektronika95 hozzászólására (») Ápr 28, 2019 /
 
Hát ennyi konkrétum alapján max. annyit lehet mondani, hogy valami nem OK...
(#) asrock válasza KoblogPerGyok hozzászólására (») Ápr 28, 2019 /
 
Kérdezem én is mi a gond!
(#) tbarath válasza asrock hozzászólására (») Ápr 28, 2019 /
 
Hány byte az a json amit feldolgoznál?
Mert az arduino memóriája véges, sőt. Bővebben: Link
(#) KoblogPerGyok válasza asrock hozzászólására (») Ápr 28, 2019 /
 
Ha a kodod jó, akkor érdemes lenne fele ekkora vagy meg kisebb méretű fájlal kipróbálni. Nehogy az legyen a gond hogy nem fér bele. Illetve nézz utána, hogy a String mekkora adatot tud meg egyben kezelni!!! Ha az sem segít akkor megnézni hogy a Jason fájl milyen karakter kódolású. Ha nem ASCII hanem mondjuk utf8 akkor gond lesz. A másik meg hogy a Jason fájlban mik a soremeles karakterek. Próbáld ki sokkal kissebb fájlal, és küld vissza a soros monitorra hogy lásd tényleg azt kapta amit kell. Ha nem akkor ott a gond. Ha igen akkor a korban van valahol de azt nem látom.
(#) asrock válasza tbarath hozzászólására (») Ápr 28, 2019 /
 
hadver d1 mini (4M)....
(#) asrock válasza KoblogPerGyok hozzászólására (») Ápr 28, 2019 /
 
A karakter szűrés egyáltalán nem működik pl csak a value értékre 4..5 soros json sem mert átjön soroson a teljes tatalom!
Ezt használom Bővebben: Link
(#) KoblogPerGyok válasza asrock hozzászólására (») Ápr 28, 2019 /
 
Tedd közzé azt a Jason fájlt amiben van robot value. Én a value-t nem találom a fentiben.
(#) KoblogPerGyok válasza asrock hozzászólására (») Ápr 28, 2019 /
 
Szerintem ott a gond hogy elküldi a fájlt, azonban nem adod meg neki hogy melyik rekordbol kéred a value-t. Olyan nincs hogy value rekord. Szenzorok az van amiben több szenzor is van amiknek külön van value bejegyzése.
(#) KoblogPerGyok válasza asrock hozzászólására (») Ápr 28, 2019 /
 
Azaz ki kell szedni a megfelelő helyről mint a példa kódban. Robot senzors. Ok ez azt mondja meg hogy a nagy fajlbol a szenzorokat tartalmazó adatokra van szükséged. Ezután még kell mondani neki hogy ezek közül a humiditi adatai kellenek abból is a value nevezetu. Ezek tömbök amik több dimenziósak.
Következő: »»   527 / 839
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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