PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit der Taster



oliver123
22.04.2011, 19:31
Hallo Leute,

ich verzweifel noch mit dem folgenden Programm:


#include "asuro.h"

int main ()
{
unsigned int wert1;
unsigned int wert2;
Init();
while (1==1)
{
wert1 = PollSwitch ();
wert2 = PollSwitch ();
if (wert1 == wert2)
{
StatusLED (GREEN);
PollSwitch ();
}
else
{
PollSwitch ();
do
{
wert1 = PollSwitch ();
wert2 = PollSwitch ();
StatusLED (RED);
}
while (wert1 == wert2);
}
}
}


Und zwar hab ich folgendes Problem: Immer, wenn ich den Taster meines Asuros drücke, sollte die Farbe der Status LED wechseln, doch dies passiert nicht immer. Manchmal funktioniert es und manchmal passiert garnichts oder die Lampe flackert nur kurz in der anderen Farbe. Es macht auch keinen Unterschied, ob ich den Taster nur antippe oder lange drücke, es funktioniert einfach nicht.
Ich hoffe, ihr könnt mir weiter helfen!
Vielen Danke!
Oliver

radbruch
22.04.2011, 22:20
So vielleicht:

#include "asuro.h"

int main(void)
{
unsigned int wert1, wert2;
unsigned int wert3=0;
unsigned char status=GREEN;

Init();
while (1)
{
do
{
do
{
wert1 = PollSwitch ();
wert2 = PollSwitch ();
}while(wert1 != wert2); // wiederholen bis zweimal derselbe Wert gelesen wurde
}while(wert1 == wert3); // wiederholen bis sich der Wert geändert hat
wert3 = wert1; // neuen Wert merken

if(status == GREEN) status = RED; else status = GREEN;
StatusLED(status);
}
return(0);
}ungetestet

Valen
22.04.2011, 22:29
Eine kleine Verzögerung zwischen die beide wert1,wert2 anpassungen durch PollSwitch wurde vielleicht (auch) helfen.


...
wert1 = PollSwitch ();
Sleep(72);
wert2 = PollSwitch ();
...

oliver123
22.04.2011, 23:40
@ radbruch: danke für deine schnelle und auch sehr zeit aufwendige hilfe (programm schreiben)! ich habe dein programm jetzt auf meinen asuro gespielt, jedoch treten dieselben probleme wie bei meinem programm auf. die lampe leuchtet grün, für die kurze zeit, in der , der taster gedrückt ist, leuchtet die lampe rot. lasse ich den taster nun wieder los, so leuchtet die lampe wieder grün...aber so soll es ja eigentlich nicht arbeiten. hast du vielleicht sonst noch eine idee?
Ich habe auch noch eine frage zu deinem programm: was bedeutet dieses " unsigned char status=GREEN,"?

@Valen: auch danke für deine hilfe! habe die pausen nun einmal in mein programm eingebaut, es funktioniert nach meinen eindruck etwas besser jedoch sind auch nach wie vor noch zu viele fehler! is das eigentlich kein problem wenn man solche pausen einbaut? dadruch wird doch alles insgesamt langsamer? hast du vielleicht sonst noch eine idee? ich probiere und probiere und komme einfach nicht weiter -.-

radbruch
23.04.2011, 00:16
was bedeutet dieses " unsigned char status=GREEN,"?
In der Datei asuro.h sind folgende Werte für die StatusLED definiert:

#define GREEN 1
#define RED 2
#define YELLOW 3

status ist eine vorzeichenlose 8bit-Variable deren Wert beim Anlegen im Speicher GREEN (also 1) ist. Ohne diese Zuweisung wäre der Wert der Variablen beim Programmstart undefiniert (, meist aber 0). Nach Init() leuchtet die StatusLED übrigends immer grün...


...aber so soll es ja eigentlich nicht arbeiten.Upps, sorry. Das habe ich falsch umgesetzt. So sollte die StatusLED nur beim Drücken der Tasten ihre Farbe wechseln und nicht auch beim Loslassen:

#include "asuro.h"

int main(void)
{
unsigned int wert1, wert2;
unsigned int wert3=0;
unsigned char status=GREEN;

Init();
while (1)
{
do
{
do
{
wert1 = PollSwitch ();
wert2 = PollSwitch ();
}while(wert1 != wert2); // wiederholen bis zweimal derselbe Wert gelesen wurde
}while(wert1 == wert3); // wiederholen bis sich der Wert geändert hat
wert3 = wert1; // neuen Wert merken

if(wert1 > 0)
{
if(status == GREEN) status = RED; else status = GREEN;
StatusLED(status);
}
}
return(0);
}auch wieder ungetestet

Dunkle Macht
23.04.2011, 13:47
Hallo,

nimm doch einfach ne boolsche variable und mach immer wenn der Knopf gedrückt ist led_farbe=!led_farbe
dann wird bei jedem Knopfdruck der Zustand von led_farbe gewechselt.
Anmerkung: Ich hab keinerlei Erfahrung mit dem Asuro, ich kann nur die Programmiersprache.

oliver123
25.04.2011, 11:46
danke für eure Hilfe!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
aber ich habe jetzt über Ostern die Zeit genutzt und solange probiert, bis es funktioniert und die Lösung war: Ich habe als Bedingung statt "werte1 == wert2", "aktuellerwert = 0" genommen und jedem einlesen des aktuellen Wertes danach eine kleine Pause (200ms) einprogrammiert und siehe da, nahezu fehlerfrei!
aber trotzdem danke!!