from machine import Pin
import utime, math
PIR_PIN = 15
LED_PIN = 16
SAMPLES_TARGET = 50
led = Pin(LED_PIN, Pin.OUT, value=0)
pir = Pin(PIR_PIN, Pin.IN)
t_rise = 0
flag = False
n = 0
sumv = 0.0
sumsq = 0.0
minv = None
maxv = None
def on_rise(pin):
global t_rise, flag
t_rise = utime.ticks_us()
flag = True
pir.irq(handler=on_rise, trigger=Pin.IRQ_RISING)
while True:
if flag:
flag = False
led.value(1)
t2 = utime.ticks_us()
d = utime.ticks_diff(t2, t_rise)
print("RESP_US=", d)
if minv is None or d < minv: minv = d
if maxv is None or d > maxv: maxv = d
sumv += d
sumsq += d * d
n += 1
if n >= SAMPLES_TARGET:
mean = sumv / n
std = math.sqrt((sumsq - (sumv * sumv) / n) / (n - 1)) if n > 1 else 0.0
print("PLATFORM,GPIO_IN,GPIO_OUT,SAMPLES,MEAN_US,STD_US,MIN_US,MAX_US")
print("Raspberry_Pi_Pico,GP15,GP16,{},{:.0f},{:.0f},{},{}".format(n, mean, std, minv, maxv))
break
if pir.value() == 0:
led.value(0)
utime.sleep_ms(2)