Re: Folientastatur Kategorie: Programmierung (von Markus A. - 24.01.2004 20:23) | |
Als Antwort auf Re: Folientastatur von TN - 24.01.2004 18:30
| |
Grüss Euch, hier meine Version zur Zahleneingabe. Die Anpassung an das Reglerboard sollte machbar sein. /******************************************************************/ /* Tasterturauswertung Folientastertur 0-9, *, # am AD-Port */ /* mit externem LCD, zweizeilig */ /* Author : Markus Arndt (chmarndt@arcor.de) */ /* Datum: : Januar 2004 */ /* */ /* BASIEREND AUF DEM */ /* Alternativtreiber für C-Control II Tastaturauswertung */ /* */ /* Author : André Helbig (andre.h@cc2net.de) */ /* Vorlage : André Helbig (andre.h@cc2net.de) */ /* Version : 1.0 */ /* Datum : 06. Juli 2003 */ /* Getestet : ja */ /* Benötigt : ports.c2, plm.c2, str.c2, lcdext.c2 ab V2.2 */ /* */ /******************************************************************/ const ENTER = 11; const CLEAR = 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;} } /***********************************/ /* Zahleingabe */ /* Anzahl der Ziffern: 2 bis 10 */ /* (maxziff=0 oder 1 geht nicht.) */ /* */ /* Funktionstasten: */ /* * = Clear */ /* # = Enter */ /* */ /* 0 als default-Zahl wird nicht */ /* angezeigt, es erscheit also nur */ /* der "_", wenn dann direkt # */ /* eingegeben wird, wird 0 */ /* als Ergebnis zurückgegeben. */ /* Nach dem timeout wird die */ /* default-Zahl zurückgegeben. */ /***********************************/ function input(byte maxziff, long default, long timeout) returns long {byte i, key, cf; long timer, value; string zahl; str.clear(zahl); value = math.abs(default); str.putlong(zahl, value); if value == 0 cf = 0; else cf = 1; // verhindert mehrmaliges Löschen und Linksrücken des Cursors 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 { str.clear(zahl); str.putlong(zahl, value); i = str.length(zahl); key=getkey(); if key!=255 break; if system.timer()-timer>=timeout return value; // Timeout-Abbruch yield; } plm.beep(10);sleep 40;plm.beep(-1); if key < 10 and i+1<=maxziff {cf = 1; 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 == CLEAR // Eingabe löschen {if cf == 1 // mehrmaliger Aufruf von clearfigure wird // unterbunden { cf = 0; str.clear(zahl); str.putlong(zahl, value); clearfigure(str.length(zahl)); value=0; } } wait getkey()==255; } } /* zum Beispiel ... ************************************************/ thread main { int i,j,n,x; lcdext.init(); loop { x = 0; lcdext.clear(); lcdext.print("Addtion: Wie"); lcdext.line(2); lcdext.print("viele Zahlen: "); n = input(1, 2, 50000); sleep 700; for i=1 ... n { lcdext.clear(); lcdext.print("Addtion ["); lcdext.zahl2(i); lcdext.print("/"); lcdext.zahl2(n); lcdext.print("]"); lcdext.line(2); lcdext.delline(2); lcdext.line(2); lcdext.print("Zahl: "); j = input(5, 0, 50000); x = x + j; sleep 700; } lcdext.clear(); lcdext.print("Ergebnis:"); lcdext.delline(2); lcdext.line(2); lcdext.print("x = "); lcdext.zahl(x); i = input(1, 0, 50000); // mit # quittieren, dann geht es weiter. sleep 700; } } | |
Antwort schreiben Antworten: Re: Folientastatur (von TN - 25.01.2004 13:44) Re: Folientastatur (von Markus A. - 25.01.2004 20:05) Re: Folientastatur (von TN - 25.01.2004 20:22) Re: Folientastatur (von Markus A. - 25.01.2004 20:52) Re: Folientastatur (von TN - 26.01.2004 21:27) Re: Folientastatur (von Waldmeister - 28.01.2004 9:23) |