Vytvoření čísla kombinací vstupů

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
krakonosh
Příspěvky: 4
Registrován: 06 srp 2019, 11:01
Reputation: 0

Vytvoření čísla kombinací vstupů

Příspěvek od krakonosh » 06 srp 2019, 11:05

Dobrý den, chtěl bych poprosit o radu - mám za to že je to něco jednocuchého a že mi to jen o kousek uniká, ale po dni hledání a bádání...tedy:

mám 8 vstupů a každé kombinaci těchto vstupů bych rád přidělil jedno číslo. Ideálně to vzít jako dvojkové číslo, nějak takhle:
vstupy: 2 3 4 5 6 7 8 9
hodnoty: 0 0 1 1 0 0 1 1
Výsledné číslo 51

Jak by se toho dalo dosáhnout? Děkuji za odpovědi.

krakonosh
Příspěvky: 4
Registrován: 06 srp 2019, 11:01
Reputation: 0

Re: Vytvoření čísla kombinací vstupů

Příspěvek od krakonosh » 06 srp 2019, 11:16

Áno, už jenom vypsáním svého problému na internet se v člověku cosi pohne...jeden nápad mám, tak jestli to nejde jednodušeji :-D

KarelBrno
Příspěvky: 40
Registrován: 05 kvě 2019, 15:12
Reputation: 0

Re: Vytvoření čísla kombinací vstupů

Příspěvek od KarelBrno » 06 srp 2019, 12:22

Den hledání a bádání? Vždyť na tohle stačí úplné základy - cyklus, bitový posun... něco na tenhle způsob:

Kód: Vybrat vše

int cislo = 0;
for (int i = 2; i <= 9; i++)
  cislo = (cislo << 1) | vstup(i);

krakonosh
Příspěvky: 4
Registrován: 06 srp 2019, 11:01
Reputation: 0

Re: Vytvoření čísla kombinací vstupů

Příspěvek od krakonosh » 06 srp 2019, 13:51

Díky :-)

Ono když člověk neví co hledat...nejsem tak zběhlej a z 90% samouk a to se lecos v základech přeskočí, třeba bitový posun :-).

petan
Příspěvky: 358
Registrován: 23 črc 2017, 10:19
Reputation: 0
Kontaktovat uživatele:

Re: Vytvoření čísla kombinací vstupů

Příspěvek od petan » 06 srp 2019, 16:12

ono, pokud na to nechceš jít přes "vyšší logiku", tak stačí obyčejný IF

Kód: Vybrat vše

byte cislo = 0;	//inicializovat na 0 před začátkem testu vstupů

if(digitalRead(9)) cislo += 1;
if(digitalRead(8)) cislo += 2;
if(digitalRead(7)) cislo += 4;
if(digitalRead(6)) cislo += 8;
if(digitalRead(5)) cislo += 16;
if(digitalRead(4)) cislo += 32;
if(digitalRead(3)) cislo += 64;
if(digitalRead(2)) cislo += 128;

//zde má proměnná [i]cislo[/i] přiřazenou hodnotu podle stavu vstupů


AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Vytvoření čísla kombinací vstupů

Příspěvek od AstroMiK » 06 srp 2019, 17:02

A jestli chceš zamachrovat, tak stačí tohle:

Kód: Vybrat vše

byte cislo = (PINB & 0b00000011) << 6 | PIND >> 2;
Využívá se v tom toho, že je možné přečíst celý blok po sobě jdoucích pinů jako jeden registr.
v registru PINB jsou stavy pinů D7 až D0 (D0 a D1 jsou využité pro sériovou komunikaci) a v registru PIND jsou stavy pinů D13 až D8 (dva nejvyšší bity-piny jsou využity pro krystal).

Pak tyhle dva registry stačí správně oříznout a seskládat do jednoho bajtu a získáš stav pinů D2 až D9.
PINB+PIND.gif

Odpovědět

Kdo je online

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