• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
"IF" nie działa
#1
Cześć

  Napisałem w Ardu już sporo programów i nigdy nie spotkałem się z problemem, a na pewno z warunkami... 
Mam funkcję dioda(stat), stat to wartość od 0 do 4 i mam zagwostkę:
dwa pierwsze warunki powinny ustawiać dla LED_1 wartość off lub on w zależności od stat, ale nie ma znaczenia czy stat to 0 czy 1 zawsze LED_1 ma wartość on... 
gdzie 
on 0
off 1
Podstawienie w funkcji zamiast LED_1 = on i LED_1 = off wartości LED_1 = 0 i LED_ 1 = 1  również nic nie zmienia. 

Gdzie jest błąd, przecież tu nie ma nic trudnego. Może coś się zmieniło w nowej wersji arduino.

Kod:
void dioda(int stat) {
  LED_2 = DATAx2;
  LED_3 = DATAx3;
  LED_4 = DATAx4;

  if (stat == 0) LED_1 = off;
  if (stat == 1) LED_1 = on;   //zazbrojone
  Serial.print("LED_1 ");  Serial.println(LED_1); 
  if (stat == 2)   {if (millis() - ledMillis >= 500) {LED_1 = !LED_1; ledMillis = millis();}  }
  if (stat == 3)   {if (millis() - ledMillis >= 500) {LED_2 = !LED_2; ledMillis = millis();}  }  //garaz aktywny
  if (stat == 4)   {LED_2 = on; LED_3 = on; LED_4 = on; }  //pralka
  if (DATAx5 == 0) {LED_2 = on; LED_3 = on; LED_4 = on; }  //GAZ CZAD
  Serial.print("Stat 2 ");  Serial.println(stat);
  Serial.print("LED_1 ");  Serial.println(LED_1); 

  digitalWrite(led_sterownik, LED_1);
  digitalWrite(DO_led,      !LED_1);
  digitalWrite(led_gar1,     LED_2);
  digitalWrite(led_gar2,     LED_3);
  digitalWrite(led_przej,    LED_4);

  // ???? digitalWrite(DO_przek, HIGH);
 
}
 
Odpowiedź
#2
Wychodzi na to, że w funkcji digitalWrite(pin, value), parametr value ustawiasz na on lub off, a powinno być HIGH lub LOW.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
(02-05-2021, 23:29)Robson Kerman napisał(a): Wychodzi na to, że w funkcji digitalWrite(pin, value), parametr value ustawiasz na on lub off, a powinno być HIGH lub LOW.
Na początku zdefiniowałem #define on 0 i #define off 1. Poza tym gdy stat = 2 dioda LED_1 przyjmuje na zmianę 0 i 1 i to działa poprawnie
 
Odpowiedź
#4
Kod:
void dioda(int stat)
{
  LED_2 = DATAx2;
  LED_3 = DATAx3;
  LED_4 = DATAx4;

  Serial.print("Stan ma wartosc : ");
  Serial.println(stat);
Serial.print(LED_1 ma wartosc : ");

  byte off = 0;
  byte on  = 1;

  switch (stat)
  {
     case  0  :  LED_1 = off;
                 Serial.println(LED_1);
                 break;

     case  1  :  LED_1 = on;
                 Serial.println(LED_1);
                 break;

     case  2  :  {if (millis() - ledMillis >= 500) {LED_1 = !LED_1; ledMillis = millis();}  }
                 break;

    case  4  :  {if (millis() - ledMillis >= 500) {LED_2 = !LED_2; ledMillis = millis();}  }
                break;
 
    dafault  :  break;
  }
   

  digitalWrite(led_sterownik, LED_1);
  digitalWrite(DO_led,      !LED_1);
  digitalWrite(led_gar1,     LED_2);
  digitalWrite(led_gar2,     LED_3);
  digitalWrite(led_przej,    LED_4);

}
 
Odpowiedź
#5
Tylko, że czasami problem jest gdzie indziej ... Twoje IF wyglądają OK (ale spróbuj ze switch) ale

np,
char literka;
int liczba;

i nagle robisz literka = "k0";

Arduino jest takie toporne a IDE jego jeszcze bardziej, z automatu do zmiennej liczba trafia 0 bo wyjechałeś poza zmienną która miała przechowywać tylko jedną literkę... gdzie indziej bym szukał błędu a nie w tej funkcji :-) to tylko przykład, takie niekontrolowane rzeczy się zdarzają
ESP od razu się posypie (o ile kompilator to przepuści) a Arduino powie OK. Się Arduino nie bawię juz od dawna, ale nie raz cyrki się działy... miała się zapalić dioda na LEDKEY nr. 4 a załączał się przekaźnik. Głupie to Arduino, droższe niz ESP, wolne i pamięci tyle co w Commodore64 podzielić przez 32, musisz kontrolować pamięć !!!
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości