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