Close

Bargraf

  • Toto téma obsahuje celkem 31 odpovědí. Do diskuze (4 diskutující) se naposledy zapojil uživatel posjirka a poslední změna proběhla před 7 roky a 4 měsíci.
Aktuálně je na stránce zobrazeno 15 příspěvků - 1. až 15. (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.

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