Inhalt einer Variablen an DIsplay übergeben

Gast #364782
Lesenswert?

Hallo,

ich habe da ein Proble: Ich möchte dem Display eine Variable übergeben,
in der ein Wert gespeichert ist. Dazu habe ich die Variable global
definiert. Jetzt möchte ich, dass das Display den Inhalt der Variable
Wert (hier: 123) ausgibt.

Es funktioniert aber nicht. Ich bekomme die Fehlermeldung:
"../display2.c:24: warning: passing arg 1 of `lcd_out' makes pointer
from integer without a cast" Als absoluter Newbie kann ich da so gar
nix mit anfangen. Was mach ich falsch?? Ich hab doch gar keinen Pointer
initialisiert!?

Hier der Quellcode. Danke schonmal!

Gruß Sven

#include <avr/io.h>
#include "lcd4b.c"        //LCD-Routine einbinden

int wert=123;

int ausgabe();


int main(void)
{

  ausgabe();
  while(1);

}


int ausgabe()
{

  DDRD |= 0b11111100;      //Pins 2-7 als Ausgänge
    lcd_linit();        //LCD Initialisieren
  lcd_clear();        //Display löschen
  lcd_out(wert);      //Text ausgeben
  lcd_command(line2);      //2. Zeile
  lcd_out("!!!");        //Text ausgeben
  return(0);
}
Gast #364783
Lesenswert?

Die Funktion lcd_out erwartet einen Pointer als Übergabewert. Du
übergibst einen Zahlenwert. Das geht nicht. Entweder benutzt Du
formatierte Ausgabe oder Du musst Deinen Zahlenwert zunächst in einen
ASCII-String umwandeln. Ich weiß nicht, wie die Funktion lcd_out
definiert ist, deshalb kann ich dazu nicht mehr sagen.

Gruß

Johnny
Gast #364784
Lesenswert?

Ich nehme an das lcd_out einen String erwartet Da du weiter unten
"!!!" an lcd_out übergibst,
also wie johnny sagt: erst mal wert in einen String verwandeln und dann
einen Pointer auf diesen String an lcd_out übergeben

Grüße
Walter
Gast #364785
Lesenswert?

Hmm...

danke schonmal für den Hinweis. Habe auch daraufhin ein bisschen im
Netz gesucht, jedoch keine wirkliche Lösung gefunden.

Es waren immer Verweise, man müsse sprintf oder _itoa benutzen. Jedoch
stürzt mein AVM Studio beim kompilieren ab.

Ausserdem muss ich dazu Bibliotheken einbinden, die riesig groß sind
und ich (bis auf die eine Ausnahme) nicht brauchen werde. Kann mir
daher jemand einen Tip für eine nach mögl. einfache Realisierung
geben??

Gruß Sven
Gast #364786
Lesenswert?

int ausgabe(void)
{
  char buff [7];        // buffer Größe für +/-32768 und \0
  ...
  itoa(wert, buff, 10); // Wert in ASCII konvertieren
  lcd_out(buff);        // Wert ausgeben
  ...
}

itoa ist in stdlib.h, also nicht riesig groß

mfg
Reiner
Gast #364787
Lesenswert?

ahhhh...

das kann doch alles nicht sein...

Erstmal danke für die Antwort! Ist ja doch nicht so schwierig..

Habe aber wieder ein Problem: Wenn ich versuche, meinen Quellcode mit
#include "stdlib.h" zu kompilieren, stürzt mein komplettes AVM Studio
ab. Macht einfach nix mehr, so dass ich es abschiessen muss!? Was ist da
jetzt los??????????

stdlib.h ist im selben Verzeichnis! Er scheint es auch zu finden, da
eine Fehlermeldung kommt, wenn ich es nicht im Verzeichnis habe...

Die Kompilierung beendet er gar nicht... wie gesagt, kann nix mehr
machen dann???

Gruß Sven
Gast #364788
Lesenswert?

#include <stdlib.h>

nicht "stdlib.h"
Anführungszeichen nur für "eigene" .h files

stdlib.h sollte nicht in dem Verzeichnis sein indem der eigene Code
ist.
Der Compiler "weiß" schon wo er seine eigenen libs findet.

mfg
Reiner

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren