pomoc s projektem: použití "random"
Úvodní stránka › Fórum › Hardware › Arduino › pomoc s projektem: použití "random"
- Toto téma obsahuje celkem 13 odpovědí. Do diskuze (3 diskutující) se naposledy zapojil uživatel
posjirka a poslední změna proběhla před 8 roky a 10 měsíci.
-
AutorPříspěvky
-
11.1.2016 v 14:51 #5717
piticko
ÚčastníkAhoj,
prosím, poraďte, jak vytvořit takovýto projekt:
mám 5 tlačítek a ke každému je přiřazena žárovka (LED).
po zapnutí arduina svítí jedna LED a je „aktivní“ přiřazené tlačítko. Stisknu přiřazené tlačítko a náhodně se rozsvítí jiná LED. Stisknu tlačítko přiřazené náhodně rozsvícené LED a zase se vybere náhodně jiná LED…a tak stále dokola.Jak na zapojení? Jde použít jeden pin, jako výstup pro LED a současně jako Read pro tlačítko? Nebo musím použít 5x Read pin a 5x Output pin?
A jak na program co nejjednodušeji?
11.1.2016 v 16:26 #5719Zbyšek Voda
ÚčastníkDobrý den,
když nad tím tak přemýšlím, možná by šlo použít něco jako toto:
Je potřeba to ale vyzkoušet. Nemám u sebe teď Arduino.Potom by ovládání probíhalo tak, že byste přepínal mezi
pinMode(pin, OUTPUT);
a
pinMode(pin, INPUT_PULLUP);
společně s rozsvěcením LED, čtení stavu…
Použití 2×5 pinů by bylo rozhodně nejjednodušší.
Pokud ale chcete ušetřit piny, najdou se i další způsoby, které piny ušetří ještě o trochu více.
Použitím nějakého multiplexingu se dá ovládat mnohonásobně více LED, než je pinů (počet roste i exponenciálně). Například při použití Charlieplexingu je možné pomocí tří pinů ovládat až šest LED (obecně je počet LED dán vztahem n^2-n, kde n je počet použitých pinů). Více o Charlieplexingu zde.
Druhou kategorií je ovládání tlačítek. Těch je možné na jeden pin připojit teoreticky až 1023 (respektive rozsah analogového převodníku – 1). V praxi je počet menší, ale vašich potřebných pět tlačítek je OK. Všechny tlačítka jsou připojena paralelně k jednomu pinu v sérii s resistory různých hodnot. Stisknutím dvou tlačítek tak vznikne paralelní kombinace více resistorů. Pokud vyberete správné hodnoty odporů, budete schopný vyčíst všechny možné kombinace stisků tlačítek. Více tlačítek připojených k jednomu Arduino pinu je popsán zde.
S využitím těchto dvou způsobů tedy použijete pouze čtyři piny! 🙂
14.1.2016 v 11:55 #5750piticko
ÚčastníkZbyšku díky,
kouknu na ten PULLUP. Pro mne je to novinka 🙂Nemám potřebu při tomto projektu šetřit pinama, ale pokud to půjde tak, jak jsi nakreslil, bude to fajn.
jdu si hrát…
15.1.2016 v 15:49 #5753Zbyšek Voda
ÚčastníkKdyž se na to teď dívám s odstupem, vidím v tom zásadní problém… v momentu, kdy je zmáčknuté tlačítko a na výstupu je nastaveno HIGH je připojeno + přímo na GND a to se Arduinu líbit nebude.
Toto tedy nebude správná cesta.
Omlouvám se, že jsem si toho nevšiml dřív.Asi bych šel cestou nějakého toho multiplexingu.
17.1.2016 v 20:56 #5776posjirka
ÚčastníkSamozřejmě že jde použít 1 pin jak pro tlačítko tak pro LED.
śkoda, že sem nejde vkládat obrázky přímo … .R1 TL1 R2 LED
+5V -[330R]–/ —*—[330R]—|>|— GND
|
D1 —————|V podstatě žekáš na log.1 na pinu a když příjde tak jí zapíšeš a začneš se zajímat o jiný pin /LED/ .
Odpor R1 chrání vstup před přímým připojením na +5V.Programově to můžeš udělat jako nahodile přiřazení pinu do pole a po stisku správného tlačítka bys šel o pozici doprava dokud nenarazíš na konec.
18.1.2016 v 14:05 #5779piticko
ÚčastníkTak jsem spáchal první verzi tak, aby byla funkční…
int tln; int tl=0; void setup() { for (int x=2;x<=6;x++){ pinMode(x,INPUT_PULLUP); } for (int i=8;i<=12;i++){ pinMode(i,OUTPUT); digitalWrite(i,HIGH); delay(100); digitalWrite(i,LOW); } delay(2000); randomSeed(analogRead(0)); tln = random(2,7); } void loop() { if(tln==2){ digitalWrite(8,HIGH); digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); } else if(tln==3){ digitalWrite(9,HIGH); digitalWrite(8,LOW); digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); } else if(tln==4){ digitalWrite(10,HIGH); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); } else if(tln==5){ digitalWrite(11,HIGH); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(12,LOW); } else if(tln==6){ digitalWrite(12,HIGH); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(11,LOW); } tl=digitalRead(tln); if (tl==LOW){ tln=random(2,7); } else{} }
I jsem tedy zkoušel na výstup PULLUP 5V připojit OV a měl jsem asi štěstí, výstup přežil a i reagoval na těch 0V, jak poprvé psal Zbyšek.
posjirka, nastuduji tvůj „obrázek“ a rád bych samozřejmě využil co nejméně pinů…poněvač, pokud budu chtít více tlačítek, tímto způsobem, co jsem spáchal, je k dispozici jen jedno. 🙂18.1.2016 v 20:48 #5783posjirka
Účastník
tak jsem to dal na uložiště blogu….Attachments:
19.1.2016 v 9:51 #5785piticko
Účastníkposjirka: někde se asi stala chyba… co se to objevilo za hlášku, místo obrázku? 😉
19.1.2016 v 16:50 #5794posjirka
Účastníktak já nakreslím lepší schéma, přidám ho k sobě do obrázku pro blog (pouze souborově bez zobrazení) a ani to sem nemůžu vložit. Tak kam mám do….le vkládat obrazky admine????????????
19.1.2016 v 17:03 #5797Zbyšek Voda
ÚčastníkRozčilujete se zbytečně. To, že se zobrazil jiný obrázek, než jste chtěl… za to může váš blog. Co zkusit třeba Google Drive, Dropbox…?
19.1.2016 v 19:07 #5800posjirka
Účastníkobrázek je správně, jen blog si jej zablokoval pro extrení využití. Je nějáká varianta jak sem vložit obrázek?
Google Drive mám, ale používat nebudu, zbytečně bych si zanášel místo na disku a až budu dělat pravidelnou čístku smažu i toto a nebude mít nikdo nic. Na netu oceňuji že jsou informace dostupné i o několik let později a stále mohou pomoci….19.1.2016 v 19:26 #5802Zbyšek Voda
ÚčastníkZatím je bohužel pro uživatele možné vložit obrázek pouze z externího zdroje.
Když mi ho ale pošlete na mail zbysekvoda@gmail.com, dám ho sem.24.1.2016 v 22:13 #5843Zbyšek Voda
ÚčastníkVkládám slíbený obrázek od posjirka.
24.1.2016 v 23:16 #5846posjirka
Účastníkdíky
-
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.