• 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
IDE problem if i else if ( wykonanie komendy w określnych godzinach)
#1
bry... ESP8266:

Jako że programista ze mnie z żaden, mimo to próbuje zabawy w te klocki i przy okazji czegoś się nauczyć.



Próbuje do pogodynki dodać kod sterujący podświetleniem w zależności od godziny.

Kod:
int getH=-1;
.............
void loop() {

getTime();
screen1();
delay(10000);
getCurrentData();
screen2();
delay(10000);
getForecastData();
screen3();
delay(10000);

if  (getH >= 0 && getH < 7);
    { analogWrite (TFT_LED, 100);  //  ("podswietlenie 10%");
      }
else if (getH >= 18 && getH < 20 );
      {  analogWrite (TFT_LED, 768);    //  ("podswietlenie 75%");
       }
else if (getH >= 20 && getH < 22 );
      {  analogWrite (TFT_LED, 512); //  ("podswietlenie 50%");
       }
else if (getH >= 22 && getH <= 24 );
      {  analogWrite (TFT_LED, 100); //  ("podswietlenie 10%");
       }
else
      { analogWrite (TFT_LED, 1023);  //  ("podswietlenie 100%")
       }
 }
Program, nie kompiluje się w Arduino IDE : 'else' without a previous 'if'  i nie umiem wyłapać co jest nie tak.


Jak inaczej osiągnąć sterowanie PWM pinem w określonych godzinach?

Próbowałem w ten sposób

Kod:
while (getH >= 0 && getH < 7);
    { analogWrite (TFT_LED, 100);  //  ("podswietlenie 100%");
      }
while (getH >= 18 && getH < 20 );
      {  analogWrite (TFT_LED, 768);    //  ("podswietlenie 75%");
      }
while (getH >= 20 && getH < 22 );
      {  analogWrite (TFT_LED, 512); //  ("podswietlenie 50%");
      }
while (getH >= 22 && getH <= 24 );
      {  analogWrite (TFT_LED, 100); //  ("podswietlenie 10%");
      }
while  (getH >= 8 && getH <= 17 );
      { analogWrite (TFT_LED, 1023);  //  ("podswietlenie 10%_noc")
      }


-------------- CUT HERE FOR EXCEPTION DECODER ---------------
19:36:22.726 ->
19:36:22.726 -> Soft WDT reset
19:33:42.991 ->
19:33:42.991 -> >>>stack>>>
19:33:43.024 ->
19:33:43.024 -> ctx: cont
19:33:43.024 -> sp: 3ffffdf0 end: 3fffffc0 offset: 01a0
19:33:43.057 -> 3fffff90:  3fffdad0 00000000 3ffe84d4 40202665 
19:33:43.124 -> 3fffffa0:  feefeffe feefeffe 3ffeed78 4020a574 
19:33:43.157 -> 3fffffb0:  feefeffe feefeffe 3ffe857c 40100c5d 
19:33:43.223 -> <<<stack<<<

19:37:00.466 -> --------------- CUT HERE FOR EXCEPTION DECODER ---------------

Jeśli użyje same if:

dostaje w odpowiedzi
Kod:
if  (getH >= 0 && getH < 7);
    { analogWrite (TFT_LED, 100);  //  ("podswietlenie 100%");
      }
if (getH >= 18 && getH < 20 );
      {  analogWrite (TFT_LED, 768);    //  ("podswietlenie 75%");
       }
if (getH >= 20 && getH < 22 );
      {  analogWrite (TFT_LED, 512); //  ("podswietlenie 50%");
       }
if (getH >= 22 && getH <= 24 );
      {  analogWrite (TFT_LED, 100); //  ("podswietlenie 10%");
       }
if  (getH >= 8 && getH <= 17 );
      { analogWrite (TFT_LED, 1023);  //  ("podswietlenie 10%_noc")
       }
Kod:
prad = analogRead(TFT_LED);
    Serial.println ("################### Czytam ustawienia PWM  i Godziny##########################");
     Serial.println (getH);
    Serial.println (prad);
     delay (1000);



19:48:23.252 -> ################### Czytam ustawienia PWM  i Godziny##########################
19:48:23.318 -> 19
19:48:23.318 -> 1023

Czyli nie za bardzo działa... o 19 powinna być wartośc 768
 
Odpowiedź
#2
Każda literka ma znaczenie:
if (getH >= 0 && getH < 7);
{ analogWrite (TFT_LED, 100); // ("podswietlenie 10%");
}
To oznacza jeśli to co w () nie rób nic bo masz ; co kończy polecenie if, potem program ma zrobić niezależnie od ifa to co w {}, a potem ni stąd ni zowąd masz else if.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Czeka aj to nie jest tak?

if(warunek1){
// instrukcje wykonywane gdy warunek 1-szy jest spełniony
}else if(warunek2){
// instrukcje wykonywane gdy warunek 1-szy nie jest spełniony natomiast drugi jest
}else if(warunek3){
// instrukcje wykonywane gdy warunki 1-szy i 2-gi nie są spełniona a 3-ci jest
}else{
// instrukcje, gdy wszystkie warunki nie są spełnione
}
 
Odpowiedź
#4
Może tak:
if  (getH >= 0 && getH < 7) --> ;<--
    { analogWrite (TFT_LED, 100);  //  ("podswietlenie 10%");
      }
Usuń średnik.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
Człowiek uczy się całe życie.
Dzięki....
Wiem jak to jest tłumaczyć rzeczy dla siebie oczywiste laikowi..
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości