Close

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 2 měsíci.
Aktuálně je na stránce zobrazeno 14 příspěvků - 1. až 14. (celkem z 14)
  • Autor
    Příspěvky
  • #5717
    piticko
    Účastník

    Ahoj,

    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?

    #5719
    Zbyšek Voda
    Správce

    Dobrý den,
    když nad tím tak přemýšlím, možná by šlo použít něco jako toto:
    Schéma
    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! 🙂

    #5750
    piticko
    Účastník

    Zbyš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…

    #5753
    Zbyšek Voda
    Správce

    Když 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.

    #5776
    posjirka
    Účastník

    Samozř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.

    #5779
    piticko
    Účastník

    Tak 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. 🙂

    #5783
    posjirka
    Účastník

    tlacitko_led_1-pin
    tak jsem to dal na uložiště blogu….

    Attachments:
    #5785
    piticko
    Účastník

    posjirka: někde se asi stala chyba… co se to objevilo za hlášku, místo obrázku? 😉

    #5794
    posjirka
    Účastník

    tak 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????????????

    #5797
    Zbyšek Voda
    Správce

    Rozč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…?

    #5800
    posjirka
    Účastník

    obrá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….

    #5802
    Zbyšek Voda
    Správce

    Zatí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.

    #5843
    Zbyšek Voda
    Správce

    Vkládám slíbený obrázek od posjirka.
    Tlačítko a LED na jednom Arduino pinu

    #5846
    posjirka
    Účastník

    díky

Aktuálně je na stránce zobrazeno 14 příspěvků - 1. až 14. (celkem z 14)
  • Pro reakci na toto téma se musíte přihlásit.