Inter­rupt: Licht schal­ten mit Bewe­gungs­mel­der

Lese­zeit: 3 Minu­ten
Navi­ga­ti­on

Stel­le durch Dre­hen nach rechts des lin­ken Poten­tio­me­ters ein län­ge­res Aus­gangs­si­gnal ein.

Beach­te bei der Ver­ka­be­lung, dass die bei­den Poten­tio­me­ter nach vorn zei­gen.
Außer­dem wird der Bewe­gungs­mel­der an Pin 2 und Pin 3 ange­schlos­sen.

Benö­tig­te Bau­tei­le:

  • Bewe­gungs­mel­der HC-SR501
  • Wider­stand > 100 Ω
  • Lei­tungs­dräh­te
  • LED

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)


Defi­nie­re die bei­den Pins des Bewe­gungs­mel­ders und den Pin der LED und lege im setup-Teil den pin­Mo­de für die Bau­tei­le fest.

# define BEWEGUNG_EIN 2
# define BEWEGUNG_AUS 3

void setup()
{ 
  pinMode(ROT, OUTPUT); 
  pinMode(BEWEGUNG_EIN, INPUT);   
  pinMode(BEWEGUNG_AUS, INPUT);

Außer­dem musst du für die Aus­lö­ser die Interrupt-Methoden fest­le­gen:

  /* 
    wenn eine Bewegung registriert wird 
    Signal ist HIGH -> RISING -> LEDEin 
    wenn die Wartezeit abgelaufen ist 
    Signal ist LOW -> FALLING -> LEDAus 
  */ 
  attachInterrupt(digitalPinToInterrupt(BEWEGUNG_EIN), LEDEin, RISING); 
  attachInterrupt(digitalPinToInterrupt(BEWEGUNG_AUS), LEDAus, FALLING);
}

attach­In­ter­rupt()

Der loop-Teil bleibt leer, weil das Pro­gramm aus­schließ­lich durch die Inter­rupts gesteu­ert wird.

Jetzt feh­len nur noch die Metho­den LEDEin() und LEDAus().

void LEDEin() 
{
  digitalWrite(ROT, HIGH);
}

void LEDAus() 
{
  digitalWrite(ROT, LOW);
}


Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 25. Aug 2020 @ 7:43