Close

Bargraf

Aktuálně je na stránce zobrazeno 30 příspěvků - 1. až 30. (celkem z 32)
  • Autor
    Příspěvky
  • #9451
    Jerry
    Účastník

    Zdravím myslíte že by to šlo nějak zjednodušit ? Děkuji

    byte led[] = {2,3,4,5,6,7,8,9,10,11}; //piny s LED diodami
    byte pocet = 10; //počet diod
    int rychlostP = 70;
    int rychlost = 70;

    void setup()
    {
    pinMode(led[0], OUTPUT);
    pinMode(led[1], OUTPUT);
    pinMode(led[2], OUTPUT);
    pinMode(led[3], OUTPUT);
    pinMode(led[4], OUTPUT);
    pinMode(led[5], OUTPUT);
    pinMode(led[6], OUTPUT);
    pinMode(led[7], OUTPUT);
    pinMode(led[8], OUTPUT);
    pinMode(led[9], OUTPUT);
    pinMode(led[10], OUTPUT);
    pinMode(led[11], OUTPUT);
    }

    void loop()
    {
    digitalWrite( 2 , HIGH );
    delay( rychlostP );
    digitalWrite( 3 , HIGH );
    delay( rychlostP );
    digitalWrite( 4 , HIGH );
    delay( rychlostP );
    digitalWrite( 5 , HIGH );
    delay( rychlostP );
    digitalWrite( 6 , HIGH );
    delay( rychlostP );
    digitalWrite( 7 , HIGH );
    delay( rychlostP );
    digitalWrite( 8 , HIGH );
    delay( rychlostP );
    digitalWrite( 9 , HIGH );
    delay( rychlostP );
    digitalWrite( 10 , HIGH );
    delay( rychlostP );
    digitalWrite( 11 , HIGH );
    delay( rychlostP );
    digitalWrite( 2 , LOW );
    delay( rychlostP );
    digitalWrite( 3 , LOW );
    delay( rychlostP );
    digitalWrite( 4 , LOW );
    delay( rychlostP );
    digitalWrite( 5 , LOW );
    delay( rychlostP );
    digitalWrite( 6 , LOW );
    delay( rychlostP );
    digitalWrite( 7 , LOW );
    delay( rychlostP );
    digitalWrite( 8 , LOW );
    delay( rychlostP );
    digitalWrite( 9 , LOW );
    delay( rychlostP );
    digitalWrite( 10 , LOW );
    delay( rychlostP );
    digitalWrite( 11 , LOW );
    delay( rychlostP );
    digitalWrite( 11 , HIGH );
    delay( rychlostP );
    digitalWrite( 10 , HIGH );
    delay( rychlost );
    digitalWrite( 9 , HIGH );
    delay( rychlost );
    digitalWrite( 8 , HIGH );
    delay( rychlost );
    digitalWrite( 7 , HIGH );
    delay( rychlost );
    digitalWrite( 6 , HIGH );
    delay( rychlost );
    digitalWrite( 5 , HIGH );
    delay( rychlost );
    digitalWrite( 4 , HIGH );
    delay( rychlost );
    digitalWrite( 3 , HIGH );
    delay( rychlost );
    digitalWrite( 2 , HIGH );
    delay( rychlost );
    digitalWrite( 11 , LOW );
    delay( rychlost );
    digitalWrite( 10 , LOW );
    delay( rychlost );
    digitalWrite( 9 , LOW );
    delay( rychlost );
    digitalWrite( 8 , LOW );
    delay( rychlost );
    digitalWrite( 7 , LOW );
    delay( rychlost );
    digitalWrite( 6 , LOW );
    delay( rychlost );
    digitalWrite( 5 , LOW );
    delay( rychlost );
    digitalWrite( 4 , LOW );
    delay( rychlost );
    digitalWrite( 3 , LOW );
    delay( rychlost );
    digitalWrite( 2 , LOW );
    delay( rychlost );
    }

    #9452
    Jerry
    Účastník

    Video

    #9454
    Jerry
    Účastník

    #9456
    Vojtěch Vosáhlo
    Účastník

    Šlo by to zkrátit na pár řádek pomocí foreach a někde bitshiftováním ale foreach by mělo stačit. Doporučuju zkouknout si nějaké ukázky. Na večer můžu přidat i kód.

    #9464
    Vojtěch Vosáhlo
    Účastník

    EDIT: Není to foreach ale jen FOR, omlouvám se. Doporučuju inspirovat se třeba tady: https://www.arduino.cc/en/Tutorial/ForLoopIteration

    #9465
    posjirka
    Účastník

    přesně jak píše Vojtěch.
    1. použij smyčku for a do ni uzavři celý průběh bargrafu pro 1 směr.
    2. v setup() má piny vypsané z pole, v loop() už vypsiuješ každý zvláš´t. i tady ti pomůže pole.
    3. různě časy spoždění pro 2 směry můžeš nastavit zvlášť po dokončení smyčky
    4. máš zmatek v počtu LED v poli (11 ks) a v setup() (12ks)

    Můžu tě trochu nakopnout správným směrem. Zapiš do programu tyto posloupné funkce:

    setup()
    smyčka for pro i = 0 až 10
    – nastav pinmode pro LED[i]
    – nastav LED[i] na LOW
    konec smyčky

    loop()
    smyčka for pro i = 1 až 10
    – nastav LED[i] na HIGH
    – čekej
    konec smyčky
    smyčka for pro i = 1 až 10
    – nastav LED[i] na LOW
    – čekej
    konec smyčky
    smyčka for pro i = 10 až 1
    – nastav LED[i] na HIGH
    – čekej
    konec smyčky
    smyčka for pro i = 10 až 1
    – nastav LED[i] na LOW
    – čekej
    konec smyčky

    samozřejmě to jde ještě výrazně zjenodušit, ale je třeba si uvědomit možnosti a funkci jednotlivých příkazů. Pokud budeš chtít ještě o stupínek nahoru, tak můžes definovat proměnnou a která bdue mít hodnoty 1 až 4, ty pojednou v hlavní smyčce loop() a budou značit jednotlivé fáze změny svitu LED:
    1 – rozsvi´t 1-10
    2 – zhasni 1-10
    3 – rozsviť 10-1
    4 – zhasni 10-1
    na to by byl vhodný select case ….

    ps. a´t tu nejsem ukamenován: vím, že to jde mnohem jednoušeji, ale když začíná je lepší aby to pochopil jak co funguje, než mu dát hotový kod.

    #9468
    Jerry
    Účastník

    Díky

    #9587
    Jerry
    Účastník

    Tak přátelé znalci troch jste mě jako začátečníka potrápili za což i díky kopírovat kódy jdou jednoduše. Tak že co třeba takhle ? Pokud to jde ještě jednodušeji pište. Díky.

    int timer = 40;
    int timer1 = 60;
    void setup() {
    for (int thisPin = 2; thisPin < 12; thisPin++) {
    pinMode(thisPin, OUTPUT);}}
    void loop() {
    for (int thisPin = 2; thisPin < 12; thisPin++) {
    digitalWrite(thisPin, HIGH);
    delay(timer);}
    for (int thisPin = 2; thisPin < 12; thisPin++) {
    digitalWrite(thisPin, LOW);
    delay(timer);}
    for (int thisPin = 12; thisPin >= 2; thisPin–) {
    digitalWrite(thisPin, HIGH);
    delay(timer1);}
    for (int thisPin = 12; thisPin >= 2; thisPin–) {
    digitalWrite(thisPin, LOW);
    delay(timer1);}
    }

    #9592
    posjirka
    Účastník

    co je na tom těžkého 🙂 … dělám si srandu každej něják začínal:

    
    /* BARGRAF V1
    	BY J.POSPISIL 12/2016
    */
    // promenne
    byte led[] = {2,3,4,5,6,7,8,9,10,11}; //piny s LED diodami
    // byte pocet = 10; //počet diod
    int rychlostP = 70;
    int rychlostL = 70;
    
    void setup(){
    	// nastaveni vystupu
    	for (int a=0; a <= sizeof(led)-1; a++){
    		pinMode(led[a], OUTPUT);
    		digitalWrite( led[a] , LOW );
    	} 
    }
    
    void loop(){
    	// postupne rozsvit 2 - 11
    	for (int a=0; a <= sizeof(led)-1; a++){
    		digitalWrite( led[a] , HIGH);
    		delay(rychlostP);
    	} 
    	// postupne zhasni 2 - 11
    	for (int a=0; a <= sizeof(led)-1; a++){
    		digitalWrite( led[a] , LOW);
    		delay(rychlostP);
    	} 
    	// postupne rozsvit 11 - 2
    	for (int a=sizeof(led)-1; a >= 0; a--){
    		digitalWrite( led[a] , HIGH);
    		delay(rychlostP);
    	} 
    	// postupne zhasni 11 - 2
    	for (int a=sizeof(led)-1; a >= 0; a--){
    		digitalWrite( led[a] , LOW);
    		delay(rychlostP);
    	} 
    }
    #9593
    BlindP
    Účastník

    Cykly a podmínky jsou základ každého programovacího jazyka, doporučuji se je naučit. 😉 Pro začátek tady – https://bastlirna.hwkitchen.cz/seriova-komunikace-a-cykly/ A nebo si pod stromeček naděl „Průvodce světem arduina“ – jde stáhnout i jako pdf. 😀 Hodně štěští. BP

    #9596
    Jerry
    Účastník

    Tak přátelé znalci trochu jste mě jako začátečníka potrápili za což i díky kopírovat kódy jdou jednoduše. Tak že co třeba takhle ? Pokud to jde ještě jednodušeji pište. Díky.

    int timer = 40;
    int timer1 = 60;
    void setup() {
    for (int thisPin = 2; thisPin < 12; thisPin++) {
    pinMode(thisPin, OUTPUT);}}
    void loop() {
    for (int thisPin = 2; thisPin < 12; thisPin++) {
    digitalWrite(thisPin, HIGH);
    delay(timer);}
    for (int thisPin = 2; thisPin < 12; thisPin++) {
    digitalWrite(thisPin, LOW);
    delay(timer);}
    for (int thisPin = 12; thisPin >= 2; thisPin–) {
    digitalWrite(thisPin, HIGH);
    delay(timer1);}
    for (int thisPin = 12; thisPin >= 2; thisPin–) {
    digitalWrite(thisPin, LOW);
    delay(timer1);}
    }

    #9597
    Jerry
    Účastník

    #9598
    Jerry
    Účastník

    Pro začátečníky kteří tápou asi jako já, posílám trochu počeštěno protože na Googlu je v některých kódech už taková jazyková bramboračka, že člověk někdy neví jestli je to španělsky nebo tatarsky a není hned poznat jestli je to programový příkaz nebo jenom název proměnné.

    int prodleva = 40;
    int prodleva1 = 60;

    void setup() {
    for (int ledPin = 2; ledPin < 12; ledPin++) {
    pinMode(ledPin, OUTPUT);}}

    void loop() {
    for (int ledPin = 2; ledPin < 12; ledPin++) {
    digitalWrite(ledPin, HIGH);
    delay(prodleva);}
    for (int ledPin = 2; ledPin < 12; ledPin++) {
    digitalWrite(ledPin, LOW);
    delay(prodleva);}
    for (int ledPin = 12; ledPin >= 2; ledPin–) {
    digitalWrite(ledPin, HIGH);
    delay(prodleva1);}
    for (int ledPin = 12; ledPin >= 2; ledPin–) {
    digitalWrite(ledPin, LOW);
    delay(prodleva1);}
    }

    #9600
    BlindP
    Účastník

    Pro vkládání kódu doporučuji používat značky CODE:

    
    for(int i = 2; i < 12; i++) {
        digitalWrite(i, HIGH);
        delay(prodleva);
    }
    

    lépe se to čte. Můžes si i napsat vlastní funkci a zpoždění jí předávat jako parametr – https://bastlirna.hwkitchen.cz/uzivatelsky-definovane-funkce-2/ U ledPin- Ti chybí jedno mínus ledPin– – https://www.arduino.cc/en/Reference/Increment BP

    EDIT: Ne máš to správně, jen tenhle font to zobrazuje dohromady, další důvod pro používání značek CODE. 🙂

    #9608
    posjirka
    Účastník

    to jerry:
    měníš zadání … jendou pracuješ s polem, pak chceš přímo řešit piny, je to trochu zmatek. Mám k tomu pár připomínek:
    – používat pole jako zadání použitých pinů je velmi vhodné, pokud nepoužíváš čistou řadu čisel, ael třeba některé vynechávaš, nebo jsou na přeskáčku.
    – určitě pro vkládání kúodu používej CODE jinak jak píše BlindP budou v tom zmatky. Bohužel je fórum nastaveno trochu neš´tastně a nejde třeba vkládát kod přímo z Arduino IDE „copy for forum“,
    – doporučuju používat verzování jednotlivých programů a stejně tak i nauč se popisovat jednotlivé části. Teď ti to možná příjde jako ztráta času. Až budeš mít delší kod a budeš se čas od času k němu vracet budou ti ty komentáře scházet.
    – já jsem se vceku brzy naučil používat odsazení vnořených procesů (for(…){}) i když tady to bude určitě z důvodu nepoužití CODE ale hlavně když uzavíráš složené závorky tak je uzavírej né na konci řádku, ale na další řádku ve vzdálenosti od okraje kde je počátek funkce od této závorky (podívej se jak mám uzavřené (for{}). Usnadní to přehled. Sice máš při kliku na závorku podbarvenou i její protikus, ale text je text.

    #9640
    Jerry
    Účastník

    Takhle mi to funguje

    int prodleva = 40;
    int prodleva1 = 80;

    void setup() {
    for (int ledPin = 2; ledPin < 12; ledPin++) {
    pinMode(ledPin, OUTPUT);}}

    void loop() {
    // rozsvítí postupně led 1-10
    for (int ledPin = 2; ledPin < 12; ledPin++) {
    digitalWrite(ledPin, HIGH);
    delay(prodleva);
    }
    // zhasne postupně led 1-10
    for (int ledPin = 2; ledPin < 12; ledPin++) {
    digitalWrite(ledPin, LOW);
    delay(prodleva);
    }
    // rozsvítí postupně led 10-1
    for (int ledPin = 12; ledPin >=2; ledPin–) {
    digitalWrite(ledPin, HIGH);
    delay(prodleva1);
    }
    // zhasne postupně led 10-1
    for (int ledPin = 12; ledPin >=2; ledPin–) {
    digitalWrite(ledPin, LOW);
    delay(prodleva1);
    }
    }

    #9643
    posjirka
    Účastník

    uuuauauauauau …. nepoučitelnej.
    Nepoužíváš párové značky CODE, takže ten tvůj kod je pro všechny ostatní nepoužitelněj (ztracené — atd.)
    Navíc , nevadí ti, že první směr adresuje 10 (2-11, protože máš < 12)pinů a opačný směr 11 (12 – 2 protože máš >=2)
    Původní „krása“ řešení přes pole je pryč a pomocí 2 cmosů bych to udělal jednodušeji.
    Jde ti o to něco se naučit, nebo jen rozblikat pár ledek ? píšu to proto, že tvoje aktuální řešní je pro jakékoliv změny strašně těžkopádné. Pro začátek dobrý. Pro další vývoj 3- .

    #9645
    Jerry
    Účastník

    Když zadám počet pinů 11 tak mi to nekomunikuje s poslední led.

    #9646
    posjirka
    Účastník

    ????????????????:
    for (int ledPin = 2; ledPin < 12; ledPin++) {
    ledPin = 2, 3, 4, 5, 6, 7, 8, 9, 10, 11

    for (int ledPin = 12; ledPin >=2; ledPin–) {
    ledPin = 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2

    už chápeš ten rozdíl? ten první příklad ti nevolá pin č. 12 …
    Správně by měl být:
    for (int ledPin = 2; ledPin <= 12; ledPin++) {
    ledPin = 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

    #9648
    Jerry
    Účastník

    int prodleva = 40;
    int prodleva1 = 80;

    void setup() {
    // nastavení pinů pro led jako OUTPUT
    for (int i = 2; i <= 11; i++) {
    pinMode(i, OUTPUT);}}

    void loop() {
    // rozsvítí postupně led 1-10
    for (int i = 2; i <= 11; i++) {
    digitalWrite(i, HIGH);
    delay(prodleva);
    }
    // zhasne postupně led 1-10
    for (int i = 2; i <= 11; i++) {
    digitalWrite(i, LOW);
    delay(prodleva);
    }
    // rozsvítí postupně led 10-1
    for (int i = 11; i >=2; i–) {
    digitalWrite(i, HIGH);
    delay(prodleva1);
    }
    // zhasne postupně led 10-1
    for (int i = 11; i >=2; i–) {
    digitalWrite(i, LOW);
    delay(prodleva1);
    }
    }

    #9649
    Jerry
    Účastník

    Nevím jak to sem dát aby to bylo skutečně to co je v kódu. Při kopírování si to dělá co chce po editu taky a po odeslání to napíše nesmysly.

    #9651
    posjirka
    Účastník

    je to jednuduché. Když píšeš odpověd tak nad tectovým polem, kde píšeš je sada tlačítek:
    B – tučné písmo
    / – kurzíva
    lINK – vkladani HTML odkazu


    CODE – pro vložení kódu
    UZAVRIT ZNACKY – uzavře párové značky.

    Funguje to tka, že píšeš normální text: sdfaergasdcargascfWG
    Pak chceš vložit kód tak klikneš na CODE (vloží se apostrof), vložíš kod a buď dáš znovu CODE nebo UZAVŘÍT ZNAČKY. Opět se vloží apostrof a kod se ti dá do toho rámčeku a v původním formátu.

    #9653
    Jerry
    Účastník

    Díky moc to mě netrklo. Njn tak příště už to bude snad lepší.

    #9675
    Jerry
    Účastník

    Tak snad už to bude lepší. Dotaz .. v tomhle kódu nepůjde kombinovat výstupy D a A. Jak by to šlo vyřešit ?

    
    int prodleva = 40;
    int prodleva1 = 80;
    int prodleva2 = 200;
    
    void setup() {
            // nastavení pinů pro led jako OUTPUT
            for (int i = 2; i <= 11; i++) {
                  pinMode(i, OUTPUT);}
            }
    
    void loop() {
            // rozsvítí postupně led 1-10
            for (int i = 2; i <= 11; i++) {
                  digitalWrite(i, HIGH);
                  delay(prodleva);
            }
            // zhasne postupně led 1-10
            for (int i = 2; i <= 11; i++) {
                  digitalWrite(i, LOW);
                  delay(prodleva);
            }
                  delay(prodleva2);
      
            // rozsvítí postupně led 10-1
            for (int i = 11; i >=2; i--) {
                  digitalWrite(i, HIGH);
                  delay(prodleva1);
            }
            // zhasne postupně led 10-1
            for (int i = 11; i >=2; i--) {
                  digitalWrite(i, LOW);
                  delay(prodleva1);
            }
                  delay(prodleva2);
        }
    
    #9676
    posjirka
    Účastník

    kod je vložen správně … gratulace. No te´d jsi se dostal do stavu, kdy to takto jednoduše nepůjde. Tak „zpátky na stromy“ a podívej se na ten můj původní kod polem. Analogové piny mají při úpoužití jako digitální čísla 14 (A0) až 19 – (A5).
    tady je velmi vhodné použít pole. nemusel bys překopávat počítadlo for, ale stačilo by upravit seznam použitých pinů. Navíc bys jej mohl libovolně rozšiřovat/zužovat bez výrzné změny kodu (prostě bys jen změnil počet hodnot v poli) …

    #9677
    Jerry
    Účastník

    Prosím nakopnout víc 🙁 Tady se nějak ztrácím to už jsem zkoušel ale nevím jak definovat OUTPUT ve void setup … myslím pole

    #9679
    Jerry
    Účastník

    Jinak díky za podporu a gratulaci že jsem konečně něco udělal dobře.. zítra to bude cca 20 dní co jsem poprvé viděl ardo.

    #9682
    BlindP
    Účastník

    Smyčka for – https://www.arduino.cc/en/Reference/For
    Kompletní kód – https://www.arduino.cc/en/Tutorial/KnightRider
    Jirka už Ti přece ten kód tady napsal.
    BP

    #9685
    Jerry
    Účastník

    Já ale teď potřebuji zkombinovat D a A výstupy

    #9686
    posjirka
    Účastník

    chlape, chybí ti základy. opravdu je nutné si nejdřív něco nastudovat a pak začít experimenovat. kdybyte led[] = {2,3,4,5,6,7,8,9,10,11}; //piny s LED diodamioužil ten můj kod a upravil :
    byte led[] = {2,3,4,5,6,7,8,9,10,11}; //piny s LED diodami
    na třeba
    byte led[] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}; //piny s LED diodami
    tak je to hotové. opravdu ale je třeba vyzkoušet examply a tutoriály než začneš vymýšlet svoje řešení, bez hlubšího pochopení souvislosti to prostě nejde.

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