Close

Dotaz od začátečníka – podmínka if

Úvodní stránka Fórum Vaše projekty Arduino Dotaz od začátečníka – podmínka if

  • Toto téma obsahuje celkem 3 odpovědi. Do diskuze (3 diskutující) se naposledy zapojil uživatel barak a poslední změna proběhla před 8 roky a 2 měsíci.
Aktuálně jsou na stránce zobrazeny 4 příspěvky - 1. až 4. (celkem z 4)
  • Autor
    Příspěvky
  • #5904
    m.myska
    Účastník

    Nazdar všichni, seznamuji se s arduinem, koupil jsem si první desku a nyní mám stav, kdy zkoušim diodu na pinu 2. Bliká mi po třech vteřinách, to není problém. Problém mám, když vypisuju na serial stav HIGH nebo LOW. To mi prostě píše pouze jeden stav po 3 vteřinách a nic víc. Čekal jsem, že bude odesílat střídavě stavy sviti a nesviti. Ted chodí jen svítí každé 3s. Asi nějaká začátečnická hloupost 🙂
    Kód:
    int led = 2;
    int stav = digitalRead(2);
    void setup() {
    // put your setup code here, to run once:
    pinMode(led, OUTPUT); // nastavení výstupu portu 2
    Serial.begin(9600);

    }

    void loop() {
    // put your main code here, to run repeatedly:
    digitalWrite(led, HIGH); // zapnutí napětí na port 2
    delay(3000);
    digitalWrite(led, LOW); // vypnutí napětí na port 2
    delay(3000);

    if (stav == HIGH)
    {
    Serial.println(„Sviti“);
    }
    else if (stav == LOW)
    {
    Serial.println(„Nesviti“);
    }
    else
    {
    Serial.println(„Nevim“);
    }

    #5911
    edmond
    Účastník

    Osobně si myslím, že Vám chodí stále že nesvítí. 🙂

    Váš program pracuje následovně:

    napětí na pin 2
    3 sekundy se nic neděje
    vypnutí pinu 2
    3 sekundy se nic neděje
    pak se ptáte v jakém stavu je LED a ta je vždy v tomto stavu vypnuta

    #5912
    m.myska
    Účastník

    Opravdu mi chodí v serial monitoru svítí 🙂 , ale to je asi fuk.
    Kde a jak tedy položit podmínku k výpisu, aby reagovala po stavu HIGH i LOW?
    Díky.

    #5913
    barak
    Účastník

    Mozna od temy ale take podminka IF.
    Chtel jsem pouzit IF. Sledoval jsem hodnotu y AO a potom dal IF, ale zacyklovalo se, stale cetlo posledni hodnotu. Taj sem to vyresil nize. Da se to vyresit aby se necyklovalo

    const int lamdaSig = A0; // Analogový vstup je nastaven na pi A0 pre lambdu sondu
    int napatie = 0; // Proměná pro hodnotu přečtenou z A0
    int led2 = 2;
    int led3 = 3;
    int led12=12;
    const int sensorPin = A1;
    const float baseLineTemp = 20;
    int t;

    void setup() {
    // Nastaví rychlost komunika na sériovám portu na 9600 bps:
    Serial.begin(9600);
    pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
    pinMode(led12, OUTPUT);
    }

    void loop() {

    int sensorVal = analogRead(sensorPin);

    napatie = analogRead(lamdaSig); // přečte hodnotu z A0 z lambda sondy
    napatie = ((napatie * 500.0) / 0.1) / 1024; //vysledok v mV
    // aby jsme videli vysledek, hodnotu odešleme přes sériový port
    Serial.print(“ napatie = “ ); // zapiše text hodnota =
    Serial.println(napatie); // zapiše proměnou hodnotu/napatie

    float teplota = ((sensorVal*5000.0)/30) /1024;
    Serial.print(“ teplota = „);

    Serial.println(teplota);
    delay(1000); // čekej 1000ms

    t=constrain(teplota, 20, 200); //ked je teplota mensi ako nastavene tak vrati 25,
    Serial.print(„upravene = „);
    Serial.println(t);

    switch(t){
    case 20:
    digitalWrite(led12, HIGH); //blika ked nie je teplota
    delay(1000);
    digitalWrite(led12, LOW);
    digitalWrite(led3,HIGH); //teplota mensi nez pozadovana otvari sa klapka1
    break;

    default: //ked je teplota v roymeyi nastavene par contrain
    digitalWrite(led3, LOW); //zatvori klapku1
    if (napatie < 200) { //mensi tak otvara klapku
    digitalWrite(led2, HIGH);
    delay(500);
    digitalWrite(led2, LOW); //klapka sa otvara len urcity cas pak zatvori
    }

    if (napatie > 200) { //vetsi zatvara klapku
    digitalWrite(led2, LOW);
    }

    if (napatie > 500) { //vetsi zatvara klapku
    digitalWrite(led3, HIGH);
    delay(500);
    digitalWrite(led3, LOW); //cas delay otvorena klapka pak zatvori
    }
    if (napatie < 500) {
    digitalWrite(led3, LOW);
    }

    delay(1000); //nacha reagovat po delay pak nove meranie

    break;

    }

Aktuálně jsou na stránce zobrazeny 4 příspěvky - 1. až 4. (celkem z 4)
  • Pro reakci na toto téma se musíte přihlásit.