• 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
Problem z IF
#1
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?
 
Odpowiedź
#2
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("---);
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#3
hmm.. działa, ale teraz pytanie dlaczego działa?
widzę, że val jest 2 razy definiowana/przypisywana? Dlaczego?
 
Odpowiedź
#4
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 .
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości