Stránka 1 z 1

Vytvoření čísla kombinací vstupů

Napsal: 06 srp 2019, 11:05
od krakonosh
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.

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

Napsal: 06 srp 2019, 11:16
od krakonosh
Á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

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

Napsal: 06 srp 2019, 12:22
od KarelBrno
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);

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

Napsal: 06 srp 2019, 13:51
od krakonosh
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 :-).

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

Napsal: 06 srp 2019, 16:12
od petan
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ů


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

Napsal: 06 srp 2019, 17:02
od AstroMiK
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