import time from collections import deque import Adafruit_ADS1x15 adc = Adafruit_ADS1x15.ADS1115() GAIN = 1 LSB = 4.096 / 32768.0 buf = deque(maxlen=50) # ~5s at 10 Hz def read_v(): return adc.read_adc(0, gain=GAIN) * LSB def stats(xs): if not xs: return 0.0, 0.0, 0.0 m = sum(xs) / len(xs) var = sum((x - m) ** 2 for x in xs) / len(xs) return m, min(xs), max(xs), var print("A0 probe. Expect: calm baseline, slow wave when breathing. Ctrl+C to stop.") while True: v = read_v() buf.append(v) m, mn, mx, var = stats(list(buf)) # Bar shows current value relative to recent min/max span = (mx - mn) if (mx - mn) > 1e-6 else 1e-6 norm = (v - mn) / span width = 60 pos = int(max(0, min(1, norm)) * width) bar = (" " * pos) + "|" + (" " * (width - pos)) # "Move" score: higher when it tracks breathing print(f"{time.strftime('%H:%M:%S')} V={v:0.3f} range={mn:0.3f}-{mx:0.3f} move={var:0.6f} [{bar}]") time.sleep(0.1)