Elektroniska TattleTale / kylskåp Monitor (6 / 13 steg)
Steg 6: Ljussensor koden
Sedan behöver vi en funktion för hantering av ljussensor avgift-transfer kretsen. Grunderna i denna funktion är att kortfattat ange pin 5 hög att ladda kretsen, sedan tid hur länge det tar pin tills att gå lågt. Den mer ljus som drabbar fototransistor snabbare kommer att kretsen fullgöra. Funktionen qtTime() hanterar detta laddning och timing. Funktionen lightCheck() använder qtTime() funktionen för att ange om bönan är i ljus eller mörk. Då kommer vi använda lightCheck() inom loop() för att testa våra ljussensor krets.
uint32_t qtTime (int nQTPin, uint32_t nMaxWait)
{
Ladda kondensatorn
digitalWrite (nQTPin, hög);
Delay(5);
Stoppa laddning
digitalWrite (nQTPin, låg);
Start ansvarsfrihet cykel
uint32_t nStart = millis();
uint32_t nDuration = 0;
Som kondensator utsläpp genom fototransistor sensor
PIN-kod kommer övergången från hög till låg
While(digitalRead(nQTPin) == hög)
{
Vänta på ansvarsfrihet
I de fall millis() har rullat
om (millis() < nStart)
{
nStart = millis();
}
Överstigit varaktighet mörka tröskel tiden?
nDuration = millis() - nStart;
om (nDuration > nMaxWait)
{
bryta;
}
}
För att fastställa tröskel eller degugging, utgång varaktighet
String strDuration = "";
strDuration += String(nDuration);
strDuration += "ms";
Serial.println (strDuration);
Ovan avsnitt kan tas bort eller kommenterade en gång lightCheck()
arbetar som önskas.
återvända nDuration;
}
Sträng lightCheck() {
Sträng strOut = "LIGHT";
om (qtTime (LIGHT_SENSOR_PIN, DARK_DISCHARGE_THRESHOLD) > = DARK_DISCHARGE_THRESHOLD)
{
strOut = "Mörk";
}
Returnera ljus eller mörk
returnera strOut;
}
void loop()
{
Serial.println (lightCheck());
Bean.Sleep(500);
}