led hrací kostka - prosím vysvětlete

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
H75
Příspěvky: 3
Registrován: 08 říj 2017, 10:01
Reputation: 0

led hrací kostka - prosím vysvětlete

Příspěvek od H75 » 08 říj 2017, 10:26

Zdravím Vás, přátelé. Jsem tu nový a s Arduinem začínám. Studuju teď projekt LED hrací kostky z publikace Průvodce světem Arduina. Určitě to znáte. Teď mám zákys v kódu a prosím zkušenější, kteří by mně dokázali vysvětlit, co přesně se v kódu děje na řádku 38 a 39. Výsledek mi je jasný, nerozumím principu fungování na konci.
Kód je následující:

1 //cisla LED s odpovidajicim indexem
2 byte leds[7] = {2,3,4,5,6,7,8};
3
4 //logicke stavy LED pouzitych u jednotlivych cisel
5 byte cisla[7][7] = {{}, //prazdne pole 0 se nezobrazuje
6 {0,0,0,1,0,0,0}, /*1*/
7 {1,0,0,0,0,0,1}, /*2*/
8 {1,0,0,1,0,0,1}, /*3*/
9 {1,0,1,0,1,0,1}, /*4*/
10 {1,0,1,1,1,0,1], /*5*/
11 {1,1,1,0,1,1,1}; /*6*/
12
13 byte tlacitko = 9; //pin s tlacitkem
14
15 byte randn; //promenna pro nahodnou hodnotu
16
17 void setup() f
18 Serial.begin(9600);
19 randomSeed(analogRead(A0)); //inicializace generatoru
20 for(int i = 0; i <= 7; i++){
21 pinMode(leds, OUTPUT);
22 digitalWrite(leds, HIGH); //kontrola funkce LED
23 }
24 pinMode(tlacitko, INPUT);
25 delay(1000);
26 for(int i = 0; i <= 7; i++){
27 digitalWrite(leds, LOW); //vypnuti vsech LED
28 }
29 }
30
31 void loop() {
32 if(digitalRead(tlacitko) == 1){
33 for(int i = 0; i <= 7; i++){
34 digitalWrite(leds, LOW); //vypnuti vsech LED
35 }
36 randn = random(1,7);
37
38 for(int i = 0; i <= 6; i++){
39 if(cisla[randn] == 1){
40 digitalWrite(leds,HIGH);
41 }
42 }
43
44 delay(1000);
45 }
46 }

Tedy řádek 38, 39. Výsledek mě je jasný, dojde k zapnutí příslušných pinů podle náhodně generovaného čísla. Řádek 38 prověřuje jednotlivé piny LED. Ale co přesně se srovnává na řádku 39 s vygenerovaným číslem? Je možné, že to je pořadové číslo pole "cisla"? Píše se zde odzadu: zapni LEDku, pokud "cisla" je stejné jako "randn" a stejné jako "i"? Nebo špatně chápu syntaxi řádku 39?

Děkuji všem za odpovědi, čučím do toho už 4 hodiny a nechápu to. Rád bych tomu rozuměl, než půjdu dál.....

H75
Příspěvky: 3
Registrován: 08 říj 2017, 10:01
Reputation: 0

Re: led hrací kostka - prosím vysvětlete

Příspěvek od H75 » 08 říj 2017, 10:38

Nedaří se mě sem vložit kód úplně správně, mizí "i" v hranatých závorkách. Pro naše účely postačí, když doplním, že má být v řádku 39 za "randn" a v řádku 40 za "leds". Díky za trpělivost se začátečníkem...

H75
Příspěvky: 3
Registrován: 08 říj 2017, 10:01
Reputation: 0

Re: led hrací kostka - prosím vysvětlete

Příspěvek od H75 » 08 říj 2017, 12:39

Heureka, já už asi vím. Náhodné číslo je 2. Řádek 38 prověřuje LEDku s indexem 0, která by měla svítit. Řádek 39 se koukne do druhé řady "cislo" na pozici 0. Zde je jedna, tudiž dojde k aktivaci řádku 40 a Led s indexem 0 rozsvítí.
Dále řádek 38 prověřuje led s indexem 1. Koukne do druhe řady "cislo" na pozici 1. Zde je nula, tudíž není splněna podmínka, led nesvítí.
Dále led s indexem 2 atd atď

Můžete mi potvrdit, že to chápu dobře?

Uživatelský avatar
SkullKeep
Příspěvky: 291
Registrován: 23 srp 2017, 18:51
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: led hrací kostka - prosím vysvětlete

Příspěvek od SkullKeep » 10 říj 2017, 18:41

Ano, tam kde je v indexovem poli 1 nastavi na pin HIGH coz rozsviti LEDku a kde 0 necha zhaslou. Pochopil jsi to presne.
:twisted: :?: :arrow: :geek: P. Q. M.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 57 hostů