Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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)