Forum: Mikrocontroller und Digitale Elektronik char Array in integer Array speichern geht nicht


von David (Gast)


Lesenswert?

Hallo,

ich bin neu auf dem Gebiet Programmierung weswegen meine Frage 
warscheinlich für welche mit mehr Wissen ganz klar zu beantworten ist. 
Deswegen wäre es schön wenn ihr mir helfen könntet, weil ich einfach 
nicht dahinter komme.

Problem:

Ich möchte float- integer- und char Werte an ein LCD Display senden. Das 
Display ist im 4 Bit Modus initialisiert, ich sende also immer erst das 
obere Nibble und dann das untere Nibble für jedes Zeichen. Char Arrays 
zu senden, also z.B. "Test" klappt schon. Jetzt möchte ich aber auch 
float und integer Variablen an das Display senden. Der Teil des Sendens 
an das Display sieht so aus:

/////////////////////////////////////////////////

while(ausgabe[i] != 0)
    {
    RS = 1;
    __delay_us(60);
    Datenport = (ausgabe[i]>>4);
    Datenbits_einlesen();
    Datenport = (ausgabe[i]);
    Datenbits_einlesen();
    __delay_ms(5);          // Wartezeit
    i++;
    }
//////////////////////////////////////////////////

das Array " ausgabe " ist weiter oben im Code angelegt worden:

char * ausgabe[];

Jetzt fehlt mir aber der Ansatz wie ich float und Integer werte in 
dieses Array speichern kann um sie dann durch den oben abgebildeten Teil 
an das Display zu schicken.

Kann mir hierbei jemand Tipps geben?

Grüße,
Dave

von H.Joachim S. (crazyhorse)


Lesenswert?

Du musst die Zahlen erstmal in einen Textstring umwandeln.
z.B. mit sprintf() umfangreich, aber speicherhungrig.
Gibt noch ein paar Alternativen.

von Karl H. (kbuchegg)


Lesenswert?

David schrieb:

> das Array " ausgabe " ist weiter oben im Code angelegt worden:
>
> char * ausgabe[];

das ist ein Array von Pointern. Das willst du ganz sicher nicht.

> Jetzt fehlt mir aber der Ansatz wie ich float und Integer werte in
> dieses Array speichern kann
gar nicht.

Aber du kannst eine Funktion, zb itoa benutzen, die dir einen String 
zusammenbaut, welchen du dann mit der STringausgabe ausgeben kannst
1
   char output[10];
2
3
   itoa( zahl, output, 10 );
4
   lcd_string( output );


> um sie dann durch den oben abgebildeten Teil
> an das Display zu schicken.

der Teil ist Quatsch.
Isolier dir erst mal den Kern in eine Funktion, die 1 Zeichen (nicht 
mehr) ausgeben kann.
Und damit baust du dann eine Funktion, die einen ganzen String ausgeben 
kann. Und diese Funktion benutzt du dann wieder weiter um Zahlen 
auszugeben, indem du dir die Zahl erst mal mit einer der vorhandenen 
Konvertierfunktionen in einen String konvertieren lässt.
1
void lcd_char( char c )
2
{
3
  RS = 1;
4
  __delay_us(60);
5
  Datenport = c >> 4;
6
  Datenbits_einlesen();
7
  Datenport = c;
8
  Datenbits_einlesen();
9
  __delay_ms(5); // Wartezeit
10
}
11
12
void lcd_string( const char* String )
13
{
14
  while( *string )
15
    lcd_char( *string++ );
16
}
17
18
void lcd_int( int Integer )
19
{
20
  char output[7];
21
22
  itoa( Integer, output, 10 );
23
  lcd_string( output );
24
}
25
26
27
int main()
28
{
29
  ...
30
31
  lcd_string( "Hallo " );
32
  lcd_char( ':' );
33
  lcd_int( 5 );
34
35
  ...
36
}

>
> Kann mir hierbei jemand Tipps geben?

Kauf dir ein C-Buch

: Bearbeitet durch User
von David (Gast)


Lesenswert?

hey,

danke für die schnellen Infos.

Gruß Dave

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.