Close

Odpověď na: Přerušení

Úvodní stránka Fórum Vaše projekty Arduino Přerušení 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ý.
}