Dzień 6 - Instrukcje warunkowe

Dzień 6 - Instrukcje warunkowe
Photo by Marília Castelli / Unsplash

INSTRUKCJA WARUNKOWA IF ... THEN

czyli wykonywanie działania, jeśli jest spełniony warunek.

Najprostsza instrukcja warunkowa ma składnię:
if (jeśli spełniony jest jakiś warunek) then (to wykonaj jakieś działanie )

po if wykorzystujemy operatory porównania takiej jak równa się, nie równa się, większy, mniejszy, większy bądź równy, mniejszy bądź równy.

OperatorKrótki opis
>... jest większe od ...
>=... jest większe lub równe niż ...
<... jest mniejsze od ...
<=... jest mniejsze lub równe niż ...
==... jest równe ...
!=... jest różne od ...


Po then określamy działanie.

Instrukcję if then znajdziemy na zakładce control w Tinkercadzie.


ZADANIE 1

Program, który wywołuje miganie diody x3 po naciśnięciu przycisku:

// C++ code
//
void setup()
{
pinMode(8, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
if (digitalRead(8) == HIGH) {
digitalWrite(LED_BUILTIN, HIGH);
delay(500); // Wait for 500 millisecond(s)
digitalWrite(LED_BUILTIN, LOW);
delay(500); // Wait for 500 millisecond(s)
digitalWrite(LED_BUILTIN, HIGH);
delay(500); // Wait for 500 millisecond(s)
digitalWrite(LED_BUILTIN, LOW);
delay(500); // Wait for 500 millisecond(s)
digitalWrite(LED_BUILTIN, HIGH);
delay(500); // Wait for 500 millisecond(s)
digitalWrite(LED_BUILTIN, LOW);
}
}


ZADANIE 2

// C++ code
//
int STAN = 0;

void setup()
{
pinMode(3, INPUT);
pinMode(2, OUTPUT);
Serial.begin(9600);

STAN = 0;
}

void loop()
{
if (digitalRead(3) == 1 && STAN == 0) {
STAN = 1;
digitalWrite(2, HIGH);
Serial.println(STAN);
}
delay(200); // Wait for 200 millisecond(s)
if (digitalRead(3) == 1 && STAN == 1) {
STAN = 0;
digitalWrite(2, LOW);
Serial.println(STAN);
}
delay(200); // Wait for 200 millisecond(s)
}


INSTRUKCJA WARUNKOWA IF ... THEN ... ELSE

czyli wykonywanie działania, jeśli jest spełniony warunek, a w przeciwnym wypadku wykonujemy inne działanie.

Najprostsza instrukcja warunkowa ma składnię:
if (jeśli spełniony jest jakiś warunek) then (to wykonaj jakieś działanie ) else (w przeciwnym wypadku wykonaj inne działanie )


ZADANIE 3

// C++ code
//

int przycisk = 3; // Pin, do którego podłączony jest przycisk
int czerwony = 2; // Pin do czerwonej diody
int zielony = 4; // Pin do zielonej diody

void setup() {
pinMode(przycisk, INPUT); // Ustawienie pinu przycisku jako wejście
pinMode(czerwony, OUTPUT); // Ustawienie pinu czerwonej diody jako wyjście
pinMode(zielony, OUTPUT); // Ustawienie pinu zielonej diody jako wyjście
}

void loop() {
// Odczyt stanu przycisku
int buttonState = digitalRead(przycisk);

if (buttonState == HIGH) {
// Jeśli przycisk jest wciśnięty, zapal zieloną diodę, a zgaś czerwoną
digitalWrite(zielony, HIGH);
digitalWrite(czerwony, LOW);
} else {
// Jeśli przycisk jest puszczony, zapal czerwoną diodę, a zgaś zieloną
digitalWrite(zielony, LOW);
digitalWrite(czerwony, HIGH);
}
}


ZADANIE 4

// C++ code
//

int przycisk = 3; // Pin, do którego podłączony jest przycisk
int stanprzycisku = 0; // Zmienna do przechowywania stanu przycisku
bool rzucaniekoscia = false; // Flaga, żeby rzut kością był jednorazowy po wciśnięciu

void setup() {
Serial.begin(9600); // Rozpoczęcie komunikacji szeregowej
pinMode(przycisk, INPUT); // Ustawienie pinu przycisku jako wejście
Serial.println("Wynik rzutu koscia:");
}

void loop() {
stanprzycisku = digitalRead(przycisk); // Odczyt stanu przycisku

if (stanprzycisku == HIGH && !rzucaniekoscia) {
// Jeśli przycisk jest wciśnięty i rzut jeszcze nie został wykonany
int result = random(1, 7); // Losowanie liczby od 1 do 6
Serial.println(result); // Wyświetlenie wyniku na monitorze
rzucaniekoscia = true; // Ustawienie flagi, żeby nie powtarzać rzutu bez puszczenia przycisku
}

if (stanprzycisku == LOW && rzucaniekoscia) {
// Jeśli przycisk jest puszczony po wykonaniu rzutu
Serial.println("Aby ponownie rzucic koscia, wcisnij przycisk.");
rzucaniekoscia = false; // Zresetowanie flagi, aby możliwy był kolejny rzut
}
}


ZADANIE 5

// C++ code
//

// Piny dla sygnalizacji świetlnej dla pojazdów
int czerwoneSwiatlo = 8;
int zolteSwiatlo = 9;
int zieloneSwiatlo = 10;

// Piny dla sygnalizacji dla pieszych
int czerwoneDlaPieszych = 6;
int zieloneDlaPieszych = 7;
int pinPrzycisku = 3; // Pin dla przycisku

// Zmienna do obsługi przycisku i stanu sygnalizacji
bool przyciskWcisniety = false;
unsigned long czasOstatniejZmiany = 0;
int stanSwiatla = 0; // 0 - czerwone, 1 - czerwone + żółte, 2 - zielone, 3 - żółte
bool trybPieszych = false;

void setup() {
// Ustawienie pinów dla świateł jako wyjścia
pinMode(czerwoneSwiatlo, OUTPUT);
pinMode(zolteSwiatlo, OUTPUT);
pinMode(zieloneSwiatlo, OUTPUT);

// Ustawienie pinów dla świateł dla pieszych jako wyjścia
pinMode(czerwoneDlaPieszych, OUTPUT);
pinMode(zieloneDlaPieszych, OUTPUT);

// Ustawienie pinu przycisku jako wejścia
pinMode(pinPrzycisku, INPUT);

// Na początku piesi mają czerwone światło
digitalWrite(czerwoneDlaPieszych, HIGH);
digitalWrite(zieloneDlaPieszych, LOW);

// Na początku ustaw sygnalizację na czerwone światło
digitalWrite(czerwoneSwiatlo, HIGH);
digitalWrite(zolteSwiatlo, LOW);
digitalWrite(zieloneSwiatlo, LOW);
czasOstatniejZmiany = millis();
}

void loop() {
// Sprawdzenie, czy przycisk został wciśnięty
if (digitalRead(pinPrzycisku) == HIGH && !przyciskWcisniety) {
przyciskWcisniety = true;
trybPieszych = true; // Włącz tryb sygnalizacji dla pieszych
}

// Obsługa sygnalizacji dla pieszych
if (trybPieszych) {
sygnalizacjaDlaPieszych();
trybPieszych = false;
przyciskWcisniety = false; // Resetowanie stanu przycisku
}

// Obsługa sygnalizacji świetlnej dla pojazdów
if (!trybPieszych) {
if (millis() - czasOstatniejZmiany > 5000) { // Co 5 sekund
czasOstatniejZmiany = millis();
sekwencjaSygnalizacji();
}
}
}

void sekwencjaSygnalizacji() {
// Obsługa sygnalizacji dla pojazdów
if (stanSwiatla == 0) {
// Czerwone światło
digitalWrite(czerwoneSwiatlo, HIGH);
digitalWrite(zolteSwiatlo, LOW);
digitalWrite(zieloneSwiatlo, LOW);
stanSwiatla = 1;
} else if (stanSwiatla == 1) {
// Czerwone i żółte światło
digitalWrite(czerwoneSwiatlo, HIGH);
digitalWrite(zolteSwiatlo, HIGH);
digitalWrite(zieloneSwiatlo, LOW);
stanSwiatla = 2;
} else if (stanSwiatla == 2) {
// Zielone światło
digitalWrite(czerwoneSwiatlo, LOW);
digitalWrite(zolteSwiatlo, LOW);
digitalWrite(zieloneSwiatlo, HIGH);
stanSwiatla = 3;
} else if (stanSwiatla == 3) {
// Żółte światło
digitalWrite(czerwoneSwiatlo, LOW);
digitalWrite(zolteSwiatlo, HIGH);
digitalWrite(zieloneSwiatlo, LOW);
stanSwiatla = 0;
}
}

void sygnalizacjaDlaPieszych() {
// Czerwone światło dla pojazdów
digitalWrite(czerwoneSwiatlo, HIGH);
digitalWrite(zolteSwiatlo, LOW);
digitalWrite(zieloneSwiatlo, LOW);

// Odczekanie 2 sekund
delay(2000);

// Zielone światło dla pieszych przez 3 sekundy
digitalWrite(czerwoneDlaPieszych, LOW);
digitalWrite(zieloneDlaPieszych, HIGH);
Serial.println("Piesi ruszaja");
delay(3000);

// Miganie zielonego światła dla pieszych
for (int i = 0; i < 3; i++) {
digitalWrite(zieloneDlaPieszych, LOW);
delay(500);
digitalWrite(zieloneDlaPieszych, HIGH);
delay(500);
}

// Włączenie czerwonego światła dla pieszych
digitalWrite(zieloneDlaPieszych, LOW);
digitalWrite(czerwoneDlaPieszych, HIGH);

// Powrót do normalnej sygnalizacji dla pojazdów
czasOstatniejZmiany = millis();
}


DO OGLĄDANIA, DO POCZYTANIA:

Elektroniczna | Robisz.to Wiki
To tutaj pojawią się linki do niezbędnych dla każdej osoby która chce zajmować się elektroniką.
Arduino Reference - Arduino Reference
The Arduino programming language Reference, organized into Functions, Variable and Constant, and Structure keywords.