![]() |
Re: AVR C Problem mit Schleife
Code:
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).
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); } |
Re: AVR C Problem mit Schleife
Ok, dann musst du die Effektroutine mal überarbeiten. Die arbeitet wahrscheinlich auch mit einer Schleife, oder?
|
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...
|
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. |
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