Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Köszönöm a válaszodat!
Kifogom próbálni, közben találtam ezt a videót.
Sziasztok,
Közben megint elakadtam egy apróságon: Van egy ilyen tömböm:
Kiszeretném íratni pl. a második sor második elemét (a W vagy a D betüt) , de sehogyse sikerül, mindig rossz eredményeket kapok:
Szerintetek mi lehet a gond? A választ előre is köszönöm!
keys[x][y] formában hivatkozz az elemekre.
Szia!
Próbáld meg
Korábban írtam mást is, de az pontosan olyan volt, mint amit írtál. Szerintem jó az értékadás, helyesen vannak csoportosítva a zárójelekkel. És tényleg [][] kell használni mikor hivatkozol rá, mint ahogy szeg76 írja. A hozzászólás módosítva: Júl 19, 2018
Inkább:
Igen ez is jó és én is így használom, de lehet úgy is megadni. Legalábbis a példákban láttam ilyen megoldást is.
Mondjuk nem próbáltam ki.
Idézet: Ez így nem lesz jó, mert nem a felső indexhatárt kell megadni, hanem a darabszámot! „
Szerintem nem.
Bővebben: Link Idézet a linkből: Idézet: „Accessing an Array Arrays are zero indexed, that is, referring to the array initialization above, the first element of the array is at index 0, hence mySensVals[0] == 2, mySensVals[1] == 4, and so forth. It also means that in an array with ten elements, index nine is the last element. Hence: int myArray[10]={9,3,2,4,3,2,7,8,9,11}; // myArray[9] contains 11 // myArray[10] is invalid and contains random information (other memory address)”
Sőt a továbbiakban azt írja, hogy nem szerencsés random helyekről olvasni és írni, mert a többi kódrészletben tárolt adatok vagy egyéb memória helyen lévő értékek változtatása komoly hibát okozhat.
Ha jól fordítottad volna le az angol szöveget, megértetted volna a lényeget:
int myArray(10) ... - 10db elemet tartalmazó tömb, a tömb sorszámozása 0-tól kezdődik és 9-ig tart. myArray(9) tartalmazza a 11-es számot. myArray(10) hibás információt tartalmaz, memória szemetet, mivel nem "int myArray(11)"-ként lett a tömb deklarálva. "It also means that in an array with ten elements, index nine is the last element. " - ez azt jelenti, hogy egy 10 elemű tömbnek a 9-es indexen az utolsó eleme található. A hozzászólás módosítva: Júl 19, 2018
Tényleg. Pont fordítva van mint más nyelven.
Köszönöm a válaszokat!
szeg76: A keys[0][0]-ra kiírja az egész sort, ami nem jó. KoblogPerGyok: A char keys[3][9]-ra ezt a hibát adja ki a fordító: error: too many initializers for 'char [3][9]'. icserny: Ez így tényleg nem jó. Jelenleg csak ennyiből áll a forráskód:
Szerintem a char keys[4][10] = { ... jó kell, hogy legyen, mert innen másoltam: Bővebben: Link Szerintem a rá hivatkozásnál lehet a gond. Esetleg valaki letudja-e fordítani a saját Arduino-ján, hogy tudjuk kizárni az IDE hibáját? A hozzászólás módosítva: Júl 19, 2018
Igen, tényleg nem jó amit mondtam, sokat kódoltam más nyelven, bocs.
Semmi gond, én is szoktam zagyvaságokat mondani
![]() Mindjárt megpróbálom egy másik PC-ről feltölteni a programot és megírom a fejleményeket.
Nálam így megy. De érdekes, mert elsőre nekem is olyan volt mint neked, de megjavult... ![]() Pedig nem sokat változtattam rajta. Pont ilyen volt a kód, csak nem a loop-ban hanem a setup-ban irattam ki. Nem emlékszem mikor csinálta úgy ahogy neked... ![]() Lehet nem a setup-ban kell kiiratni, hanem a loop-ban, illetve a baudrate-et levettem 9600-ra, majd vissza. Most akkor mi lehetett a gond? ![]() Loppban kell kiirni baudrate vagy valami idegen nem látható karakter van a kódban. Nem tudom megmondani, mert nem sikerül újra produkálni a hibát. A hozzászólás módosítva: Júl 19, 2018
Röviden: C nyelven az indexek 0-tól kezdődnek. Szóval egy 10 elemű tömb elemei közül az első elemet 0-ás index-szel éred el, az utolsót pedig 9-cel.
Ez egyébként sok más nyelven is így van, a C "leszármazottaknál" mindenképpen.
Igen, megvan miért nem gondoltam jól!
Amiben éppen programozgatok abban ha 10 elemű tömböt definiálsz akkor azt így kell: valami(9) Nem a maximális elemek számával, hanem az előforduló maximális indexxel… ![]() Jól bekavartam magam.
Csesszek bele, jó marha vagyok!!!
![]() ![]() ![]() ![]() ![]() ![]() keys[0][0] volt a helyes megoldás, de én keys[0,0] írtam mindvégig. Elnézést kérek mindenkitől az ostobaságomért! További szép estét mindenkinek!
Ok, de nálam is volt gond!
![]() keys[0,0] ra kiírta az első sort. Változtattam a kódon valamit, akkor már ugyanez a megoldás az egészet írta ki! ![]() Most meg sehogy sem tudom ugyanazt a hibát előhozni, mármint azt, hogy csak 1 sort írjon ki... ![]() De lehet csak haluztam mindezt, már semmiben sem vagyok biztos.
Nálam mindig 115200 az alap baud, mert a RAD Studio-ban írt programokkal szoktam használni az Arduino-t és szeretem, amikor I/O müveletek minél kevesebb időt tartanak.
Nálam a csúcs az volt, amikor egy "okos" led matrix átadása előtti napon rájöttem, hogy átkellene particionálni az eepromot, hogy több "cucc" férjen bele, gondoltam ha már úgy is belenyúlok a programba, akkor az I2C scan-t kikommenteltem, hogy minél hamarabb induljon (4800 baud) és minél kevesebb flash-et használjon, de a Wire.begin(); sor benne volt az I2C scan-ben, mivel ez kitörlődött, többet az EEPROMmal nem kommunikált. Aznap (pontosabban másnap) éjjeli 3 óráig kerestük a hibát egy eléggé tapasztalt mérnökökből álló csapattal, végül egy 13 éves srác (aki pont aznap kapott a kezébe egy I2C-s OLED kijelzőt, mert egy 2x16 sorost kifeszített) tette fel a kérdést, aki el nem tudta képzelni, hogy milyen MCU lehet az, amelyikben a Wire.begin-re nincsen szükség. Amiután beírtuk a hiányzó sort, egyből müködött, mi meg csak néztük a srácot.
Én ma nem keveset szívtam azzal, hogy egy pwm értékel digitalwrite-tal írtam ki az adott pin-re, és nem bírtam rájönni hogy hogy a fenébe van az, hogy a szép analóg inputra vagy vcc, vagy gnd jön ki a pinen. A hibát megoldva továbbra se működött, amíg a breadboard-on a megfelelő helyre nem tettem egy kábalt. Igazi doble facepalm történet volt.
Teszteltem kétféle tömbre:
Az eredmény ugyanaz lett.
Szia!
Milyen IDE? Milyen Arduino? Mert nekem hibát dob. Char nem lehetne hosszabb 1 karakternél, nálam ki is írja hibának. Vagy megint benézek valamit? ![]() A hozzászólás módosítva: Júl 20, 2018
A C string (string típus és nem String object) az egy char tömb, a végén egy #0 lezáró karakterrel. Ez szerintem ennél a kódnál túlmehet a tömb méretén értékadásnál, de meg nem esküszöm rá.
A hozzászólás módosítva: Júl 20, 2018
Az én IDE-m nem tudja kezelni ezt rendesen szerintem. A gondja abból fakadhat, hogy a char tömb egyes eleme több mint 1 bájt. Gondolom a másodikként megadott tömböt nekem úgy próbálja értelmezni, hogy a 0,0-ik adat "1234567890" ami több mint 1 karakter. De nem látok bele az IDE lelki világába, hogy mit szeret és mit nem. Az enyém hibát dob.
arduino1.6.10-es
Részben igazatok volt. Idézet: „:\Users\Kapu48\Documents\Arduino\Users\cTomb\cTomb.ino:14:1: warning: initializer-string for array of chars is too long [-fpermissive] Sketch uses 1 714 bytes (5%) of program storage space. Maximum is 32 256 bytes. Global variables use 284 bytes (13%) of dynamic memory, leaving 1 764 bytes for local variables. Maximum is 2 048 bytes. ” Ezért javítottam a méreten: char keys_[4][11] = {... Most már nincsen warning!
Ezt az eredményt még a javítás előtt kaptam. A hozzászólás módosítva: Júl 20, 2018
Igen, így már megy.
Megmondom őszintén a második megadás szerintem ellentmond mindennek amit eddig használtam más nyelvekben. Mi szedi szét automatikusan? Maga a "-karakter? Azaz ha valami szövegnek tűnő valami van, akkor azt szétszedi? Látom hogy megy, meg minden ok vele, de szerintem zavaró ez a megadás. Magasabb szintű fordítóknál azért ezzel belekavarodhat rendesen a manyus… ![]() Maradok szerintem a bevált megadásoknál, de unikumnak ez nagyon jó! ![]()
Szerintem ez char tömb, stringekkel feltöltve.
És a tömbnek csak 1 elemét címezzük mindig az [i][j]-t: Serial.println(keys[i][j]);
A string típus (ami nem a String osztály!) önmagában egy length+1 (vagy 255) hoszzú char tömb, #0 lezáróval. Szokták hívni emiatt z-string-nek (z, mint zero) is. (A másik az l-string (l, mint length), amit pl. a pascal is használ, ott a 0. indexen van letárolva a string hossza és az 1. indextől indul a string szövege).
A hozzászólás módosítva: Júl 20, 2018
Pedig itt bevált: Bővebben: Link
Vagy itt: Bővebben: Link
És ha bevetik a Pointeres trüköt:
Ez az érdekes! A hozzászólás módosítva: Júl 20, 2018
|
Bejelentkezés
Hirdetés |