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

Re: Eingabe von float´s über Tastatur Kategorie: Programmierung (von Karl - 12.05.2008 22:49)
Als Antwort auf Re: Eingabe von float´s über Tastatur von André H. - 11.05.2008 22:17

> Hallo Karl,
>
> überprüfe bitte zuerst Deine Tastatur. Die Shifttaste schein kaputt zu sein.
>
> > in der stkeyb.c2 gibt es eine function zur eingabe von int-zahlen.
> > wer hat eine zur eingabe von float-zahlen?
>
> Für was willst Du Float-Zahlen über die Tastatur eingeben?
> Reicht evtl. auch Festkomma?
> Und wie soll mit der Station-Tastatur das Komma eingegeben werden?
> Bei Festkomma kann man die Position vorbestimmen.
> (Hier kann man die vorhandene Funktion sehr leicht anpassen.)
>
> MfG André H.
>

hallo andre,
danke für deine antwort. meine shifttaste funktioniert schon richtig, nur meine finger sind zu ungelenk.

die dateneingabe bei der fertigen steuerung wird von x-beliebigen leuten vorgenommen.
daher halte ich es schon für angebracht, das die eingabe der werte mit wechselnder stellenzahl
vorgenommen werden kann.
mittlerweile bin ich nach einer suche im forum fündig geworden und habe eine function "getnumfloat",
geschrieben von "m8nix" gefunden. diese wandelt strings in floats um.
dazu passend habe ich eine function "stringzahl" geschrieben.
diese beiden functionen ermöglichen eine recht komfortable eingabe von floats.
hier wird das komma mit F1 gesetzt.
in der fertigen steuerung soll eine folientasttatur von cc-tools verwendet werden, leider warten wir
nun schon 5 wochen auf die teile(bestellung von peter tebyl).
im anhang findest du,ihr die functionen mit einem kleinen testprogramm.
testet und kritisiert.

mfg karl

//======================================================================================
//--String in Floatzahl konvertieren---------------------------
// von "m8 nix" vom 29.4.2007
//
  function getnumfloat (byte s[]) returns float
// Die zurückgegebene Zahl kann in
// float gespeichert werden
//
//float x;
//string a;
//a="178.64";
//x=getnumfloat(a);
//--------------------------------------------------------
{byte i;float x,y;
 y=0.0;
 x=0.1;
 if s[31]==0 return 0;
 if s[0]!='-' and s[0]!='.' and not(s[0]>=0x30 and s[0]<=0x39) return -2147483647; // keine Zahl
 if s[0]!='-' and s[0]!='.' y=s[0]-0x30;
 i=1;
 while (s[i]!='.' and i!=s[31])
 {
  if s[i]<0x30 or s[i]>0x39 return -2147483647; // keine Zahl
  y=y*10.0 + (s[i]-0x30);
  i=i+1;
 }
 if (s[i]=='.' and i  while i!=s[31]
 {
  if s[i]<0x30 or s[i]>0x39 return -2147483647; // keine Zahl
  y=y+((s[i]-0x30)*x);
  x=x/10.0;
  i=i+1;
 }
 if s[0]=='-' y=y*(-1.0);
 return y;
}
//==============================================================================================
//************************************************************************************
//Function zur Eingabe einer Floatzahl mittels eines String´s und
//anschlieÃ?ender Konvertierung in eine echte Floatzahl mit der
//Function getnumfloat(string)
// t Stellenzahl für den String (max 10), Komma zählt als Stelle
// min mindest Zahlengrö�e
// max maximale Zahlengrö�e
// F1 für Komma
// F2 für Abbruch und Rückgabe von DEFAULT
// C clear und neue Eingabe
// ENTER AbschluÃ? und Ã?bergabe der Zahl
//von Karl 12.5.2008
//************************************************************************************
function stringzahl(float default,int t,int min,int max) returns float
{
int u,v,w,x,y,komma;
long timer;
float z;
string a[10];
string b;
string stzahl[11];
stzahl[0]="0";
stzahl[1]="1";
stzahl[2]="2";
stzahl[3]="3";
stzahl[4]="4";
stzahl[5]="5";
stzahl[6]="6";
stzahl[7]="7";
stzahl[8]="8";
stzahl[9]="9";
stzahl[10]=".";
for x=0...9 {a[x]="";}
lcdext.setcursor(3);
b="0";
x=0;komma=0;

loop
{
timer=system.timer();
y=stkeyb.get();
wait y!= stkeyb.get()or (system.timer()-timer) >= 5000;     // Timeout
plm.beep(10) ;sleep 40;plm.beep(-1);                        // warten auf Taste
u=stkeyb.get();
wait not stkeyb.get();sleep 100;                            // Taste losgelassen

if u== 14 {break;}                                          //RETURN Eingabe beendet

if u== 11 or (system.timer()-timer) >= 5000                 // Timeout
           {lcdext.setcursor(0);;return default;}           //F2     Abbruch DEFAULT zurück
if u== 13 {for v=0...9 {a[v]="";};                          //C      clear, neue Eingabe
           for w=1...x {lcdext.cursorleft();
           lcdext.print(" ");lcdext.cursorleft();}
           b="0";x=0;
           }
if x==t  {u=255;}                                           //keine Ziffer
if u == 10 and komma == 10 {u=255;}
if u == 10 {komma = 10;}                                    //verhindert zweites Komma
if u <= 10 and u>=0
     {a[x]=stzahl[u];
      lcdext.print(a[x]);
      x=x+1;
      }
}
for x=0...9 {b=b+a[x];}
z=getnumfloat(b);
lcdext.setcursor(0);
if z < min or z > max {return default;}                  // prüft Plausibilität
return z;
}
//************************************************************************************
// schreibt eine float-Zahl, mit Nachkommastellen
// w   Anzahl derNachkommastellen, hier maximal 3 Stellen
//************************************************************************************
function printfloat(float x,int w)
{
int u,y;
float z;
y= x;
z= (x-y);
if w==1 {u=z*10;}
if w==2 {u=z*100;}
if w==3 {u=z*1000;}
lcdext.zahl3(y);lcdext.print(".");
if u<=9 {lcdext.ziff(u);}
if u>=10 and u<=99 {lcdext.zahl2(u);}
if u>=100 {lcdext.zahl3(u);}
}
//**************************************************************************************



thread main
{
lcdext.init();
stports.init();                                       // Initialisierung
relais.alleaus();


float x;

lcdext.print("Eingabe : ");
x=stringzahl(x,4,10,95);

lcdext.line(2);lcdext.print("Ausgabe : ");
printfloat(x,2);
wait not ports.get(8);
}
//***********************************************************************************************************





    Antwort schreiben


Antworten: