Arduino Polska Forum
Problem z IF - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Problem z IF (/watek-problem-z-if)



Problem z IF - chomiczek - 03-04-2016

Witajcie, trochę mi głupio, że zaczynam taki wątek, bo pewnie rozwiązanie jest banalne, ale już pisze z czym mam problem (na co dzień zajmuje się programowaniem w PHP).

A mianowicie podpiąłem sobie czujnik temperatury i wszystko ładnie mi zczytuje, przelicza na Celsiusze, etc.

Chciałem sobie zrobić 'zapamiętywanie' wartości minimalnych i maksymalnych.

utworzyłem zmienne typu double

i mam taki kawalek kodu:
Kod:
void loop() {
 val = analogRead(A1);
 
 temp = Termometr(val);

 if (tempMin > temp) {
   tempMin = temp;
 }
 
 if (tempMax < temp) {
   tempMax = temp;
 }

}
Serial.println(tempMin);
Serial.println(tempMax);
Serial.println("---);
}

no i wychodzi z tego, że zmienna tempMin ma zawsze wartość 0.00 :/ co robię źle, albo o czym zapomniałem?


RE: Problem z IF - JasQ - 03-04-2016

Jeżeli masz na początku programu tempMin zdeklarowane jako float tempMin = 0 ; a termometr nie osiągnął mniej niż zero to będziesz miał minimalną 0.00 dopóki nie spadnie poniżej zera .

Dodaj do setup() to co dopisałem powinno być ok bo przed programem głównym wartości min i max zostaną ustawione względem aktualnego odczytu z czujnika a nie 0.

Kod:
setup(){

val = analogRead(A1);

temp = Termometr(val);

tempMin = tempMax = temp;

}

void loop() {
val = analogRead(A1);

temp = Termometr(val);

if (tempMin > temp) {
   tempMin = temp;
}

if (tempMax < temp) {
   tempMax = temp;
}

}
Serial.println(tempMin);
Serial.println(tempMax);
Serial.println("---);
}



RE: Problem z IF - chomiczek - 03-04-2016

hmm.. działa, ale teraz pytanie dlaczego działa?
widzę, że val jest 2 razy definiowana/przypisywana? Dlaczego?


RE: Problem z IF - JasQ - 04-04-2016

Bo jak napisałem wyżej pierwsza "tempMin" była zdeklarowana jako zero a po poprawce już nie startowała jako 0 tylko jako

val = analogRead(A1);
temp = Termometr(val);
tempMin = tempMax = temp;

Czyli początkowa temperatura dla programu min , max i aktualna była taka sama .

Nie zdefiniowana 2x użyta a to różnica , program setup() jest wykonywany tylko raz i w ciągu tego razu wstawiamy w linijce "tempMin = tempMax = temp;" dla temperatury min i max aktualną wartość a nie 0 jak miałeś wcześniej . W pętli loop() będzie a wartość min i max rozchodziła się zgodnie z założeniem programu .