Vorschlag für ein appkeyb-modul Kategorie: Programmierung (von Markus A. - 31.01.2004 22:16) | |
Als Antwort auf Re: Folientastatur - an alle von André H. - 26.01.2004 15:08
| |
Hallo @all, > Für das CC2-Application-Board gibt es bisher noch kein Modul. > Jedoch werde ich vielleicht eines in diesem Zuge schreiben,(appkeyb.c2) > welches stkeyb.c2 gleicht, jedoch andere Konstanten für AD-Werte und > die Input-Funktion auch etwas anders funzt, da hier schlie�lich nur > 12Tasten verfügbar sind. :-) Anbei ein Vorschlag für ein appkeyb-modul. Die fehlenden Funktionstasten sind in der Input - Funktion durch ein Funktionsmodus ersetzt worden, der durch die Taste "*" eingeleitet wird. Der Cursor wechselt dann von "_" zum Blinken. Es stehen folgende Funktionen zur Verfügung: * = Alles löschen 7 = Backspace 8 = Mal minus Eins 0 = Abbruch, Default-Wert zurückgeben Dann wechselt der Cursor wieder nach "_" und weitere Ziffern können eingebeben werden, ausser natürlich beim Abbruch. Gebt doch mal Rückmeldung, ob das was taugt. MfG Markus const ENTER = 11; const STAR = 10; int ExtPort; int keycode; function clearfigure(int i) { int j; for j = 1 ... i { lcdext.cursorleft(); lcdext.put(0x20); lcdext.cursorleft(); } } /***********************************/ /* Get single Key # */ /***********************************/ function getkey ( ) returns int { // int keycode; int adcval; int oldval; if ports.adc(7)>950 {keycode=255;return keycode;} // let the adc value get stable oldval=0; while math.abs(oldval-ports.adc(7))>10 {oldval=ports.adc(7);sleep 20;} // decode the pressed key adcval=ports.adc(7); if adcval>852 {keycode=3;return keycode;} if adcval>784 {keycode=6;return keycode;} if adcval>718 {keycode=9;return keycode;} if adcval>651 {keycode=11;return keycode;} if adcval>584 {keycode=2;return keycode;} if adcval>515 {keycode=5;return keycode;} if adcval>446 {keycode=8;return keycode;} if adcval>374 {keycode=0;return keycode;} if adcval>301 {keycode=1;return keycode;} if adcval>227 {keycode=4;return keycode;} if adcval>150 {keycode=7;return keycode;} if adcval>72 {keycode=10;return keycode;} } /***********************************/ /* Warten bis keine Taste gedrückt */ /***********************************/ function waitReleased() { wait getkey()==255; } /*************************************************/ // Zahleingabe mit der Folientastatur am AD-Port // und externem Display (Application-Board) // // Funktionstasten: // * = Funktions-Modus: // (im Funktions-Modus blinkt der Cursor) // * = Alles löschen // 7 = Backspace // 8 = Mal minus Eins // 0 = Abbruch und Rückgabe des Default-Wertes // // # = Enter // // maxziff = Anzahl der Ziffern, die eingegeben // werden können (2 bis 10) // default = Wert, der nach Ablauf von timeout oder // nach Abbruch zurückgegeben wird // timeout = Milisekunden bis zum Abbruch der // Funktion /*************************************************/ function input(byte maxziff, long default, long timeout) returns long {byte i, ckey; long timer, value, key; string zahl; str.clear(zahl); value = default; str.putlong(zahl, value); if maxziff<2 maxziff=2; else if maxziff>10 maxziff=10; lcdext.setcursor(2); // Cursor ist der Unterstrich "_" i = str.length(zahl); if i>maxziff value = 0; // Wenn die Defaultzahl mehr Stellen hat // als maxziff, dann wird die Defaultzahl // nicht berücksichtigt. if value != 0 lcdext.print(zahl); loop { timer=system.timer(); loop { key=getkey(); if key!=255 break; if system.timer()-timer>=timeout return default; // Timeout-Abbruch yield; } plm.beep(10);sleep 40;plm.beep(-1); i = str.length(zahl); if key<10 and i+1<=maxziff { if value>=0 value=value*10+key; else value=value*10-key; str.clear(zahl); str.putlong(zahl, value); clearfigure(str.length(zahl)-1); lcdext.print(zahl);} else if key == ENTER // Enter { lcdext.setcursor(0); return value; } else if key == STAR // Funktions-Modus { lcdext.setcursor(3); // Cursor blinkt waitReleased(); do { ckey = getkey(); } while ckey == 255; plm.beep(10);sleep 40;plm.beep(-1); lcdext.setcursor(2); if ckey == STAR //Alles löschen **************************** { if value != 0 {str.clear(zahl); str.putlong(zahl, value); clearfigure(str.length(zahl)); value=0; } } if ckey == 7 //Backspace ********************************** { if value != 0 { if value > -10 and value < 0 clearfigure(2); else clearfigure(1); value = value/10; str.clear(zahl); str.putlong(zahl, value); } } if ckey == 8 //Mal minus Eins ******************************* { if value != 0 { value = value*(-1); str.clear(zahl); str.putlong(zahl, value); if value<0 clearfigure(str.length(zahl)-1); if value>=0 clearfigure(str.length(zahl)+1); lcdext.print(zahl); } } if ckey == 0 //Default-Wert zurückgeben ****************** { lcdext.setcursor(0); return default; } //****************************************************** waitReleased(); } // if key == STAR wait getkey()==255; } // loop } // function | |
Antwort schreiben Antworten: |