PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einfaches StatusLED Programm



derwisch
16.06.2012, 18:26
Hallo Leute,

ich wollte ein einfaches Programm schreiben um die Taster und die StatusLED zu testen.
Beim start des Porgramms soll die taste GREEN sein. wenn ich eine taste drücke soll sie auf RED. danach wieder auf grün und warten bis ich wieder eine taste drücke.


include "asuro.h"

int zaehler;





int main(void)
{
Init();

zaehler = 0;

while (zaehler < 10)

{
while (PollSwitch() == 0)

{ StatusLED(GREEN);}

StatusLED(RED);

zaehler = zaehler+1;
}


while(1);
return 0;
}


das habe ich geschrieben. beim compilieren bringt er immer folgende meldeung:


In file included from asuro.h:34,
from test.c:1:
c:/winavr-20100110/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
test.c: In function 'main':
test.c:22: error: expected '(' before 'tase'
test.c:22: error: 'tase' undeclared (first use in this function)
test.c:22: error: (Each undeclared identifier is reported only once
test.c:22: error: for each function it appears in.)
make: *** [test.o] Error 1

> Process Exit Code: 2
> Time Taken: 00:00


ich hatte zuvor echt ne variable taste, aber die habe ich entfernt. jetzt habe ich gar kein tase(falsch egschrieben für taste) und er bringt immer dieselbe meldung?!

kann mir jd helfen?

bin noch anfänger, seid bitte nicht so hart ;P

grüße

radbruch
16.06.2012, 18:42
Hallo

Bitte verwende die Code-Tags anstelle von Quote.

signal.h wurde inzwischen durch interrupt.h ersetzt. In asuro.h kannst du das anpassen:

#include <avr/io.h>
#include <avr/interrupt.h>
//#include <avr/signal.h>
#include <stdlib.h>


Vor include fehlt das #:


#include "asuro.h"

int zaehler;

int main(void)
{
Init();

zaehler = 0;

while (zaehler < 10)
{
StatusLED(GREEN);
while (PollSwitch() == 0);

StatusLED(RED);
while (PollSwitch() != 0);

zaehler = zaehler+1;
}

StatusLED(YELLOW);
while(1);
return(0);
}(ungetestet)


jetzt habe ich gar kein taseDatei gespeichert vor dem Kompilieren?

Gruß

mic

derwisch
21.06.2012, 11:25
vielen dank radbruch.
das mit dem code-tag beherzige ich in zukunft.

dein programm funktioniert einwandfrei und beim nächsten mal werde ich auch das programm erst speichern bevor ich es kompiliere ;)

eine frage habe ich noch, bei meinem programm oben, ist er nach dem ich eine taste gedrückt hatte von GREEN auf RED, aber dann nicht mehr auf GREEN. ich nehme an, dass er dann einfach nicht in die while-schleife gegangen ist.
ich versteh das nicht so ganz, wird pollswitch nich für kurze zeit eins und dann wieder null, d.h. sobald es eins wird verlässt er die schleife (bei kurzem drücken) ist pollswitch wieder null und sollte doch im nächsten schleifendurchgang zaehler +1 wieder GREEN ausgeben?

auf jeden fall ist deine lösug eine sehr elegantere art !

radbruch
21.06.2012, 14:59
Hallo


{
while (PollSwitch() == 0) { StatusLED(GREEN);}

StatusLED(RED);
zaehler = zaehler+1;
}
Solange kein Tastendruck erkannt wird, wird die whlie-Schleife ausgeführt. Sobald die Taste erkannt wird, ist das Programm nach 10 Runden fertig. Das geht rasend schnell.

PollSwitch() liefert bei jedem Aufruf den ermittelten Tastenwert:

k1=32
k2=16
k3=8
k4=4
k5=2
k6=1

k6 ist beim Schalter. Mehrere Taster gleichzeitig liefern die Summe der Einzelwerte, wenn alles richtig funktioniert.

Gruß

mic

derwisch
21.06.2012, 18:19
also mit rasend schnell meinst du, dass einmal kurz drücken bedeutet. dass er die while schleife direkt 10 mal ausführt (also für den zeitschlitz in dem ich einen taster gedrückt halte)?

radbruch
21.06.2012, 19:06
Rasend schnell bedeutet, dass das Programm vielleicht schon während des Tastenprellen bei Betätigen der Taste auf zehn gezählt hat.

Während du die Taste gedrückt hältst wird die (ablehnende (http://www.google.de/search?q=ablehnende+while+schleife+c)) while-Schleife nicht mehr betreten. Das funktioniert "ausgeschrieben" etwa so:

{
taste=PollSwitch();
if(taste == 0) while(taste == 0) {taste=PollSwitch(); StatusLED(GREEN);}

StatusLED(RED);
zaehler = zaehler+1;
}

derwisch
21.06.2012, 19:09
cool, vielen dank. ein so einfaches programm und dann doch wieder viel gelernt ;)