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: Re: Logikfehler? (von Markus H - 5.01.2012 15:20) Re: Logikfehler? (von André H. - 8.01.2012 19:37) Re: Logikfehler? (von Markus H - 9.01.2012 19:45) |