Hallo zusammen,
ich bekomme von einen Touch-Controller über I2C Tastsignale, mit denen
ich als Variable im Mikrocontrollerprogramm arbeiten kann. Konkret nimmt
die Variable für die 4 verschiedenen Taster (T1,T2,T3,T4) die Werte
1,2,3,4 an. Wird keine Taste gedruckt, ist die Variable 0.
Für jede Taste habe ich eine bestimmte Programmfunktion vorgesehen. Um
dies zu gewerkstelligen kann ich ja über eine if-Bedingung oder
case-Struktur eben diesen Programmteil durchlaufen lassen.
Das Problem ist jetzt nur, dass diese Programmfunktion eben nicht mehr
durchlaufen wird, wenn die Taste nicht mehr gedrückt ist. Es sollte aber
so sein, dass der Schaltzustand gehalten wird (auch wenn die Taste nicht
mehr gedrückt wird (Variable =0), und erst wechselt, wenn ich eine
andere Taste drücke.
Letztlich will ich also den Schaltzustand einer "Tastvariablen" halten,
wie bei einen Wechselschalter, nur das ich eben 4 Schalzustände habe.
Ich steh da im Moment total auf den Schlauch. Vielleicht kann mir da
jmd. ein Stichwort geben.
Danke,
Michael
Lothar Miller schrieb:> Ich würde die Mehtode mit den Flags machen:> ......
Ich glaube, das mit "Flag zuruecksetzen" wollte er NICHT.
Er wollte doch den Tastenwert speichern.
1
unsignedcharTouchwert;
2
unsignedcharTasten;
3
4
if(Touchwert==1)thenTasten=0b0001;// Flag für Taste 1 setzen
5
if(Touchwert==2)thenTasten=0b0010;// Flag für Taste 2 setzen
NurEinGast schrieb:> Ich glaube, das mit "Flag zuruecksetzen" wollte er NICHT.> Er wollte doch den Tastenwert speichern.
Ich will eigentlich nur einen Tastzustand halten, bis ein anderer
Tastzustand eintritt.
Michael schrieb:> Ich will eigentlich nur einen Tastzustand halten, bis ein anderer> Tastzustand eintritt.
Eben deshalb das Flag nicht nach der Bearbeitung zurücksetzen, sondern
erst durch eine anderen Taste überschreiben lassen.
Dann kannst Du zwar nicht feststellen, wenn keine Taste betätigt ist.
Aber dass musst Du wissen, was in Deiner Anwendung sinvoll ist.
NurEinGast schrieb:> Dann kannst Du zwar nicht feststellen, wenn keine Taste betätigt ist.> Aber dass musst Du wissen, was in Deiner Anwendung sinvoll ist.
Das ist erstmal nicht weiter ein Problem, wenn ich den Zustand "kein
Tastendruck" nicht erkennen kann.
Das Problem ist jetzt im Moment, nachdem ich den Code-Schnipsel mal
ausgetestet habe, dass die drei unteren if-Schleifen zeitlich alle
nacheinander durchlaufen werden. Habe ich alle 3 Tasten einmal gedrückt,
wird erst die erste, dann die zweite dann die dritte untere if-Schleife
durchlaufen.
Habe ich zum Beispiel nur die erste und die dritte Taste einmal
gedrückt, dann läuft nacheinander die erste und die dritte Schleife
untere if-Schleife durch.
Muss ich da doch noch die Variable zurücksetzten ?
while (1) {
if (get_button_touchreg()==1) {Tasten|=0b0001;} // Flag für Taste 1
setzen
if (get_button_touchreg()==2) {Tasten|=0b0010;}
if (get_button_touchreg()==3) {Tasten|=0b0100;}
if (get_button_touchreg()==4) {Tasten|=0b1000;}
// irgendwo anders
if (Tasten&0b0001) {
// mach das, was zur Taste 1 gehört
//tval_s = (calc_bar_position());
PWM_Ausgang (3,10);
}
if (Tasten&0b0010) {
// mach das, was zur Taste 2 gehört
PWM_Ausgang (3,50);
}
if (Tasten&0b0100) {
// mach das, was zur Taste 2 gehört
PWM_Ausgang (3,150);
}