Ein kapazitiver offener Draht soll auf einem Arduino Uno Pin die LED 13 umschalten.
Die verwendete Hardware:
– Arduino Uno
– 1nF Kondensator
– Draht
Pin 8 > 1nF Kondensator > Draht
Basierend auf dem vorherigen Artikel wird die LED 13 nun umgeschaltet.
Hier das fertige Programm.
// LED 13 umschalten mit dem kapazitiven Schalter
//
// Matthias Busse 5.12.2014 Version 1.0
int touch, led;
void setup() {
Serial.begin(4800);
pinMode(13, OUTPUT);
}
void loop() {
touch=readCapacitivePin(8);
if(touch > 4) {
if(led==0) led=1;
else led=0;
digitalWrite(13, led);
delay(1000);
}
delay(100);
}
// von http://playground.arduino.cc/Code/CapacitiveSensor
// readCapacitivePin
// Input: Arduino pin number
// Output: A number, from 0 to 17 expressing
// how much capacitance is on the pin
// When you touch the pin, or whatever you have
// attached to it, the number will get higher
uint8_t readCapacitivePin(int pinToMeasure) {
volatile uint8_t* port;
volatile uint8_t* ddr;
volatile uint8_t* pin;
byte bitmask;
port = portOutputRegister(digitalPinToPort(pinToMeasure));
ddr = portModeRegister(digitalPinToPort(pinToMeasure));
bitmask = digitalPinToBitMask(pinToMeasure);
pin = portInputRegister(digitalPinToPort(pinToMeasure));
*port &= ~(bitmask);
*ddr |= bitmask;
delay(1);
uint8_t SREG_old = SREG;
noInterrupts();
*ddr &= ~(bitmask);
*port |= bitmask;
uint8_t cycles = 17;
if (*pin & bitmask) { cycles = 0;}
else if (*pin & bitmask) { cycles = 1;}
else if (*pin & bitmask) { cycles = 2;}
else if (*pin & bitmask) { cycles = 3;}
else if (*pin & bitmask) { cycles = 4;}
else if (*pin & bitmask) { cycles = 5;}
else if (*pin & bitmask) { cycles = 6;}
else if (*pin & bitmask) { cycles = 7;}
else if (*pin & bitmask) { cycles = 8;}
else if (*pin & bitmask) { cycles = 9;}
else if (*pin & bitmask) { cycles = 10;}
else if (*pin & bitmask) { cycles = 11;}
else if (*pin & bitmask) { cycles = 12;}
else if (*pin & bitmask) { cycles = 13;}
else if (*pin & bitmask) { cycles = 14;}
else if (*pin & bitmask) { cycles = 15;}
else if (*pin & bitmask) { cycles = 16;}
SREG = SREG_old;
*port &= ~(bitmask);
*ddr |= bitmask;
return cycles;
}
Zum 3. Teil mit Dimmer Funktion.
von Matthias Busse

Pingback: Simpler kapazitiver Schalter auf einem beliebigen Arduino Pin | Shelvin – Elektronik ausprobiert und erläutert