#define PIN_PYRO_OUT 7 #define PIN_LED 13 #define CALIBRATION_TIME 5 // 3 seconds #define DELAY_BETWEEN_EACH_PYRO_READS 25 // milliseconds #define THRESHOLD 5 int _avg_pyro_value; int _pyro_value; void setup() { Serial.begin(57600); pinMode(PIN_LED, OUTPUT); Serial.println("calibrating motion sensor.."); digitalWrite(PIN_LED, HIGH); unsigned long endTime = millis() + CALIBRATION_TIME * 1000; int count = 0; long sum = 0; while (millis() < endTime) { sum += analogRead(PIN_PYRO_OUT); count++; delay(DELAY_BETWEEN_EACH_PYRO_READS); } _avg_pyro_value = sum / count; digitalWrite(PIN_LED, LOW); Serial.println("Calibration ended."); Serial.print("Average value: "); Serial.println(_avg_pyro_value); } void loop() { _pyro_value = getPyroValue(); if (abs(_pyro_value) >= THRESHOLD) { digitalWrite(PIN_LED, HIGH); } else { digitalWrite(PIN_LED, LOW); } Serial.println(_pyro_value); delay(50); } int getPyroValue() { int val = analogRead(PIN_PYRO_OUT); return val - _avg_pyro_value; }