Arduino för växthusgaser, trädgården eller Growbox / uppdaterad April 2016 (22 / 24 steg)
Steg 22: Använda timers för att läsa sensorer
Det är inte nödvändigt att kontinuerligt läsa givare. Speciellt om det är jord Fuktsensor, är det en bra idé att bara läsa att ett mellanrum, eftersom det kommer att begränsa mängden DC flyter genom stiften och därmed bromsa korrosion.
Istället för att använda förseningar, är det möjligt att använda en timer avbryta.
I exemplet nedan prescaler för timer anges 1 att svämma över varje sekund. Timer jämför avbrottet kommer att räkna sekunder till 10 och sedan läsa sensorn. Läsa på om användning av timers här.
avr-libc biblioteket innehåller
#include < avr/io.h >
#include < avr/interrupt.h >
flyktiga int sekunder = 0;
void setup()
{
pinMode (LEDPIN, OUTPUT);
initiera Timer1
CLI(); Inaktivera globala avbryter
TCCR1A = 0; satt hela TCCR1A register till 0
TCCR1B = 0; samma för TCCR1B
Set jämför match register till önskad timer räkning:
OCR1A = 15624;
slå på CTC-läge:
TCCR1B | = (1 << WGM12);
Anger CS10 och CS12 bitar för 1024 prescaler:
TCCR1B | = (1 << CS10);
TCCR1B | = (1 << CS12);
Aktivera timern jämför avbrott:
TIMSK1 | = (1 << OCIE1A);
SEI(); Aktivera global avbryter
}
ISR(TIMER1_COMPA_vect)
{
sekunder ++;
IF(seconds == 10)
{
sekunder = 0;
readSensor;
}
}
void loop() {
andra saker
}
Tänk dock att om du vill ställa in en timer så att din soilhumidity skulle läsas säger varje 10 minuter, att om det finns behov att byta pumpen, du behöver läsa jord luftfuktigheten ständigt, annars din pump kommer att flöda i minst 10 minuter, innan en annan behandlingen tas. Det kan vara för mycket vatten.
Den uppdaterade programvaran innehåller nu en 4 minuters timer.