Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Tastaturabfrage mit Berechnung Kategorie: Programmierung C (von KarlH - 18.01.2010 18:47)
Als Antwort auf Re: Tastaturabfrage mit Berechnung von Ehlers - 18.01.2010 12:41
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board
> > > Hallo Kommune,
> > > Ich bin fürchterlicher Neuling in der Programmierung  der Ccontrol pro Mega 128,
> > > habe mir aber zum Ziel gesetzt meine Heizung mit diesem Teil zu steuern.
> > > Das Prog-Teil zur Ã?berwachung und Regelung der einzelnen Heizkreise habe ich zum laufen gebracht.
> > > Nun benötige ich noch eine Abfrage über die Folientastatur  um den Regelwert meiner Räume
> > > in die Steuerung zu implementieren.
> > > Dafür habe ich mir eine zweistellige Variable Ref ausgedacht.
> > > In meinem kleinen Testprogramm gelingt es mir auch  die Variablen g_zehner und g_einer einzu-
> > > lesen.
> > > Wo es bei mir nur hängt ist die Beiden zu verknüpfen, sodass ich aus G_zehner =2 und g_einer =3
> > > zum B. 23 in die Variable ref bekomme.
> > >
> > > Kann mir bitte einer der Experten helfen?
> > >
> > > Nicht lachen, dies ist das Testprogramm:
> > >
> > > void Tastenabfrage(void)
> > > {
> > >         do
> > >      {
> > >      if (count == 1)
> > >      {
> > >      label0:
> > >      key_in=Key_Scan();
> > >      if (key_in==0) goto label0;
> > >      key_ch=Key_TranslateKey(key_in);
> > >      AbsDelay(200);
> > >      g_zehner=key_ch;
> > >      a=g_zehner;
> > >      LCD_CursorPos(0x45);
> > >      LCD_WriteChar(g_zehner);
> > >      key_in=0;
> > >      }
> > >      if (count == 2)
> > >      {
> > >      ref = 0;
> > >      label1:
> > >      key_in=Key_Scan();
> > >      if (key_in==0) goto label1;
> > >      key_ch=Key_TranslateKey(key_in);
> > >      AbsDelay(200);
> > >      g_einer=key_ch;
> > >      LCD_CursorPos(0x45+1);
> > >      LCD_WriteChar(g_einer);
> > >     // ref =( g_zehner-48)*10+(g_einer-48); dies führt immer zu Fehlberechnungen !!!!!!!
> > >      LCD_CursorPos(0x54);
> > >      LCD_WriteChar(ref);
> > >      key_in=0;
> > >      }
> > >
> > >      count++;
> > >      AbsDelay(200);
> > >      if (count == 3)break;
> > >
> > >      }while(1);
> >
> > Hallo Ehlers,
> >
> > da du bereits ein Key_TranslateKey machst, müsste da nicht die Berrechnung so aussehen:
> >
> > ref =(g_zehner*10)+g_einer;
> >
> > kanns leider nicht testen, aber das sollte so gehen.
> >
> > GruÃ?
> > GEMINI1606
>
> Danke für die schnelle Antwort.
> Funktioniert aber auch nicht, da in den Variablen bei z.B. 2 u. 6 dann einmal Dec 050 und Dec 054
> steht und nach Berechnung in ref Dec 042 also der Asterix ausgegeben wird.
> Kann man das überhaupt so berechnen? Oder sollte man das ganze mit apend zusammensetzen?
> Wie gesagt ich bin kein erfahrener Proggi!
> Danke u. GruÃ?

Hallo,

also Key_Translate() liefert dir den ASCII-Code deiner Ziffern. Mit (g_zehner-48)*10+(g_einer-48) erhältst
du dann eine Integerzahl, welche du für deine Steuerung brauchst. Diese Zeile hast du auskommentiert
 und hingeschrieben, dass dies zu einer fehlerhaften Berechnung führt. Das tut es aber nicht, sondern deine
Ausgabe mit LCD_WriteChar(ref); ist falsch. Die Funktion LCD_WriteChar() erwartet nämlich eine Variable
mit ASCII-Code. Mit LCD_WriteWord() kannst du Integervariabeln ausgeben.

Noch ein Tipp zur Programmierung: Die Lesbarkeit von Programmcode erhöht sich drastisch, wenn man
anstatt von "gotos" und "labels" Schleifen verwendet, und den Code entsprechend einrückt. Das hilft nicht
nur den Leuten, denen du deinen Code zum lesen gibst, sondern auch dir selbst, wenn du dann mal dein
Programm nach einigen Jahren modifizieren willst.

MfG Karl

P.S.: Ich habe auch eine Heizungssteuerung implementiert. Um die entsprechenden Sollwerte eingeben
zu können habe ich mir einen Thread gemacht, welcher permanent die Tastatur ausliest und etwaige
Eingaben dann in einem Puffer-Array speichert. Wenn du willst, kann ich dir die Datei schicken.


    Antwort schreiben


Antworten:

Re: Tastaturabfrage mit Berechnung (von Ehlers - 18.01.2010 23:01)
    Re: Tastaturabfrage mit Berechnung (von Ehlers - 19.01.2010 21:34)