Odpověď na: Přerušení
Úvodní stránka › Fórum › Vaše projekty › Arduino › Přerušení › Odpověď na: Přerušení
31.8.2016 v 19:21
#8220
Úč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ý.
}