
| Re: Logikfehler? Kategorie: Programmierung (von André H. - 5.01.2012 13:33) | ||
| Als Antwort auf Logikfehler? von Markus H - 5.01.2012 9:45 | ||
| ||
|
Hallo Markus, > Ich betreibe am PCF 8574AP i2c Modul von André eine 4x4 Matrix Tastatur und ein > 4x20 Display, mit den Tasten A bis D möchte ich durch das "Menü" blättern, > funktioniert auch soweit ganz gut, was noch nicht funktioniert: > Ich möchte das Display nur alle ca. 3 sec. aktualisieren, bzw, wenn ich eine Taste drücke > sollte das Display aktualisiert werden. > > Hier mein Code: > ... > if system.timer() - timer2 >= 3000 or pcfkeyb.getchar(5) != 0 //Macht mir Probleme! ... > > > ich hab bei der "or" Verknüpfung schon einiges mit Klammern rumprobiert, > das Display wird immer nur auf Tastendruck aktualisiert! > Lasse ich den Ausdruck "pcfkeyb.getchar(5) != 0" weg, wird das DP alle 3 sec. aktualisiert! > Evtl. kann mir jemand weiter helfen. > Weiter wäre es schön, wenn ich auch die Taste "0" benützen könnte ;-) Die Funktionen getchar() und getbin() warten auf einen Tastendruck. Besser gesagt, auf ein Tastenereignis. Eine Rückgabe mit dem Wert 0 gibt es bei getchar() nicht. (siehe pcfkeyb.c2 Char[]) Wenn Du nur bei irgendeinem Tastendruck reagieren willst, kannst Du den PCF8574 direkt abfragen: if system.timer() - timer2 >= 3000 or pcf.in(PCFaddr) != 0xF Die Bedingung wird True, sobald irgendeine Taste gedrückt wurde. Wenn die Funktioni nicht auf ein Tastenereignis warten soll, muÃ? Du hier getstate() verwenden. Hier wird Dir immer ein Bitmuster (16Bit) der gedrückten Taten zurückgegeben. Wenn Du also nur bei Taste '0' aktualisieren willst, kannst Du auch folgendes schreiben: if system.timer() - timer2 >= 3000 or pcfkeyb.getbin()==0b10000000 Allerdings erhöht das unnötig die Buslast am I²C-Bus. Besser wäre es, die Displayausgabe in eine eigene Funktion zu setzen, und diese entsprechend aufzurufen: if system.timer() - timer2 >= 3000 anzeige(); if ports.get(pcfkeyb.IntPort) { if pcfkeyb.getchar(5)=='0' anzeige();} Deine Loop-Schleife ist, so wie ich es sehe, unnötig, da Du diese immer nach einem Durchlauf mit break verläÃ?t. MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: | ||