Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#11

Re: AVR C Problem mit Schleife

  Alt 15. Mär 2009, 14:27
Code:
int lEffect = 0;
int lKeyReset = 0;

DDRB = _BV(DDB1);    // PB1 als Ausgang, alles andere ist automatisch Eingang

while (1)
{
  launch_effect(lEffect);

    // Button?
  if ( PINB & _BV(PB3) )
  { 
      // Entprellung? 
    if ( !lKeyReset )
    {
        // Effekt erhöhen
      lEffect = (lEffect+1) % 16;

        // LED an
      PORTB |= _BV(PB1);

        // 16 Zyklen lang keine Tasten akzeptieren
      lKeyReset = 16;
    }
  }
 
  if ( lKeyReset )
    lKeyReset--;
  else
    PORTB &= ~_BV(PB1);
}
Da du mit jedem Durchlauf die Taste abfragst und der MC nicht gerade langsam ist, dreht der Kilometer mit der Effektvariable bis du die Taste nach einer (für ihn) Ewigkeit wieder loslässt. Der Code macht das wie du es beschrieben hast, aber akzeptiert x Durchläufe (lKeyReset, derzeit 16) keinen erneuten Tastendruck. Dieser Wert wird gleichzeitig dafür genutzt die LED leuchten zu lassen, sonst sieht man nichts, weil der MC zu schnell ist. Wenn nach Ablauf dieser 16 Zyklen die Taste immernoch gedrück ist, dann erhöht erneut um 1 (bis max. 15, danach auf 0).
  Mit Zitat antworten Zitat