Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   AVR C Problem mit Schleife (https://www.delphipraxis.net/130786-avr-c-problem-mit-schleife.html)

Muetze1 15. Mär 2009 13:27

Re: AVR C Problem mit Schleife
 
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).

divBy0 15. Mär 2009 13:28

Re: AVR C Problem mit Schleife
 
Ok, dann musst du die Effektroutine mal überarbeiten. Die arbeitet wahrscheinlich auch mit einer Schleife, oder?

Muetze1 15. Mär 2009 13:32

Re: AVR C Problem mit Schleife
 
Ok, nach den letzten Posts zu urteilen wird falsch gearbeitet. Entweder sollte dein Effekt schleunigst in die ISR eines Timers oder du machst die Tastenabfrage in einem Timer. Ersteres wäre die deutlich bessere Wahl. Und das zu programmieren ist mit dem WinAVR eine Sache von Sekunden...

Gehstock 15. Mär 2009 13:37

Re: AVR C Problem mit Schleife
 
Danke schau ich mir mal an hab ja erst angefangen damit zu spielen


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:23 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz