const int TX_PIN = 12; const int RX_PIN = 13; const int SAMPLES = 2000; // key change const int TIMEOUT = 50; // lower ceiling — RX touch will still saturate at SAMPLES*TIMEOUT but faster long baseline = 0; long readCapacitance() { long total = 0; for (int i = 0; i < SAMPLES; i++) { pinMode(RX_PIN, OUTPUT); digitalWrite(RX_PIN, LOW); digitalWrite(TX_PIN, LOW); pinMode(RX_PIN, INPUT); digitalWrite(TX_PIN, HIGH); long count = 0; while (digitalRead(RX_PIN) == LOW && count < TIMEOUT) { count++; } total += count; digitalWrite(TX_PIN, LOW); } return total / SAMPLES; } void setup() { Serial.begin(115200); pinMode(TX_PIN, OUTPUT); digitalWrite(TX_PIN, LOW); delay(500); long sum = 0; for (int i = 0; i < 50; i++) { sum += readCapacitance(); } baseline = sum / 50; Serial.print("Baseline: "); Serial.println(baseline); } void loop() { long val = readCapacitance(); long delta = val - baseline; Serial.print(val); Serial.print("\t"); Serial.println(delta); }