Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Oké köszönöm de hogyan fordította le hibával?
Feltételeztem hogy olyan libeket használ, amikkel már dolgozott a multban, szóval végig néztem a korábbi projekteket az oldalon és össze szedtem ami kellet ehez a projekthez.
Tessék az egész egy csomagban.
Hálás köszönetem a segítségért most már csont nélkül lefordította!
Még mielőtt nagyon belemerülnék az adatok mentésébe, úgy néz ki, hogy dinamikus memóriagondok is lesznek.
Mivel sd-ről olvasni nagyon hosszadalmas lenne, ezért memóriába kellene tartani az összes kártyakódot. Ha most felveszek egy
(a 400 a kártyák száma dimenzió, a 4, a 4db byte kártya egyedi azonosító) ha ezt így feltöltöm, már 91%-nál tartok a dinamikus memóriából, az UNO-nál.
Eleve nem lehet jó, mert byte. Azaz 400-különböző kártyaszám nem lehetséges. 1byte 256, azaz 144 egyforma lesz.
Miért hoszadalmas az SD olvasás? A leglassabb eszköz maga az Arduino. A hozzászólás módosítva: Ápr 27, 2023
https://forum.arduino.cc/t/maximum-speed-that-the-arduino-can-read-...5905/7
Ha elolvastad volna az előre gyártott megoldásomat, ami kiküszöböl sok problémát, és az SD kártyát sem teszi tönkre, akkor 1 megyitás és 10 keresés, majd bezárás, olyan 10*20 +2*11ms körül lenne. Ami 250ms. De ekkor 1024 előregyártott adatból keresne, illetve mivel a linken 10 sor, de sok adat van, a 2 ms több, mint ami neked kellett volna. De maradhatsz a memóriáknál is, beégetheted EEP-romba is, és csak keresel benne. De nekem mindegy. Leírtam mindent amit akartam, nem figyeltél rá.
Sőt. 11ms a megyitás, olvaás, bezárás. Értelmes keresssel kb épp ennyi lenne.
Talán nem pont uno/nano-t kellene hsználni, hanem valami kicsivel nagyobb memóriával rendelkezőt. Pl. ESP8266-hoz még SD kártya sem kellene (de lehet, ha mindenképpen szeretnéd), bőven elég nagy a flash, és a memória is sokkal több, meg se kottyanna egy ekkora tömb.
De ki fogom próbálni a te módszeredet is, mihelyst eljutok odáig, hogy felfogjam, előtte már belekezdtem egy módszerbe és tényleg baromi lassú a feltöltés, de ez lehet a program hibája miatt.
Ugye elnézed nekem, hogy nem vagyok penge az arduinoba és lehet, neked ami egyszerűnek tűnik, másnak nem biztos, hogy az.
Az a gond az ESP-vel, hogy nincs elég I/O rajta, van ugyan NodeMcu-m, de baromi lassú rátölteni
Esetleg BluePill? Az is egy "atomrakéta" egy nano-hoz képest. Sok I/O is van, és néhány tized másodperc rátölteni egy programot.
A hozzászólás módosítva: Ápr 27, 2023
Van 4db számom, pl : 126,177,123,123 ezt milyen függvénnyel tudom összerakni, hogy ez legyen:
126177123123 ? //Bocsi, a konyhanyelvért,
Használhatod egyben is 32 bites számként... Pl. csak rámutatsz egy pointerrel...
A hozzászólás módosítva: Ápr 27, 2023
Ezt most nem értem
Van egy 4-es for ciklus kiolvassa a kártya azonosítóját bájtonként és ez kéne valahogy összerakni egy számmá A hozzászólás módosítva: Ápr 27, 2023
mutasd meg mivel írsz az sd-re és mond el mennyi ideig ír.
Tedd be ezt a ciklust ide, hogy lássuk miről van szó!
Amúgy meg kb. így: uint8_t azonosito[4]; uint32_t* azonosítoszam; azonositoszam = (uint32_t*)azonosito; // tömb címének másolása x = *azonositoszam; //így hivatkozhatunk rá vagy másolhatjuk 32 bites egész számként, pl. az x változóba, vagy bárhova Kiírni pedig hexa-ban lenne érdemes, mert akkor a sima karakterek összefűzése is ugyanúgy korrekt eredményt ad, mint a matek. A hozzászólás módosítva: Ápr 27, 2023
Huh, de bonyolítjátok.
Nyilván kell egy idő, ds3231. Minden nap pl. éjfélkor létrehoz egy date.csv-t, pl. ma 0427.csv . Fejléc: myFile = SD.open("0427.csv", FILE_WRITE); myFile.println("Time",";","ID"); myFile.close(); Adatokhoz beírja az időt pl. 083240 (8 óra 32 perc 40 másodperc) majd a kártyát. myFile = SD.open("0427.csv", FILE_WRITE); myFile.println(time,";",char1,char2,char3,char4); myFile.close(); Nem konkrét program, csak a logikája.
Mégse.
A hozzászólás módosítva: Ápr 27, 2023
Köszi, erre gondoltam előtte is, de nem tartottam túl elegánsnak, de ha nincs más.....
myFile = SD.open("0427.csv", FILE_WRITE);
myFile.print(time); myFile.print(";"); myFile.print(byte1); myFile.print(byte2); myFile.print(byte3); myFile.print(byte4); myFile.print('\n'); myFile.close(); A ; jelzi az excelnek új oszlop, a '\n' új sor. A byte-ok pedig egybefűzve jelennek meg, default decimális kódolással.
Tehát a
ilyenkor ír az SD-re és jelentős időt igényel, itt ez esetbe csak 40 db kártyát szimuláltam és majd 10 másodperc volt, 100db esetén le se fut a program, valamiért annyitól már kifekszik. Ez nem lesz jó ide.
De nem egyszerre olvasol 40 kártyát.
Amit írtam kis probléma, ha byte<10 v. 100. if(byte<10) myFile.print('0'); if(byte<100) myFile.print('0'); myFile.print(byte); Vagy mindegy? A hozzászólás módosítva: Ápr 27, 2023
Használhatsz string-et
https://linuxhint.com/integer-to-string-arduino/
Nem teszteltem, csak firkantottam... Persze a mezei hagyományos tömbös megoldás lehet gyorsabb, takarékosabb
Ezt megoldottam saját magához adtam hozzá, spórolás van ...
Sziasztok!
Adott egy Setup alkotó részek: -Arduino uno -Egy RFM96 (LoRa) – Rádió-shield (868MHz) -GPS modul (NEO-6MV2) -DHT22 T, RH szenor és egy -csapadékmérő aminek reed reléje van Találtam egy programkódot aminek egy részét értem, és ki is egészítettem már. Maga a mért adatok továbbítása LoRaWAN hálózaton történik. A kapcsolat meg van, de még nem teljes a kód amit át akarok küldeni. Van olyan valaki itt aki elmagyarázná, hogy a kód hogyan tevődik össze, mivel egy részét értem, és addig nem tudok hozzányúlni, mert nem tudom hogy tevődik össze. A szituáció a következő. A program beolvassa a GPS illetve a szenzorok adatait. Ez után összepakolja egy tömbbe majd elküldi paylodon, LoRán keresztül a GW-nek majd az továbbítja a szervernek ahol feldolgozódik. Amit nem értek, hogy a program az egyes mért értékeket megfelelő byte részekbe teszi sorosan egymás után illetve tesz hozzá elhatárolást. A kód egy része így néz ki.
A mydata[17] egy 17 elemű tömb amibe érkeznek a mért adatok. Valaki elmagyarázná, hogy a számsor mit takar, illetve az utolsó 3 érték. Csak egy pár példa, hogy ha bővíteni akarom értsem, hogy mit kell bele tenni. Maga a program eseményvezérelt. Hasonló mint ez a kód: ttn-otaa-pro-mini-sensors.ino. GPS megszólítása értékek kinyerése:
Majd itt dolgozódik fel a teljes adatmenyiség, itt kerülnek a tömbbe az adatok.
Az egyes változók definícióját és típusát is értem, azt is értem, hogy hogyan kerülnek bele az egyes adatokat változókba. Viszont erről teljesen nagy a homály: Idézet: „ mydata[4] = (byte) (int32_lat >> 24); mydata[5] = (byte) ((int32_lat >> 16) & 0x00FF); mydata[6] = (byte) ((int32_lat >> 8) & 0x0000FF); ” illetve ezt sem értem: Idézet: „ mydata[12] = (byte) (int16_alt >> 8); mydata[13] = (byte) (int16_alt & 0x00FF); mydata[14] = sat; ” Hogyan tevődik össze akkor az adatom, mert nem tudom elképzelni. Valaki valami gyakorlati példával el tudja mondani? Azt értem, hogy mondjuk a "sat" a tömb 14.-eleme. De konkrétan ezt nem értem: (int16_alt >> 8) illetve (int16_alt & 0x00FF). Hogyan egészítsem ki ha mondjuk újabb 16-os vagy 32-es váltózóm van? Elnézést a specifikus kérdésért, de remélem jó helyre írtam a hozzászólásomat. Köszönöm előre is a segítséget. |
Bejelentkezés
Hirdetés |