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

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: