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   462 / 838
(#) david10 válasza kapu48 hozzászólására (») Júl 18, 2018 /
 
Köszönöm a válaszodat!
Kifogom próbálni, közben találtam ezt a videót.
(#) david10 hozzászólása Júl 19, 2018 /
 
Sziasztok,
Közben megint elakadtam egy apróságon:
Van egy ilyen tömböm:
  1. char keys[4][10] = {
  2.   {'1','2','3','4','5','6','7','8','9','0'},
  3.   {'Q','W','E','R','T','Y','U','I','O','P'},
  4.   {'A','S','D','F','G','H','J','K','L',' '},
  5.   {'Z','X','C','V','B','N','M',' ',' ',' '}
  6. };

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:
  1. Serial.println(keys[0,0]);   :  1234567890
  2. Serial.println(keys[2,2]);   :  ASDFGHJKL
  3. Serial.println(*keys[0,0]); :  1
  4. Serial.println(*keys[1,1]); :  Q
  5. Serial.println(*keys[2,2]); :  A
  6. Serial.println(*keys[3,3]); :  Z


Szerintetek mi lehet a gond?
A választ előre is köszönöm!
(#) szeg76 válasza david10 hozzászólására (») Júl 19, 2018 / 2
 
keys[x][y] formában hivatkozz az elemekre.
(#) KoblogPerGyok válasza david10 hozzászólására (») Júl 19, 2018 / 1
 
Szia!

Próbáld meg

  1. char keys[3][9] = {
  2.   {'1','2','3','4','5','6','7','8','9','0'},
  3.   {'Q','W','E','R','T','Y','U','I','O','P'},
  4.   {'A','S','D','F','G','H','J','K','L',' '},
  5.   {'Z','X','C','V','B','N','M',' ',' ',' '}
  6. };


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
(#) kapu48 válasza KoblogPerGyok hozzászólására (») Júl 19, 2018 / 1
 
Inkább:
  1. char keys[4][10] = {...
  2.  
  3. az elsö ellem:
  4.  keys[0][0] = '0';
  5. ...
  6. az utolsó:
  7.  keys[3][9] = ' ';
(#) KoblogPerGyok válasza kapu48 hozzászólására (») Júl 19, 2018 / 1
 
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.
(#) icserny válasza KoblogPerGyok hozzászólására (») Júl 19, 2018 / 2
 
Idézet:
  1. char keys[3][9]
Ez így nem lesz jó, mert nem a felső indexhatárt kell megadni, hanem a darabszámot!
(#) KoblogPerGyok válasza icserny hozzászólására (») Júl 19, 2018 1 /
 
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)”
(#) KoblogPerGyok válasza KoblogPerGyok hozzászólására (») Júl 19, 2018 / 1
 
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.
(#) Kovidivi válasza KoblogPerGyok hozzászólására (») Júl 19, 2018 / 1
 
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
(#) KoblogPerGyok válasza Kovidivi hozzászólására (») Júl 19, 2018 / 1
 
Tényleg. Pont fordítva van mint más nyelven.
(#) david10 válasza david10 hozzászólására (») Júl 19, 2018 /
 
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:
  1. char keys[4][10] = {
  2.   {'1','2','3','4','5','6','7','8','9','0'},
  3.   {'Q','W','E','R','T','Y','U','I','O','P'},
  4.   {'A','S','D','F','G','H','J','K','L',' '},
  5.   {'Z','X','C','V','B','N','M',' ',' ',' '}
  6. };
  7.  
  8. void setup() {
  9. Serial.begin(115200);
  10. Serial.println(keys[0,0]);    
  11. }
  12.  
  13. void loop() {}

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
(#) KoblogPerGyok válasza david10 hozzászólására (») Júl 19, 2018 / 1
 
Igen, tényleg nem jó amit mondtam, sokat kódoltam más nyelven, bocs.
(#) david10 válasza KoblogPerGyok hozzászólására (») Júl 19, 2018 / 1
 
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.
(#) KoblogPerGyok válasza david10 hozzászólására (») Júl 19, 2018 / 1
 
  1. char keys[4][10] = {
  2.   {'1','2','3','4','5','6','7','8','9','0'},
  3.   {'Q','W','E','R','T','Y','U','I','O','P'},
  4.   {'A','S','D','F','G','H','J','K','L',' '},
  5.   {'Z','X','C','V','B','N','M',' ',' ',' '}
  6. };
  7.  
  8. void setup() {
  9. Serial.begin(115200);
  10.    
  11. }
  12.  
  13. void loop() {
  14.  
  15. Serial.println(keys[0][0]);
  16.  
  17. delay(2000);
  18. }


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
(#) tbarath válasza KoblogPerGyok hozzászólására (») Júl 19, 2018 / 2
 
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.
(#) KoblogPerGyok válasza tbarath hozzászólására (») Júl 19, 2018 / 1
 
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.
(#) david10 válasza david10 hozzászólására (») Júl 19, 2018 /
 
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!
(#) KoblogPerGyok válasza david10 hozzászólására (») Júl 19, 2018 /
 
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! (Baud rate mindig egyezett)

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.
(#) david10 válasza KoblogPerGyok hozzászólására (») Júl 19, 2018 /
 
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.
(#) tbarath válasza david10 hozzászólására (») Júl 20, 2018 /
 
É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.
(#) kapu48 válasza david10 hozzászólására (») Júl 20, 2018 / 1
 
Teszteltem kétféle tömbre:
  1. char keys[4][10] = {
  2.   {'1','2','3','4','5','6','7','8','9','0'},
  3.   {'Q','W','E','R','T','Y','U','I','O','P'},
  4.   {'A','S','D','F','G','H','J','K','L',' '},
  5.   {'Z','X','C','V','B','N','M',' ',' ',' '}
  6. };
  7.  
  8. char keys_[4][10] = {
  9.   {"1234567890"},
  10.   {"QWERTYUIOP"},
  11.   {"ASDFGHJKL "},
  12.   {"ZXCVBNM   "}
  13. };
  14. void setup() {
  15.    Serial.begin(115200);
  16.  
  17.   int i, j;
  18.   Serial.println("Setup:");
  19.   for(i=0; i<4; i++){
  20.     for(j=0; j<10; j++){
  21.       Serial.println(keys[i][j]);
  22.     }
  23.   }
  24. }
  25.  
  26. void loop() {
  27.   int i, j;
  28.   Serial.println("Loop:");
  29.   for(i=0; i<4; i++){
  30.     for(j=0; j<10; j++){
  31.       Serial.println(keys_[i][j]);
  32.     }
  33.   }
  34.   Serial.println("End!");
  35.   while(1);
  36. }

Az eredmény ugyanaz lett.
(#) KoblogPerGyok válasza kapu48 hozzászólására (») Júl 20, 2018 / 1
 
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
(#) tbarath válasza KoblogPerGyok hozzászólására (») Júl 20, 2018 / 1
 
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
(#) KoblogPerGyok válasza tbarath hozzászólására (») Júl 20, 2018 / 1
 
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.
(#) kapu48 válasza KoblogPerGyok hozzászólására (») Júl 20, 2018 / 1
 
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!
  1. Setup:
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9
  11. 0
  12. Q
  13. W
  14. E
  15. R
  16. T
  17. Y
  18. U
  19. I
  20. O
  21. P
  22. A
  23. S
  24. D
  25. F
  26. G
  27. H
  28. J
  29. K
  30. L
  31.  
  32. Z
  33. X
  34. C
  35. V
  36. B
  37. N
  38. M
  39.  
  40.  
  41.  
  42. Loop:
  43. 1
  44. 2
  45. 3
  46. 4
  47. 5
  48. 6
  49. 7
  50. 8
  51. 9
  52. 0
  53. Q
  54. W
  55. E
  56. R
  57. T
  58. Y
  59. U
  60. I
  61. O
  62. P
  63. A
  64. S
  65. D
  66. F
  67. G
  68. H
  69. J
  70. K
  71. L
  72.  
  73. Z
  74. X
  75. C
  76. V
  77. B
  78. N
  79. M
  80.  
  81.  
  82.  
  83. End!

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
(#) KoblogPerGyok válasza kapu48 hozzászólására (») Júl 20, 2018 / 1
 
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ó!
(#) kapu48 válasza KoblogPerGyok hozzászólására (») Júl 20, 2018 / 1
 
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]);
(#) tbarath válasza kapu48 hozzászólására (») Júl 20, 2018 / 2
 
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
(#) kapu48 válasza KoblogPerGyok hozzászólására (») Júl 20, 2018 / 2
 
Pedig itt bevált: Bővebben: Link
  1. char message[6] = "hello";


Vagy itt: Bővebben: Link
  1. char Str1[15];
  2. char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
  3. char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
  4. char Str4[ ] = "arduino";
  5. char Str5[8] = "arduino";
  6. char Str6[15] = "arduino";


És ha bevetik a Pointeres trüköt:
  1. char* myStrings[]={"This is String 1", "This is String 2", "This is String 3",
  2. "This is String 4", "This is String 5","This is String 6"};
  3.  
  4. void setup(){
  5. Serial.begin(9600);
  6. }
  7.  
  8. void loop(){
  9. for (int i = 0; i < 6; i++){
  10.    Serial.println(myStrings[i]);
  11.    delay(500);
  12.    }
  13. }

Ez az érdekes!
A hozzászólás módosítva: Júl 20, 2018
Következő: »»   462 / 838
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