Kapazitiver LED Umschalter mit einem einfachen, offenen Draht

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

Ein Gedanke zu „Kapazitiver LED Umschalter mit einem einfachen, offenen Draht

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.