Close

Dupla

Vytvořené odpovědi

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

    Jak jsem již psal výše, první dvě podmínky fungují (tzn. ovládání pneumatických válců, které jsou připojeny přes cívky na piny 2 a 3). Reagují na koncové spínače a i funkce delay(); funguje správně.

    To samé bych potřeboval realizovat i s piny 4 a 5 (tzn. reagovat na koncový spínač a při vysunutí válce nějakou chvíli počkat a pak ho zase zasunout).

    Ano, vím co přerušení znamená. Mám ale podezření, že je potřeba ho realizovat i na pinech 4 a 5, aby byla funkce programu správná, protože v tomto případě, tak jak jsem Vám kód poslal si program dělá co chce. Vysunout se všechny čtyři pneumatické válce naráz. Pokud nechám jen první dvě podmínky, které ovládají válce na pinech 2 a 3 a zbytek programu zakomentuji, program funguje správně, ale jen se dvěmi válci.
    Možná přerušení nechci, ale chtěl bych tam, aby válec po vyjetí nějakou dobu počkal a to se mi nedaří realizovat. Jak to tedy udělat?

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

    Ano, s přerušením souhlasím. Také jsem ho vyzkoušel pomocí funkce attachInterrupt(); na pinech 4 a 5, které přerušení neobsahují, ale bez výsledku. Na piny 2 a 3 jsem to nezkoušel, protože přerušení obsahují.
    Zpoždění zde mám z důvodu, protože chci, aby ventil zůstal vysunutý po nějakou dobu. Funkci millis() jsem také zkoušel a bez výsledku.
    Zkoušel jsem to i rozepsat stylem: pokud jeden snímač je zhasnutý, tak vysuň ventil, až se rozsvítí, tak ho zasuň…taky to moc nefungovalo.

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

    Zde je můj kód. První dvě podmínky po zakomentování zbytku fungují správně. Když připojím třetí podmínku, tak se vše rozhodí.

    // Konstanty pro pneumatické válce
       const int dvere = 2;
       const int davkovani = 3;
       const int lisovani = 4;
       const int vyhazovani = 5;
    // ----------------------------------------
    // Konstanty pro snímače
       const int vyhazovaniZasunute = 6;
       const int vyhazovaniVysunute = 7;
       const int lisovaniVysunute = 8;
       const int lisovaniZasunute = 9;
       const int dvereZasunute = 10;
       const int dvereVysunute = 11;
       const int davkovaniVysunute = 12;
       const int davkovaniZasunute = 13;
    
    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é
    
      // Nastavení pneumatických válců do výchozí polohy - vše zasunuto
      digitalWrite(dvere, HIGH);
      digitalWrite(davkovani, HIGH);
      digitalWrite(lisovani, HIGH);
      digitalWrite(vyhazovani, HIGH);
    }
    
    void loop() {
      
      if(digitalRead(dvereZasunute) == HIGH)
      {
          digitalWrite(dvere, LOW);      // pokud svítí senzor, že je válec zasunutý, vysuň ho
      }
      
      if(digitalRead(dvereVysunute) == HIGH && digitalRead(davkovaniZasunute) == HIGH)
      {
          digitalWrite(davkovani, LOW);      // pokud svítí senzor, že jsou dveře zasunuté a senzor dávkování svítí pro zasunutí, vysuň dávkování, počkej 
          delay(4000);
          digitalWrite(davkovani, HIGH);    // a pak ho zase zasuň
      }
      // po sem kód funguje, pokud připojím následující, tak se to celé rozhodí
      if(digitalRead(dvereVysunute) == HIGH && digitalRead(davkovaniZasunute) == HIGH && digitalRead(lisovaniZasunute) == HIGH)
      {
          digitalWrite(lisovani, LOW); 
          delay(3000);
          digitalWrite(lisovani, HIGH); 
      }
      
      if(digitalRead(dvereVysunute) == HIGH && digitalRead(davkovaniZasunute) == HIGH && digitalRead(lisovaniZasunute) == HIGH)
      {
          digitalWrite(dvere, HIGH);      
      }
    
      if(digitalRead(dvereZasunute) == HIGH && digitalRead(davkovaniZasunute) == HIGH && digitalRead(lisovaniZasunute) == HIGH && digitalRead(vyhazovaniZasunute) == HIGH)
      {
          digitalWrite(vyhazovani, LOW);
      }
      
      if(digitalRead(dvereZasunute) == HIGH && digitalRead(davkovaniZasunute) == HIGH && digitalRead(lisovaniZasunute) == HIGH&& digitalRead(vyhazovaniVysunute) == HIGH)
      {
          digitalWrite(vyhazovani, HIGH);    
      }
    
      // snímače - HIGH - svítí, LOW - nesvítí,
      // pneumatické válce - HIGH - zasunutý, LOW - vysunutý.
    }
    
Aktuálně je na stránce zobrazeno 8 příspěvků - 1. až 8. (celkem z 8)