Homepage

  • Projekte
  • Shop
  • Forum
Erweiterte Suche
  • Schnellzugriff
    • Unbeantwortete Themen
    • Aktive Themen
    • Suche
  • FAQ
  • Anmelden
  • Registrieren
  • Foren-Übersicht
  • Suche

LCD Text über Textbox

Ethernet Mega32 Experimentierboard
Antworten
  • Druckansicht
Erweiterte Suche
17 Beiträge
  • 1
  • 2
  • Nächste
MartinNPN
Beiträge: 4
Registriert: 07.01.2009, 23:59:09

LCD Text über Textbox

  • Zitieren

Beitrag von MartinNPN » 08.01.2009, 00:08:53

Guten Abend ;)

ich würde sehr gerne Text über eine Website eingeben können.

Dazu habe ich mir in der Webpage eine Textbox angelegt, die in der Form ist.

Code: Alles auswählen

	"<span class=\"Stil2\">LCD-Text</span></p>"
	"<input type=\"textbox\" name=\"I\" maxlength=20 >\r\n"
soweit so gut. in der httpd.c habe ich nun einen kleinen code gebastelt um den Inhalt zu erkennen:

Code: Alles auswählen

for (int b = TCP_DATA_START_VAR;b < (TCP_DATA_END_VAR);b++)

		{
			if (eth_buffer[b] == 'I' && eth_buffer[b + 1] == '=' && eth_buffer[b + 2] != '&')
			{
                        auswertung ...
                        }
                }
leider funktioniert das ganze noch nicht.

ich habe mal im Forum etwas gesucht, aber leider nichts gefunden was funktionierte.

Kann mir da vieleicht wer helfen ?


MfG Martin
Nach oben

MisterX
Beiträge: 2
Registriert: 17.11.2008, 20:37:32

Re: LCD Text über Textbox

  • Zitieren

Beitrag von MisterX » 04.02.2009, 23:18:53

Hallo,

suche 'mal hier im Forum nach "text to display".
Ich habe den Beitrag leider nicht verstanden - eine vernünftige Antwort lauf meine Frage leider auch nicht erhalten.
Evtl. kommst Du mit den Informationen klar.
Falls Du eine Lösung hast, dann stelle sie bitte hier herein.

Gruß MisterX
Nach oben

Benutzeravatar
jornbyte
Beiträge: 440
Registriert: 04.09.2008, 21:04:44

Re: LCD Text über Textbox

  • Zitieren

Beitrag von jornbyte » 05.02.2009, 20:32:44

Oh ja, entschudige Bitte das meine Freizeit z.Z sehr dünn ist.
Nach oben

gerdschi63
Beiträge: 2
Registriert: 16.02.2009, 18:47:49

Re: LCD Text über Textbox

  • Zitieren

Beitrag von gerdschi63 » 21.02.2009, 18:55:19

Wollte nur Frage ob die Textbox schon jemand ausgewertet hat ?
Entweder zum weiterbearbeiten ( Zahlen , Text ) oder zum Anzeigen.
Schaffe es leider nicht selber.
Danke
Nach oben

Benutzeravatar
jornbyte
Beiträge: 440
Registriert: 04.09.2008, 21:04:44

Re: LCD Text über Textbox

  • Zitieren

Beitrag von jornbyte » 23.02.2009, 23:34:27

1. Ich benötige diese Funktion nicht

2. bin selbst blutiger C Anfänger ( ASM ist mir lieber )

3. Habs mal umgesetzt und versuche Licht ins Dunkel zu bringen

Beachtet und Lest das was schon vorhanden ist.
Ergänst nur die Zeilen die fehlen. Vergleichen ist da angesagt, aber ich werde versuchen die Stellen mit // Begin und //End zu kennzeichnen.

Zu Beginn wird die httpd.c bearbeitet.
Jedes Formular, das Daten mit den Server austauscht hat den Namen "OUT"
Das steht auch in der httpd.c

Code: Alles auswählen

//Hier wird das codierte Passwort aus config.h gespeichert.
unsigned char http_auth_passwort[20];

unsigned char post_in[5] = {'O','U','T','='};        // hier steht das "OUT"
unsigned char post_ready[5] = {'S','U','B','='};
Daher muss auch das Textformular den Namen "OUT" haben.
Da aber alle den gleichen Name haben, bringt das natürlich Probleme auf den Plan.
Die müssen umgangen werden. Ich habe es so gelöst:
Jede htm-Seite bekommt einen eigenen "versteckten" Name.
Dieser Name muss gelesen werden und zur Auswertung herhalten.
Das geht so:

Code: Alles auswählen

eth_buffer[a+1+strcspn( (char*)(&eth_buffer[a+1]), "&" )] = 0;
Nun kommt diese Zeile ins Listing:

Code: Alles auswählen

			//Schaltanweisung finden!
			if (eth_buffer[a] != *http_entry[index].post_ptr++)
			{
				http_entry[index].post_ptr = post_in;
			}
			if(*http_entry[index].post_ptr == 0) 
			{
//Begin
				// HTML-Seitenname lesen !! Dieser ist in der HTML 
				eth_buffer[a+1+strcspn( (char*)(&eth_buffer[a+1]), "&" )] = 0;    
//End
			
				if( !input ) strcpy( quellfile, (char*)(&eth_buffer[a+1]) );
Nun steht der Name der Seite bereit und kann verwendet werden, wenn er abgefragt wird.
Also benötigen wir eine Abfrage dazu, die so aussieht:

Code: Alles auswählen

if( !strcmp( quellfile, "index.htm" ) )
Hier wird die index.htm abgefragt, also einbauen:

Code: Alles auswählen

			//Schaltanweisung finden!
			if (eth_buffer[a] != *http_entry[index].post_ptr++)
			{
				http_entry[index].post_ptr = post_in;
			}
			if(*http_entry[index].post_ptr == 0) 
			{

				// HTML-Seitenname lesen !! Dieser ist in der HTML 
				eth_buffer[a+1+strcspn( (char*)(&eth_buffer[a+1]), "&" )] = 0;    

			
				if( !input ) strcpy( quellfile, (char*)(&eth_buffer[a+1]) );

//Begin
				if( !strcmp( quellfile, "index.htm" ) )
				{
//End
					switch (eth_buffer[a+1])
				  	{
				    	case ('A'):
					   		PORT_tmp = PORT_tmp + 1;
				      		break;
Ihr seht, es steht noch weit oben im Listing der httpd.c
Wichtig ist noch zu erwähnen, es ist eine IF Schleife.
Diese beginnt mit einer Klammer "{" und muss auch abgeschlossen werden.
Also das Ende der Scleife auch mit "}" beenden. das ist an der Stelle der Fall:

Code: Alles auswählen

					** Bereits verwendete Zeichen siehe oben bei den case-Statements.
					*/

				  	}
					http_entry[index].post_ptr = post_in;
					//Schaltanweisung wurde gefunden
//Begin
				} //if( !strcmp( quellfile, "index.htm" ) )   //Ende der Schleife
//End
Und nun soll das Formularfeld ausgelesen werden. Das steht gleich danach. Das ist ja der Sinn dieser Übung.

Code: Alles auswählen

					//Schaltanweisung wurde gefunden

				} //if( !strcmp( quellfile, "index.htm" ) )

//Begin
				if( !strcmp( quellfile, "text.htm" ) )
				{
					if( input == 1 )
					{

						if (strlen((char*)&eth_buffer[a+1]) < 16)
						{
							strcpy( tlcd, (char*)&eth_buffer[a+1] );  
							lcd_print(1,0, "%s", tlcd);
						}
					}
					http_entry[index].post_ptr = post_in;
				} //if( !strcmp( quellfile, "ad.htm" ) )
//End
Hier sind alle Klammern schon da. Aber es gibt eine Zeile die noch eine Bemerkung bedarf:

Code: Alles auswählen

if (strlen((char*)&eth_buffer[a+1]) < 16)
Am Ende steht < 16. Diese 16 ist eine Puffergröße die in der lcd.c noch fest gelegt wird.
Wenn die Nachricht, die an das LCD übertragen werden soll, größer oder kleiner sein soll, dann diesen Wert anpassen.
Die Nachricht, die an das LCD gesendet wird, soll auch im Textformular erhalten bleiben.
Dazu ist auch ein Eintrg nötig, der das Textformular füllt:

Code: Alles auswählen

			}
			else
			#endif
				strlcpy_P(dest, http_entry[index].new_page_pointer, length);

			token[TOKENLEN] = 0;
			//HTTP_DEBUG("\r\nTeste Token: %s",token);

//Begin
			if (strncasecmp_P(token,PSTR("tlcd"),4)==0) 
			{
				sprintf_P(var_conversion_buffer,PSTR("%s"), tlcd);
				copy2eth_buff( var_conversion_buffer, &a );
				nchars = 4;
			}
//End
			if (strncasecmp_P(token,PSTR("TIME"),4)==0) 
			{
				uint16_t year;
				uint8_t month, day, hour, min, sec;
Der Spass steht weiter unten im Listing, sucht bitte die Stelle damit auch alles passt.
Die Zeile if (strncasecmp_P(token,PSTR("TIME"),4)==0) sollte aber leicht zu finden sein.

Nun kommt eine Anpassung in der lcd.c Da ist aber nur das Anlegen der Variable nötig.

Code: Alles auswählen

#include <lcd.h>

#if USE_SER_LCD

const char LINE_ADDRESS[] ={0x80,0xC0,0x90,0xD0}; //2 x 16;4 x 16 uvm.
//const char LINE_ADDRESS[] ={0x80,0xC0,0x94,0xD4}; //4 mal 20
volatile unsigned char back_light = 0;

char ZEILE = 0;
//Begin
unsigned char tlcd[16] = "";
//End
Hier ist diese 16 wieder zu finden. Also die Puffergröße die oben erwäht wurde.
Das muß noch in der lcd.h öffentlich gemacht werden.
Dazu ist die Zeile nötig:

Code: Alles auswählen

#endif //USE_LCD_4Bit

	#define BUSY_WAIT				6000
	
	#define NOP()	asm("nop")
	#define WAIT(x) for (unsigned long count=0;count<x;count++){NOP();}
//Begin
extern unsigned char tlcd[16];
//End
#endif //_LCD_H_
#endif //USE_SER_LCD
So, nu ist "fast" alles fertig. Eines Fehlt noch, die text.htm
Ich selbst habe diese Seite in einem Frame eigebettet auf einer SD-Karte zu liegen. Deshalb müsst ihr, wenn die Seite im Flash des Mega liegt soll, selbst die Anpassung machen. Ulli hat dazu ein Tool hier in Forum zu Download im Angebot. Ich werde mich da raushalten und keine Unterstützung liefern.
Aber nun zur Seite selbst.

Code: Alles auswählen

<html>
<head>
<title></title>
<link rel="stylesheet" href="standard.css" type="text/css">

</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
    <form name="form1" method="post" action="text.htm">
	<input type="text" name="OUT" style="display:none" value="text.htm">
	<table align="left" width="100%" border="0">
	<br>
     <br>
  <br>
	<textarea name="OUT" cols="16" rows="1">%tlcd</textarea>
	<pre align="left"><input type="submit" name="SUB" value="to LCD"></pre>
	</table>
</body>
</html>
Das ist alles, wobei ich da noch eine Anmerkungen machen möchte. Dabei handelt es sich um den "verstekten Name" und die LCD-Zeile selbst.

Code: Alles auswählen

<input type="text" name="OUT" style="display:none" value="text.htm">
In der Zeile mit dem name="OUT" seht auch value="text.htm", also der "versteckte" Seitenname.
Und hierwird auch das Textformular aufgerufen:

Code: Alles auswählen

<textarea name="OUT" cols="16" rows="1">%tlcd</textarea>
da sind die Zeichen, wieder die 16 Zeichen (Puffergröße) und eine Spalte (Zeile des LCD) angegeben. %tlcd ist das Puffer das in der lcd.c (h) angelegt wurde.

So, nu ist gut für heute....

Fertig.
Nach oben

5of9
Beiträge: 24
Registriert: 09.07.2009, 18:38:39

Re: LCD Text über Textbox

  • Zitieren

Beitrag von 5of9 » 11.07.2009, 08:36:07

Hallo,
danke für den Beitrag ist soweit relativ klar, leider funktionierts bei mir noch nicht.
Habe in der httpd.c folgende Variablen hinzugefügt:
unsigned char quellfile[20];
unsigned char input = 0;
Es lässt sich so ohne Fehler kompilieren nur die Ausgabe auf dem Display funktioniert noch nicht. Hast du noch einen Tipp?
Vielen Dank
Gruß Florian
Nach oben

Benutzeravatar
jornbyte
Beiträge: 440
Registriert: 04.09.2008, 21:04:44

Re: LCD Text über Textbox

  • Zitieren

Beitrag von jornbyte » 13.07.2009, 23:12:53

Da fehlen noch die Variablen :
unsigned char Oma[20];
und
unsigned char Opa = 0;
auch das Geschlecht deiner Mutter fehlt noch.

Aber im Ernst, wie soll ich deine Aussage bewerten?
Nach oben

5of9
Beiträge: 24
Registriert: 09.07.2009, 18:38:39

Re: LCD Text über Textbox

  • Zitieren

Beitrag von 5of9 » 14.07.2009, 09:40:29

Hallo,
:P Ja die könnte man natürlich auch noch zufügen wenn man sonst nichts zu tun hat... ;-)
Aber es funktioniert jetzt soweit, nur wie habt ihr das gelöst das auch Sonderzeichen angezeigt werden, Buchstaben und Zahlen funktionieren aber ,:- (Leerzeichen), etc. werden als++++%2C usw. angezeigt.
Habe wohl vergessen was zu includen, kleiner Denkanstoss bitte.
Danke
Gruß Florian
Nach oben

5of9
Beiträge: 24
Registriert: 09.07.2009, 18:38:39

Re: LCD Text über Textbox

  • Zitieren

Beitrag von 5of9 » 14.07.2009, 10:00:46

Und noch was
if (strncasecmp_P(token,PSTR("tlcd"),4)==0)
{
sprintf_P(var_conversion_buffer,PSTR("%s"), tlcd);
copy2eth_buff( var_conversion_buffer, &a );
nchars = 4;
}

Da ich kein "token" in meiner httpd.c habe funktioniert das so nicht. Vielleicht hättest du noch einen kurzen Tipp wie man das auch ohne das hinbekommt.
Danke
Nach oben

Klaus
Beiträge: 409
Registriert: 17.02.2008, 12:18:39

Re: LCD Text über Textbox

  • Zitieren

Beitrag von Klaus » 14.07.2009, 15:42:49

Hi,

also wenn sich das nicht geändert hat verwendet Ulrich ein "@" als Token in seiner Softwareversion.

mfg
Klaus
Nach oben

5of9
Beiträge: 24
Registriert: 09.07.2009, 18:38:39

Re: LCD Text über Textbox

  • Zitieren

Beitrag von 5of9 » 15.07.2009, 10:52:22

Hätte nicht noch jemand einen Tipp bezüglich der Zeichentabelle? Also die Fehlerhafte Darstellung von Sonderzeichen hiermit:
strcpy( tlcd, (char*)&eth_buffer[a+1] );
lcd_print(3,0, "%s", tlcd);

Direkt lcd_print(3,0, "test"); funktioniert! Was könnte also falsch sein!?
Danke
Nach oben

Dietmar
Beiträge: 22
Registriert: 13.01.2008, 15:57:30

Re: LCD Text über Textbox

  • Zitieren

Beitrag von Dietmar » 15.07.2009, 12:25:10

Sonderzeichen werden vom Explorer nach der Norm RFC 1738 übertragen.

http://www.faqs.org/rfcs/rfc1738.html

Gruß
Dietmar
Nach oben

5of9
Beiträge: 24
Registriert: 09.07.2009, 18:38:39

Re: LCD Text über Textbox

  • Zitieren

Beitrag von 5of9 » 15.07.2009, 21:12:33

Danke! Das hilft! Wer weiss wie lange ich gebraucht hätte um darauf zu kommen das es nicht am Programm liegt!? :roll:
Nach oben

5of9
Beiträge: 24
Registriert: 09.07.2009, 18:38:39

Re: LCD Text über Textbox

  • Zitieren

Beitrag von 5of9 » 17.07.2009, 09:04:30

So, nun funktioniert alles wie ich mir das vorstelle einzig die Darstellung des LCD Texts auf der webpage funktioniert noch nicht:
Damit funktioniert es nicht, d.h. zu den Zeitpunkt an dem die Website "%tlcd@" ausliest hängt sich der Atmega auf!Einen Tipp bitte! Vielen Dank
if (strncasecmp_P("tlcd@",http_entry[index].new_page_pointer,5)==0)
{
strcpy_P(var_conversion_buffer, tlcd);
str_len = strnlen(var_conversion_buffer,CONVERSION_BUFFER_LEN);
memmove(&eth_buffer[TCP_DATA_START+a],var_conversion_buffer,str_len);
a += str_len-1;
http_entry[index].new_page_pointer = http_entry[index].new_page_pointer+6;
}
Nach oben

sebi87
Beiträge: 71
Registriert: 25.07.2009, 19:07:34

Re: LCD Text über Textbox

  • Zitieren

Beitrag von sebi87 » 15.01.2010, 14:25:22

@jornbyte: Wie und wann wird input erhöht? Bei mir ist input immer Null und ich bekomme keine Ausgabe.

:(

Grüße Sebastian
Nach oben

Antworten
  • Druckansicht

17 Beiträge
  • 1
  • 2
  • Nächste

Zurück zu „ETH_M32_EX“



  • Foren-Übersicht
  • Alle Zeiten sind UTC+02:00
  • Alle Cookies löschen

Powered by phpBB® Forum Software © phpBB Limited

Deutsche Übersetzung durch phpBB.de

Datenschutz | Nutzungsbedingungen

 

 

sitemap  |    |  datenschutz   |  impressum