Close

dehtak

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 30 příspěvků - 1,621. až 1,650. (celkem z 2,768)
  • Autor
    Příspěvky
  • odpověď na: Klon? ano ne #8321
    ivosisko
    Účastník

    Původní dotaz zněl zda klon ano či ne, ale vzápětí se z toho stalo vlákno řešící ekonomiku a DOV. Nic proti, ale jsem ve stejné situaci jako původní tázatel, tj. naprostý začátečník a chci se vydat cestou osvojování si Arduina pomocí lekcí, které vycházejí na vašem, ale i spřátelených webech. Chtěl jsem si na eBay koupit základní zařízení a zde jsem narazil na problém – začal jsem se topit ve značení desek a prostě neumím rozeznat co je originál a co fake. Z nějaké dlouhodobější perspektivy jsem se rozhodl nejít cestou UNO, ale pořídit si ATMEGA2560. Patří model Funduino mezi originální desky anebo je to fake? Mám vybrané tyto tři varianty (ani u jedné nevím, která je klon a která ne) a nevím, do které jít:

    1. http://www.ebay.com/itm/Mega-2560-ATMEGA2560-16AU-Board-Arduino-compatible-USB-Cable-Funduino-/301723529878?hash=item46401fb296:g:bDkAAOSwcu5UMIcX

    2. http://www.ebay.com/itm/Mega-2560-ATMEGA2560-16AU-Board-Arduino-compatible-USB-Cable-Funduino-/141706598689?hash=item20fe5f1921:g:HkMAAOSwMmBVkjMl

    3. http://www.ebay.com/itm/Mega-2560-ATmega2560-16AU-Board-Arduino-compatible-/121278823593?hash=item1c3cc7fca9:g:U4oAAOSwHnFVyxbX

    Budu neskonale vděčný, když mi někdo v tomto prvním kroku poradí. Nebylo by příjemné, kdybych hned ze startu šlápl vedle a pak se trápil, zda to nefunguje díky mé blbosti anebo nějaké nekompatibility.

    Díky, Ivo

    odpověď na: Přerušení #8317
    posjirka
    Účastník

    hmmm, tak to vypadá na chybu jménem ARDUINO.
    máš 2 možnosti:
    1, mít ještě dodatečnou podmínku, že dokud neporběhne setup() tak se nesmí spustit proces. Něco jako odpojení zdroje s tím, že ve smyčce loop() jej připojíš.
    2, nahrát program bez podpory bootloaderu:
    tzn. 1 arduino budeš mít jako to, co pracuje a dále už se nebude chovat jako arduino a druhé budeš mít jako programátor pro nahrání nové verze = přes USB nepůjde nahrát nový program, pouze komunikace s PC. Funguje to tak, že z 1. arduina udělaáš tzv. stand alone (v podstatě holý procesor se zdrojem) a programovat jej budeš pomocí ICSP rozhraní.
    https://www.arduino.cc/en/Tutorial/ArduinoISP

    máš možnost to vyzkoušet?

    odpověď na: Přerušení #8313
    Dupla
    Účastník

    Zkusil jsem tedy těch 20 s delay. Po nahrátí se všechny válce srazí a nic se neděje, pokud ovšem zastavím vzduch do válců, rozdělím je od sebe manuálně a vzduch opět zapnu, program se rozjede a jede tak, jak má.

    odpověď na: Přerušení #8300
    posjirka
    Účastník

    zkus tam dát ten delay 20s … jen test nikoliv řešení

    odpověď na: Přerušení #8296
    Dupla
    Účastník

    Hned po nahrátí programu to takto udělá.
    Pokud nahraju svůj program bez reakcí na snímače, jen čistě vysuň, delay, zasuň, tak se válce po nahrání programu nesrazí.

    odpověď na: Přerušení #8295
    posjirka
    Účastník

    jak to přesně vypadá?
    Jak spustíš Arduino, tak okamžitě to takto udělá, nebo je nejdřív pauza?

    Ono totoiž arduino má na začátku bootloader, který mimo jiné uvádí piny do nějákých mezistavů.
    Zkus dát do void setup(){ } navíc delay(20000);
    ten by měl rozběh všeho zpozdit o 20s.
    pokud i tak hned po spuštění arduina okamžitě začne hýbat s válci, je chyba v bootloaderu. Musel by s to pak udělat tak, že bys musel nahrát program přes ICSP, tzn. z arduina bys odstranil bootloader a nahrál program jako čistý kod bez berliček od Arduina.

    odpověď na: Přerušení #8294
    Dupla
    Účastník

    Řekl bych, že to vypadá dobře, nicméně po vyzkoušení je výsledek stejný, jako v případě mého kódu. Po nahrání programu se vysunou všechny válce a dojde k jejich zkřížení.

    odpověď na: Přerušení #8293
    posjirka
    Účastník

    co bys řekl na toto:

    // ovladani 4 paneumatickzch valcu
    // v01
    // DUPLA & by JP 2016
    
    // Konstanty pro pneumatické válce
    #define dvere 2
    #define davkovani 3
    #define lisovani 4
    #define vyhazovani 5
    // ----------------------------------------
    // Konstanty pro snímače
    #define vyhazovaniZasunute 6
    #define vyhazovaniVysunute 7
    #define lisovaniVysunute 8
    #define lisovaniZasunute 9
    #define dvereZasunute 10
    #define dvereVysunute 11
    #define davkovaniVysunute 12
    #define davkovaniZasunute 13
    // ----------------------------------------
    // pomocne promenne
    
    void setup() {
    	// Pneumatické válce nastaveny jako výstupy
    	pinMode(dvere, OUTPUT);    
    	pinMode(davkovani, OUTPUT);   
    	pinMode(lisovani, OUTPUT);
    	pinMode(vyhazovani, OUTPUT); 
    	
    	// Snímače nastaveny jako vstupy
    	pinMode(vyhazovaniZasunute, INPUT);   //  Snímač - vyhazování zasunuté 
    	pinMode(vyhazovaniVysunute, INPUT);   //  Snímač - vyhazování vysunuté
    	pinMode(lisovaniVysunute, INPUT);   //  Snímač - lisování vysunuté
    	pinMode(lisovaniZasunute, INPUT);   //  Snímač - lisování zasunuté
    	pinMode(dvereZasunute, INPUT);  //  Snímač - dveře výstup zasunuté (otevřené)
    	pinMode(dvereVysunute, INPUT);  //  Snímač - dvěře výstup vysunuté (zavřené)
    	pinMode(davkovaniVysunute, INPUT);  //  Snímač - dávkování vysunuté
    	pinMode(davkovaniZasunute, INPUT);  //  Snímač - dávkování zasunuté
    	
    	// inicializace seriove komunikace
    	Serial.begin(9600);
    }
    
    void loop() {
    	Serial.println("krok 1 ... nastaveni vychozi stav");
    	vychozi_stav(); // nastaveni vychoziho stavu
    	Serial.println("krok 2 ... vysun valec dvere");
    	vysun_valec_dvere();
    	Serial.println("krok 3 ... vysun valec davkovani");
    	vysun_valec_davkovani();
    	Serial.println("krok 4 ... pauza 4s");
    	delay(4000); // pauza 4s
    	Serial.println("krok 5 ... zasun valec davkovani");
    	zasun_valec_davkovani();
    	Serial.println("krok 6 ... vysun valec lisovani");
    	vysun_valec_lisovani();
    	Serial.println("krok 7 ... pauza 3s");
    	delay(3000); // pauza 3s
    	Serial.println("krok 8 ... zasun valec davkovani");
    	zasun_valec_lisovani();
    	Serial.println("krok 9 ... zasun valec dvere");
    	zasun_valec_dvere(); 
    	Serial.println("krok 10 ... vysun valec vyhazovani");
    	vysun_valec_vyhazovani();
    	Serial.println("krok 11 ... zasun valec vyhazovani");
    	zasun_valec_vyhazovani();
    }
    
    void vychozi_stav(){
    	// Nastavení pneumatických válců do výchozí polohy - vše zasunuto
    	Serial.println("Nastavuji vychozi stav ...");
    	zasun_valec_davkovani();
    	zasun_valec_lisovani();
    	zasun_valec_dvere();
    	zasun_valec_vyhazovani();
    }
    
    void 	vysun_valec_dvere() {
    	Serial.println("Vysouvam valec dvere ...");
    	while(digitalRead(dvereVysunute)==0) {
    		digitalWrite(dvere, LOW);
    	}
    	Serial.println("Vysouvam valec dvere ... hotovo");
    }
    
    void 	vysun_valec_davkovani() {
    	Serial.println("Vysouvam valec davkovani ...");
    	while(digitalRead(davkovaniVysunute)==0) {
    		digitalWrite(davkovani, LOW);
    	}
    	Serial.println("Vysouvam valec davkovani ... hotovo");
    }
    
    void 	zasun_valec_davkovani() {
    	Serial.println("Zasouvam valec davkovani ...");
    	while(digitalRead(davkovaniZasunute)==0) {
    		digitalWrite(davkovani, HIGH);
    	}
    	Serial.println("Zasouvam valec davkovani ... hotovo");
    }
    
    void 	vysun_valec_lisovani() {
    	Serial.println("Vysouvam valec lisovani ...");
    	while(digitalRead(lisovaniVysunute)==0) {
    		digitalWrite(lisovani, LOW);
    	}
    	Serial.println("Vysouvam valec lisovani ... hotovo");
    }
    
    void 	zasun_valec_lisovani() {
    	Serial.println("Zasouvam valec lisovani ...");
    	while(digitalRead(lisovaniZasunute)==0) {
    		digitalWrite(lisovani, HIGH);
    	}
    	Serial.println("Zasouvam valec lisovani ... hotovo");
    }
    
    void 	zasun_valec_dvere() {
    	Serial.println("Zasouvam valec dvere ...");
    	while(digitalRead(dvereZasunute)==0) {
    		digitalWrite(dvere, HIGH);
    	}
    	Serial.println("Zasouvam valec dvere ... hotovo");
    }
    
    void 	vysun_valec_vyhazovani() {
    	Serial.println("Vysouvam valec vyhazovani ...");
    	while(digitalRead(vyhazovaniVysunute)==0) {
    		digitalWrite(vyhazovani, LOW);
    	}
    	Serial.println("Vysouvam valec vyhazovani ... hotovo");
    }
    
    void 	zasun_valec_vyhazovani() {
    	Serial.println("Zasouvam valec vyhazovani ...");
    	while(digitalRead(vyhazovaniZasunute)==0) {
    		digitalWrite(vyhazovani, HIGH);
    	}
    	Serial.println("Zasouvam valec vyhazovani ... hotovo");
    }
    
    odpověď na: Jak naprogramovat ESP8266 #8292
    Nasranek
    Účastník

    Pokud vládneš jazykem polským 🙂
    tak tady máš 3 videjka


    včetně dokumentace pod videem

    odpověď na: Klon? ano ne #8291
    Nasranek
    Účastník

    Faktura ti přijde z PayPal a když to celníci chcou tak jim to pošleš jako pdf
    (prostě si to vytiskneš jako pdf a pošleš s přílohou).
    Když budeš clít poprvé tak ti přijde dopis , potom už jen mail.

    odpověď na: Nahrání bootloaderu do atmega328 #8288
    Vojtěch Vosáhlo
    Účastník

    Je pravda že je to taková nehezky začarovaná smyčka ale neleze mi do hlavy jak jsem to teda dělal já ? arduino ani jiný programátor jsem rozhodně nepoužil…

    odpověď na: Přerušení #8285
    Dupla
    Účastník

    Když myslíš. No, uvidíme.
    V příloze posílám poupravený tvůj diagram.
    Na začátku bych spíš definoval ZASUŇ všechny válce, jsou totiž v podstatě kolmo na sebe a mohli by se zkřížit tak, jak se mi to děje u připojení mojí třetí podmínky v mém kódu. Jinak pozor, u válců je obrácená logika: LOW – vysuň, HIGH – zasuň, u snímačů je to normálně.
    Ano je to magnetický snímač – svítí/nesvítí.
    Stop tlačítko tam není.

    odpověď na: Přerušení #8283
    posjirka
    Účastník

    Přerušení to pravděpodobně neovlivňuje.
    Spíš bych to viděl na nevhodně strukturovaný program.
    celá tato logika je postavena na principu, že všechno jde přesně po sobě.
    To bohužel není pravda a v reálném světě je tu spousta zpoždění, zákmitů a vůlí, které to narušují.
    Nakreslil jsem do hrubého diagramu jak chápu tvůj požadavek.
    prosím podívej se na to a pokud to souhlasí tak bych zkusil navrhnou jiný program a můžeme to odzkoušet.
    Je to jen opis toho co jsi mi poslal, logika programu bude potom jiná.
    Určitě budu na začátku definovat výchozí stav (vysuň všechny válce), průběžněš kontrolovat celkový stav zařízení a vyhodnocovat případnou odchylku od požadovaného stavu (porucha).

    Ještě mě napadá jaké používáš čidla detekce koncových stavů válců? podle popisu mi to připadá jako kontrola svítí/nesvití signálka automatu.
    Máš tam i nějáké „STOP“ tlačítko? Pamatuj na bezpečnost ….

    odpověď na: Nahrání bootloaderu do atmega328 #8282
    posjirka
    Účastník

    je kouzelné jak se kruh uzavřel a na konci jsem se vrátili k updatu firmware přes arduino 🙂

    odpověď na: Nahrání bootloaderu do atmega328 #8281
    bot
    Účastník

    Podařilo se mi aktualizovat USBasp přes arduino, ani nevím jak. Nic méně, už jsem nahrál bootloader do čipu a i sketch(vše proběhlo v pořádku :D).

    Děkuji všem zdejším mudrcům, za jejich nevídanou ochotu a čas strávený nad tím.

    odpověď na: Přerušení #8280
    Dupla
    Účastník

    Vyzkoušel jsem už několik různých variací kódu ať už s přerušením, bez něj, s vnořenými podmínkami, nebo zvlášť. Nic z toho nefungovalo správně.
    Jak říkám, první dvě podmínky v kódu, který uvádím výše fungují správně, jakmile připojím tu třetí podmínku, tak se to celé rozhodí. Z důvodu, že v prvních dvou podmínkách používám válce připojené na piny 2 a 3, což jsou piny obsahující přerušení, tak mám podezření, že to bude tím.

    K tomu, co by měl program dělat.
    Každý ze 4 pneumatických válců má 2 koncové snímače polohy. Na začátku kontroluji, jestli je vysunutý válec „dvere“, pokud není, měl by se zasunout, když se zasune, měl by zůstat v té poloze. Na něj by měl navázat válec „davkovani“, vysunout se, počkat ve vysunuté poloze např. ty 4 vtěřiny a pak se zasunout. Po jeho zasunutí by se měl vysunout válec „lisovani“, zase nějakou dobu např. 3 vteřiny setrvat ve vysunuté poloze a poté se zasunout. Následovat by mělo zasunutí prvního válce „dvere“ a poté vysunutí a hned zasunutí válce „vyhazovani“. A tak by to mělo jet pořád dokola.

    odpověď na: Přerušení #8279
    posjirka
    Účastník

    no možná ještě jeden bod:
    5. když to te´d sjíždím ten tvůj kod tak ty se snažíš „krokovat“ na základě nějákých opakujících se podmínek. šlo by napsat popis funkce toho stroje ně jednotlivých kroků?
    např. krok č.1 – kontrola že všechny písty jsou vysunuté, pokud ne všechny vsuň.
    krok č.2 – dávkování == 1
    krok č.3 ….

    a pak si jen uděláme proměnnou „krok“ a na základně aktuálního stavu budeme postupně celý proces krokovat ….

    odpověď na: Přerušení #8278
    posjirka
    Účastník

    zkusím se do toho vložit.
    Přerušení je proces, kdy dojde k dočasnému přerušení hlavní smyčky programu, provede se nějáká událost a po její ukončení pokračuje dále.
    Přerušení je více typů a je třeba s nim jednat opatrně. Může být nejen od pinů, ale i od přetečení registru, příchodu seriové komunikace na UART nebo I2C sběrnici, …
    Arduino má v základu nastavené pro UNO pouze 2 piny na přerušení, ale můžeš si je změnit, nebo detekovat celý 1 port (A, B, C nebo D). Rozhodně to není nic pro začátk.V tomto případě je to funkce řekl bych zbytečná.
    Mnohem užitečnější bude nezdržovat smyčku funkci delay a radši pracovat s rychlou smyčkou.

    Delay je totiž jen symčka plná „NOP“ takže procesor vlastně jen počítá jak dlouho dělá/nedělá nic.

    Rádi ti pomůžeme ale pojdmě na vše popořádku:
    1, napiš nám prosím co má program přesně dělat (trochu podrobněji)
    2, je třeba to zjednodušit a trochu si vypomoct pomocnými proměnými (např. si definuj proměnou „vysun_pist_1“, kde její hodnoty 1 např.znamena vysuń, hodnota 0 nic nedělej, 2 zasuň.) dá se pak mnohem lépe reagovat na podmínky.
    3. zbytečně si dubluješ stejné podmínky např. „digitalRead(dvereVysunute) == HIGH “ Vykašli se na to a použij vnořené podmínky:
    if (……){
    if (….) {
    } else {
    }
    }
    prostě se snaž si 1 podmínku vkládat pouze 1x a neopakovat.
    4. není špatné si to nakreslit na papír do jednoduchého vývojového diagramu, pak ti spoustu věcí dojde za pochodu.

    Co ty na to?

    odpověď na: Nahrání bootloaderu do atmega328 #8277
    Vojtěch Vosáhlo
    Účastník

    No je pravda že to je asi kravina, to usb je přes firmware… Pak už asi nezbývá nic jiného než druhý programátor, lidi to dělají i arduinem tak to můžete zkusit.

    odpověď na: Nahrání bootloaderu do atmega328 #8276
    bot
    Účastník

    Propojil jsem piny, ale když připojím programátor do usb s propojenými piny (nesvítí led a OS nerozezná zařízení) v avrdudess při detectu vyskočí toto:
    „Unable to detect MCU

    avrdude.exe: error: could not find USB device with vid=0x16c0 pid=0x5dc vendor=’www.fischl.de‘ product=’USBasp‘

    avrdude.exe done. Thank you.“

    Když piny propojím, až po připojení do USB. Tak výsledek detectu je:
    „Unable to detect MCU

    avrdude.exe: set SCK frequency to 1500000 Hz
    avrdude.exe: warning: cannot set sck period. please check for usbasp firmware update.
    avrdude.exe: error: programm enable: target doesn’t answer. 1
    avrdude.exe: initialization failed, rc=-1
    Double check connections and try again, or use -F to override
    this check.

    avrdude.exe done. Thank you.“

    odpověď na: Nahrání bootloaderu do atmega328 #8275
    Vojtěch Vosáhlo
    Účastník

    Ok, pokud tyhle dva piny propojíte. Dejte tam něco co se pak dá jednoduše odstranit. S propojenými piny to zkuste připojit do pc, zapnout avrdudess, dát programmer jako usbasp a u chipu detect. I když to v žádném návodu není popsáno, mělo by to najít tu megu 8. Opět to zkuste a budem pokračovat.

    odpověď na: Nahrání bootloaderu do atmega328 #8274
    bot
    Účastník

    Ano máte pravdu. Je tam atmega8a, takže jeden neosazený pin je reset(PIN29) a druhý PB2(PIN14).

    odpověď na: Nahrání bootloaderu do atmega328 #8273
    Vojtěch Vosáhlo
    Účastník

    Předpokládal bych že ten náš ztracený jumper jsou ty 2 neosazené piny na spodní straně desky. Zkuste za pomoci pinoutu toho procesoru co je osazený přeměřit ty dva piny. Jeden by měl jít na reset procesoru a druhý na PB2. Můžete napsat progress 😉

    odpověď na: Nahrání bootloaderu do atmega328 #8272
    bot
    Účastník

    Fotky jsou zde: https://postimg.org/image/bq7cnr073/ , https://postimg.org/image/9mwxg30e7/

    Kupoval jsem ho z ebay: http://www.ebay.com/itm/130682846209?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

    Mohl by jste mi prosím poradit ohledně updateu?

    Návody, které jsem našel vyžadovali druhý programátor a bojím se, abych si ten oc mám nějak nezničil.

    Děkuji.

    odpověď na: Nahrání bootloaderu do atmega328 #8271
    Vojtěch Vosáhlo
    Účastník

    Nějaký odkaz na to co jste koupil, nebo obrázek? Já neznám žádné nové USBasp a vždy jsem firmware musel updatovat. Ale jde aktualizovat přes usb, není potřeba žádný programátor.

    odpověď na: Nahrání bootloaderu do atmega328 #8267
    bot
    Účastník

    Tak už mi přišel programátor USBasp.

    Když jsem zkoušel vypálit bootloader, hlásí to chybu: „avrdude: warning: cannot set sck period. please check for usbasp firmware update.“

    Co jsem tak četl měl by to být problém u starších USBasp programátoru, kterými nešli programovat čipy, běžící o více než 1/2 clock samotného USBasp. Řešením bylo aktualizovat firmware za pomocí jiného programátoru a přepnutím jumperu. Dále jsem se dočetl, že nové USBasp si detekují clock sami a už není nutný update. Což by vysvětlovalo proč na USBasp žádný jumpery nemám.

    Nevíte kde může být problém?

    Děkuji

    BlindP
    Účastník

    Taky přihodím 🙂

    # define RELE1_PIN 5
    # define RELE2_PIN 6
    # define TLAC1_PIN 2
    # define TLAC2_PIN 3
    
    unsigned long pre_mill = 0;
    const long interval = 30000;
    
    void setup() {
    	Serial.begin(9600);
    	pinMode(TLAC1_PIN, INPUT_PULLUP);
    	pinMode(TLAC2_PIN, INPUT_PULLUP);
    	pinMode(RELE1_PIN, OUTPUT);
    	pinMode(RELE2_PIN, OUTPUT);
    	digitalWrite(RELE1_PIN, HIGH);
    	digitalWrite(RELE2_PIN, HIGH);
    }
    
    void loop() {
    	if(digitalRead(TLAC1_PIN) == LOW) {
    		pre_mill = millis();
    		digitalWrite(RELE2_PIN, HIGH);
    		digitalWrite(RELE1_PIN, LOW);
    		//Serial.println("Vypinam rele c.2, zapinam rele c. 1");
    	}
    	if(digitalRead(TLAC2_PIN) == LOW) {
    		pre_mill = millis();
    		digitalWrite(RELE1_PIN, HIGH);
    		digitalWrite(RELE2_PIN, LOW);
    		//Serial.println("Vypinam rele c.1, zapinam rele c. 2");
    	}
    	if(millis() - pre_mill >= interval) {
    		digitalWrite(RELE1_PIN, HIGH);
    		digitalWrite(RELE2_PIN, HIGH);
    		//Serial.println("Cas vyprsel vypinam obe dve rele!!!");
        
    	}
    }
    
    posjirka
    Účastník

    není zač ….

    milano
    Účastník

    Děkuji moc. Když na to takhle koukám, tak mi to je jasné, ale sám bych to asi zatím nenapsal. Jenom musím přehodit obráceně spínání relé. Mám tam ty čínský dvojrelé a ty jsou ovládané obráceně. To už je ale prkotina. Ještě jenou moc děkuji 🙂

    posjirka
    Účastník

    zkus jako zaklad toto:

    // program pro ovladani 2 rele pomoci 2 tlacitek
    // v01 by JP 9/2016
    // program ovlada 2 rele s tím, ze:
    // - stiskem tlacitka 1 se na nastavenou dobu sepne rele 1
    // - stiskem tlacitka 2 se na nastavenou dobu sepne rele 2
    // - kdyz behem sepnuti rele 1 stisknu tlacitko 2 tak se rele 1 vypne a sepne se rele 2
    // - kdyz behem sepnuti rele 2 stisknu tlacitko 1 tak se rele 2 vypne a sepne se rele 1
    
    int RELE_1 = 10; // pin pro  rele 1
    int RELE_2 = 11; // pin pro rele 2
    int TLACITKO_1 = 4; // pin pro tlacitko 1
    int TLACITKO_2 = 3; // pin pro tlacitko 2
    int ZAPNI_RELE_1 = 0; // 0 - vypnuto
    int ZAPNI_RELE_2 = 0; // 0 - vypnuto
    unsigned long CAS_VYPNUTI_RELE_1 = 0; // kdy ma rele 1 vypnout (nastavuje se v době sepnuti tlacitka)
    unsigned long CAS_VYPNUTI_RELE_2 = 0; // kdy ma rele 2 vypnout (nastavuje se v době sepnuti tlacitka)
    unsigned long DELKA_SEPNUTI_RELE = 3000; // jak dlouho maji byt rele sepnute (v milisekundach )
    
    void setup()
    {
    	pinMode(RELE_1, OUTPUT); // nastaveni pinu jako vystup
    	pinMode(RELE_2, OUTPUT); // nastaveni pinu jako vystup
    	pinMode(TLACITKO_1, INPUT_PULLUP);  // nastaveni pinu jako vstup s interním pullup odporem
    	pinMode(TLACITKO_2, INPUT_PULLUP);  // nastaveni pinu jako vstup s interním pullup odporem
    }
    
    void loop()
    {
    	// ovladani tlacitka 1
    	if (digitalRead(TLACITKO_1) == 0 ){	// když je stisknuto tlačtíko 1 
    		CAS_VYPNUTI_RELE_1 = millis() + DELKA_SEPNUTI_RELE;
    		ZAPNI_RELE_1 = 1; // povoleni k sepnuti rele 1
    		ZAPNI_RELE_2 = 0; // preventivne zakaz zapnuti rele 2
    	}
    	if (ZAPNI_RELE_1 == 1) {	// rele 1 ma byt sepnute
    		if (millis() > CAS_VYPNUTI_RELE_1) {	// uz pretekl cas zapnuti rele 1
    			ZAPNI_RELE_1 = 0;		// zrus pozadavek na zapnuti rele 1
    			digitalWrite(RELE_1, LOW); // vypni rele 1
    		} 
    		else {
    			digitalWrite(RELE_1, HIGH); // zapni rele 1
    		}
    		
    	} 
    	else {
    		digitalWrite(RELE_1, LOW); // vypni rele 1
    	}
    	
    	// ovladani tlacitka 2
    	if (digitalRead(TLACITKO_2) == 0 ){	// když je stisknuto tlačtíko 2 
    		CAS_VYPNUTI_RELE_2 = millis() + DELKA_SEPNUTI_RELE;
    		ZAPNI_RELE_2 = 1; // povoleni k sepnuti rele 2
    		ZAPNI_RELE_1 = 0; // preventivne zakaz zapnuti rele 1
    	}
    	if (ZAPNI_RELE_2 == 1) {	// rele 2 ma byt sepnute
    		if (millis() > CAS_VYPNUTI_RELE_2) {	// uz pretekl cas zapnuti rele 2
    			ZAPNI_RELE_2 = 0;		// zrus pozadavek na zapnuti rele 2
    			digitalWrite(RELE_2, LOW); // vypni rele 2
    		} 
    		else {
    			digitalWrite(RELE_2, HIGH); // zapni rele 2
    		}
    		
    	} 
    	else {
    		digitalWrite(RELE_2, LOW); // vypni rele 1
    	} 
    } 
Aktuálně je na stránce zobrazeno 30 příspěvků - 1,621. až 1,650. (celkem z 2,768)