Re: Tastaturabfrage mit Berechnung Kategorie: Programmierung C (von Ehlers - 19.01.2010 21:34) | |
Als Antwort auf Re: Tastaturabfrage mit Berechnung von Ehlers - 18.01.2010 23:01
| |
> > > > > 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. > > Wenn Du dies machen würdest, wäre ich Dir sehr verbunden. > Nun habe ich heute wieder den ganzen Tag damit verbracht das Problem zu lösen. > Kam mir schon etwas behindert vor. > Aber manchmal fällt man immer wieder über den gleichen Stein. > Danke für die schnelle Antwort. > Gru� Klaus Danke für die Nachricht. Habe es schnell getestet und es funktioniert so wie erwartet. Manchmal hat man ein Brett vor Kopf. Für den Zip File bin ich auch sehr verbunden. Mu� nun den Rest der Woche auf Achse. Wenn ich wieder zurück bin, werde ich schaun, in wie weit ich ihn für mein Prog nutzen kann. Gru� aus Schaumburg, Klaus | |
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum