Skip to content

Instantly share code, notes, and snippets.

@likeablob
Last active October 26, 2019 05:50
Show Gist options
  • Save likeablob/bd12bfd7ab88421076bbf17480741a2d to your computer and use it in GitHub Desktop.
Save likeablob/bd12bfd7ab88421076bbf17480741a2d to your computer and use it in GitHub Desktop.
Implement Capacitive Touch Sensor (C-T Method) with Digispark

Capactive Touch Sensor with Digispark

$ pio init -b digispark-tiny

IMAG000

#include <Arduino.h>
#define PIN_CP_HS 0
#define PIN_CP_LS 1
void blink(uint16_t ms) {
analogWrite(4, 10);
delay(ms);
analogWrite(4, 0);
delay(ms);
}
void setup() {
pinMode(PIN_CP_HS, OUTPUT);
pinMode(PIN_CP_LS, OUTPUT);
pinMode(4, OUTPUT);
blink(200);
}
void loop() {
// reset
pinMode(PIN_CP_LS, OUTPUT);
pinMode(PIN_CP_HS, OUTPUT);
digitalWrite(PIN_CP_LS, LOW);
digitalWrite(PIN_CP_HS, LOW);
delay(1);
uint16_t counter = 0;
while(true) {
// charge
pinMode(PIN_CP_LS, INPUT);
digitalWrite(PIN_CP_LS, LOW);
digitalWrite(PIN_CP_HS, HIGH);
pinMode(PIN_CP_HS, OUTPUT);
// transfer
pinMode(PIN_CP_HS, INPUT);
digitalWrite(PIN_CP_HS, LOW);
pinMode(PIN_CP_LS, OUTPUT);
digitalWrite(PIN_CP_LS, LOW);
counter++;
if(digitalRead(PIN_CP_HS)) {
if(counter < 30) { // Adjust as you need
blink(counter * 10);
}
break;
}
}
}
#include <Arduino.h>
#define PIN_CP_HS 0
#define PIN_CP_LS 2
#define PIN_ALERT 4
#define PIN_LED 1
void setup() {
pinMode(PIN_CP_HS, OUTPUT);
pinMode(PIN_CP_LS, OUTPUT);
pinMode(PIN_ALERT, OUTPUT);
pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, HIGH);
delay(200);
digitalWrite(PIN_LED, LOW);
}
int8_t detected = 0;
void loop() {
// reset
pinMode(PIN_CP_LS, OUTPUT);
pinMode(PIN_CP_HS, OUTPUT);
digitalWrite(PIN_CP_LS, LOW);
digitalWrite(PIN_CP_HS, LOW);
delayMicroseconds(10);
uint16_t counter = 0;
while(true) {
// charge
pinMode(PIN_CP_LS, INPUT);
digitalWrite(PIN_CP_LS, LOW);
digitalWrite(PIN_CP_HS, HIGH);
pinMode(PIN_CP_HS, OUTPUT);
// transfer
pinMode(PIN_CP_HS, INPUT);
digitalWrite(PIN_CP_HS, LOW);
pinMode(PIN_CP_LS, OUTPUT);
digitalWrite(PIN_CP_LS, LOW);
counter++;
if(digitalRead(PIN_CP_HS)) {
if(counter < 500) {
detected++;
} else {
detected--;
}
if(detected >= 5) {
detected = 0;
digitalWrite(PIN_ALERT, HIGH);
digitalWrite(PIN_LED, HIGH);
} else if(detected <= -5) {
detected = 0;
digitalWrite(PIN_ALERT, LOW);
digitalWrite(PIN_LED, LOW);
}
break;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment