Skocz do zawartości

Uzależnienie wykonania funkcji od drugiej funkcji[Uwaga, świeżak]


Pomocna odpowiedź

Napisano

Zaczynam zabawę z Arduino, choć coś tam pamiętam sprzed lat z TurboPascala. Robię sobie programik do windy od nawigacji w aucie i doszedłem do ściany. Szukałem w sieci, ale jakoś nie mogę sobie tego co znalazłem ułożyć.

Ale do clue problemu.

Mam program wykonujący w pętli loop dwie pary funkcji IF. Obie pary wykonują to samo, tylko dla innych zmiennych. Jednak chcę uzależnić wykonanie drugiej pary od tego czy jedna z funkcji pierwszej pary została wykonana czy nie.

Co to są "funkcje if"? Rozumiem, że masz na myśli warunki?

Tutaj masz przykład dwóch warunków, z których drugi się wykona tylko wtedy, kiedy wykonał się pierwszy:

if (x == 3) {
   Serial.println("pierwszy");
}
if (x == 3 && y == 2) {
       Serail.println("drugi");

}

Mam nadzieję, że to pomoże?

Polecam też zainteresowanie się jakimkolwiek kursem programowania, choćby na tym forum. Powinno to znacznie pomóc z tym i podobnymi problemami.

Co to są "funkcje if"? Rozumiem, że masz na myśli warunki?

Polecam też zainteresowanie się jakimkolwiek kursem programowania, choćby na tym forum. Powinno to znacznie pomóc z tym i podobnymi problemami.

Kurs Forbota to było pierwsze od czego zacząłem, plus inne blogi i strony. Napisałem pierwszy kod, jest jeszcze nawet nie przetestowany. I tak będę go wrzucał w kontroler po kawałku, ale że mam chwilę czasu, a nie mam teraz dostępu do kontrolera, chcę rozwiązać inne problemy.

void setup() {
 pinMode(2, INPUT_PULLUP); //włącznik
 pinMode(3, INPUT_PULLUP); //krańcówka dół
 pinMode(4, INPUT_PULLUP); //krańcówka góra
 pinMode(5, OUTPUT); //mostek H
 digitalWrite(5, LOW);
 pinMode(6, OUTPUT); //mostek H
 digitalWrite(6, LOW);
 pinMode(7, INPUT_PULLUP); //plus po stacyjce
 pinMode(8, INPUT); //wsteczny


 if (digitalRead(3) == LOW && digitalRead(4) == LOW) { //jeśli obie krańcówki nie wciśnięte
digitalWrite(5, LOW); // jedź do dołu
digitalWrite(6, HIGH);
while(digitalRead(3) == HIGH);{ //gdy krańcówka dół wciśnięta zatrzymaj
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}
 }
}

void loop() {

if (digitalRead(2) == HIGH && digitalRead(4) == HIGH) { //jeśli przycisk wciśnięty i krańcówka góra wciśnięta
   digitalWrite(5, LOW); // jedź do dołu
   digitalWrite(6, HIGH);

    while(digitalRead(3) == HIGH);{ //gdy krańcówka dół wciśnięta zatrzymaj
          digitalWrite(5, LOW);
          digitalWrite(6, LOW);
}
}

if (digitalRead(2) == HIGH && digitalRead(3) == HIGH) { //jeśli przycisk wciśnięty i krańcówka dół wciśnięta
    digitalWrite(5, HIGH); // jedź do góry
    digitalWrite(6, LOW);

     while(digitalRead(4) == HIGH);{ //gdy krańcówka góra wciśnięta zatrzymaj
           digitalWrite(5, LOW);
           digitalWrite(6, LOW);
}
}

if (digitalRead(8) == LOW && digitalRead(3) == HIGH) { //jeśli wsteczny wyłączony i krańcówka dół wciśnięta
    digitalWrite(5, HIGH); // jedź do góry
    digitalWrite(6, LOW);

     while(digitalRead(4) == HIGH);{ //gdy krańcówka góra wciśnięta zatrzymaj
           digitalWrite(5, LOW);
           digitalWrite(6, LOW);
}
}

if (digitalRead(8) == HIGH && digitalRead(4) == HIGH) { //jeśli wsteczny włączony i krańcówka góra wciśnięta
    digitalWrite(5, LOW); // jedź do dołu
    digitalWrite(6, HIGH);

     while(digitalRead(3) == HIGH);{ //gdy krańcówka dół wciśnięta zatrzymaj
           digitalWrite(5, LOW);
           digitalWrite(6, LOW);
}
} 
}

I teraz tak, potrzebuję ustawić to w ten sposób, że po wykonaniu pierwszego warunku nie będą się wykonywały trzeci i czwarty. Za to wykonają się, gdy wykonał się warunek drugi.

Może tak

boolean wykonaj=0;
   void loop() {

   if (digitalRead(2) == HIGH && digitalRead(4) == HIGH) { //jeśli przycisk wciśnięty i krańcówka góra wciśnięta
       digitalWrite(5, LOW); // jedź do dołu
       digitalWrite(6, HIGH);
       wykonaj=0;
        while(digitalRead(3) == HIGH);{ //gdy krańcówka dół wciśnięta zatrzymaj
              digitalWrite(5, LOW);
              digitalWrite(6, LOW);
    }
    }

    if (digitalRead(2) == HIGH && digitalRead(3) == HIGH) { //jeśli przycisk wciśnięty i krańcówka dół wciśnięta
        digitalWrite(5, HIGH); // jedź do góry
        digitalWrite(6, LOW);
        wykonaj=1;     
         while(digitalRead(4) == HIGH);{ //gdy krańcówka góra wciśnięta zatrzymaj
               digitalWrite(5, LOW);
               digitalWrite(6, LOW);
    }
    }

    if (digitalRead(8) == LOW && digitalRead(3) == HIGH && wykonaj) { //jeśli wsteczny wyłączony i krańcówka dół wciśnięta
        digitalWrite(5, HIGH); // jedź do góry
        digitalWrite(6, LOW);

         while(digitalRead(4) == HIGH);{ //gdy krańcówka góra wciśnięta zatrzymaj
               digitalWrite(5, LOW);
               digitalWrite(6, LOW);
    }
    }

    if (digitalRead(8) == HIGH && digitalRead(4) == HIGH && wykonaj) { //jeśli wsteczny włączony i krańcówka góra wciśnięta
        digitalWrite(5, LOW); // jedź do dołu
        digitalWrite(6, HIGH);

         while(digitalRead(3) == HIGH);{ //gdy krańcówka dół wciśnięta zatrzymaj
               digitalWrite(5, LOW);
               digitalWrite(6, LOW);
    }
    }
   }

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...