Skocz do zawartości

Wykorzystanie 2 czujników w programie - opóźniony pomiar


Wojtek65

Pomocna odpowiedź

Witajcie

Wziąłem się za projekt prostej stacji pogodowej i w związku z mam pytanie.

Jestem na początku projektu. Mam aktualnie na pokładzie dwa  "czujniki" jeden analogowy ( natężenia światła na fotorezystorze z kursu ) drugi miernik temperatury powietrza w postaci ( termometru Dallas 18B20 ). Wszystko działa, ale podczas uruchamiania monitora portu szeregowego w celu odczytu danych dzieje się dziwna rzecz. Odczyt temperatury startuje natychmiast z wartością aktualną  a odczyt natężenia światła od 0. Po chwili się budzi pokazując już wartość aktualną. Co jest przyczyną takiej sytuacji i jak się tego pozbyć. Bardzo chciałbym aby oba odczyty startowały od wartości aktualnych

Jeszcze jedno małe pytanko jak zamienić odczyt  wartości analogowych ( napięciowych ) natężenia światła na luksy 

za pomoc z góry serdeczne dzięki

 

Link do komentarza
Share on other sites

@Wojtek65 jeśli chcesz, aby ktoś znalazł błąd w programie to musisz w poście umieścić cały kod swojego projektu - inaczej ciężko coś  doradzić 🙂

Link do komentarza
Share on other sites


#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 3

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
int pomiarswiatla;

void setup()
{
  Serial.begin(9600);


  // Start up the library
  sensors.begin();

  pinMode(8, OUTPUT); //dioda LED podłączona na pinie 8 ( Wyjście )
  pinMode(7, INPUT_PULLUP); //Przycisk ŻÓŁTY podłączony do pinu 7 ( Wejście )
  digitalWrite(8, LOW);//stan pinu 8 ( Niski)
}

void loop()
{
  Serial.print("Aktualne natężenie światła = ");
  Serial.println(pomiarswiatla);
  pomiarswiatla = analogRead(A0);  // odczyt wskazań fotorezystora podłaczonego do pinu A0
  
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.print("Aktualna temperatura powietrza : ");
  Serial.println(sensors.getTempCByIndex(0));
  

  if (pomiarswiatla < 150)
  {
    digitalWrite(8, HIGH);//włączenie diody
  }
  else
  {
    digitalWrite(8, LOW);//wyłączenie diody
  }

  while (digitalRead(7) == LOW)
  {
    digitalWrite(8, HIGH);
    delay(300);
    digitalWrite(8, LOW);
    delay(400);
    digitalWrite(8, HIGH);
    delay(300);
  }

}

 

Link do komentarza
Share on other sites

Spójrz na swój kod.

Najpierw wypisujesz natężenie światła, a dopiero potem odczytujesz. Nic dziwnego że pierwsze wypisanie wypisuje same zera (bo przecież jeszcze nie odczytałeś wartości z A0).

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Zamiast funkcji delay powinny sprawdzić się tutaj trochę lepiej opóźnienienia z millis. Trochę rozbudują one program ale moim zdaniem będzie działał płynniej przy ewentualnym dodaniu kolejnych czujników 😀

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.