Bewegungssteuerung soll Leds faden


hallo,

bin arduino -anfänger. habe mittels photodiode und infrarot led einen bewegungsschalter gebaut. damit soll einmal in der küche eine led-unterbaubeleuchtung bedient werden. die schaltzustände für eine led (testbetrieb) funktionieren, aber ich würde gerne noch eine fadefunktion beim ein-und ausschalten hinzufügen.
ab hier geht es einfach nicht weiter.
hier der code
code: [select]
// test küchenzeilenbeleuchtung
// photodiode und infrarot led als bewegungsschalter
// pin 8 geht über 1k widerstand int0

int inputpin = 0;      // input für photodiode
int outputpin = 8;   // output für schaltsignal
int val = 0;         //
int ledpin = 10;        // output für led
volatile int state = low;    // status schaltzustand schaltsignal

void setup()
{
 pinmode(outputpin, output);    
 serial.begin(9600);
 pinmode(ledpin, output);
 digitalwrite(2, low);     // int0 auf low
 attachinterrupt(0, toggle, rising); // isr auf int0
}

void loop()
{
 digitalwrite(outputpin, low);    // output initial auf low
 val = analogread(inputpin);        // input von 0 zu 1023
 serial.println (val);
 if (val < 500)                              // wenn sensor unter 500 dann output auf high
{
 digitalwrite(outputpin, high);    // output auf high

}

}

// interrupt service routine
// hier wird die led mittel bewegung ein- und ausgeschaltet
// hier sollte auch glaube ich die fadefunktion eingefügt werden
// dachte sowas hier
//    for(int fadevalue = 0 ; fadevalue <= 255; fadevalue +=5) {
//    analogwrite(ledpin, fadevalue);
void toggle()
{
 if(state == low) {    
   state = high;
   
   }
  else {
   state = low;
 
  }
 
 digitalwrite(ledpin, state);
}


habe mir das aus einzelteilen zusammengebastelt.
vielleicht kann mir bitte jemand weiterhelfen.

1. brauchst du sicher keine isr
2. kannst du in einer isr nichts machen, zeit dauert. kein fade
3. in deinem fade-versuch fehlt eine wartezeit/je schritt. für den vollen bereich (0  <-> 255) eine viertelsekunde ist minimum, damit du einen schnellen effekt siehst.  bei 5er schritten ein delay(5) oder mehr in jedem schritt. ausserdem ist der beobachtete unterschied zwischen analogwrite(a0,1); und analogwrite(a0,2); größer als zwischen  analogwrite(a0,201); und analogwrite(a0,202);
aber das geht jedenfalls nicht in einer isr.

4. hab ich leider nicht kapiert, wie pin2 etwas passiert und wofür outputpin gut ist.
aber wenn es funktioniert, dann lass doch das digitalwrite(ledpin, state) in der isr weg,
merke dir in loop den alten zustand der led, und bei einem unterschied fadest du entweder rauf oder runter.
wenn du das faden auf jeden fall komplett machen willst, geht das mit einer schleife mit delays.

sonst ( wenn du halb hochgefadet wieder umkehren willst ), nur einen schritt je loop durchlauf und der geht entweder rauf oder runter:
code: [select]
void loop()
{

 // ... deine outputvalue- geschichte wie bisher ...

  static byte fadevalue;
  if (state == high && fadevalue < 255) fadevalue++;
  if (state == low && fadevalue > 0)   fadevalue--;
  analogwrite(ledpin, fadevalue);
  delay(2); // größer um den fadeeffekt besser zu sehen
}


edit: mit weniger fehlern evtl. klarer


Arduino Forum > International > Deutsch (Moderator: uwefed) > Bewegungssteuerung soll Leds faden


arduino

Comments

Popular posts from this blog

VIDIOC_S_FMT error 16, Device or resource busy - Raspberry Pi Forums

using a laptop skeleton to build a pi laptop - Raspberry Pi Forums

Forum for Joomla? - Joomla! Forum - community, help and support