PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablen auf Display ausgeben



palermo
03.12.2006, 17:57
Hallo
ich habe ein Board und ein Display von qfix und möchte, dass auf meinem Display der gemessene Wert von meinem Sharp ausgegeben wird.
Nur leider wird mir bei diesem Code:


#include "qfixBobbyBoard.h"
#include "qfixLCD.h"

BobbyBoard bobby;
LCD lcd;

int main(){

while (1) {
lcd.clear();
int sharp = bobby.analog(0);
lcd.print(0,0,"sharp");
}
}

Nur "sharp" ausgegeben und nicht der Abstand zur Wand.
Kann mir jemand sagen was ich bei "lcd.print" reinschreiben muss?
mfg palermo

PS: int sharp geht auch nicht

coCo
03.12.2006, 18:40
Ich würde mal annehmen, dass du statt "sharp" einfach nur sharp schreiben solltest. Wenn du "sharp" schreibst wird das als String erkannt und ausgegeben, schreibst du jedoch sharp ohne Anführungsstriche wird der Wert in der Variablen sharp benutzt.

MfG

palermo
03.12.2006, 20:09
Hallo
Die " gehören zum Befehl dazu und werden auf dem Display auch nicht ausgegeben, ich habe das nur vorhin so geschrieben.
trotzdem danke
mfg palermo

Travolds
04.12.2006, 08:43
ich kenne die lcd.print funktion nicht, aber so wie du es angibst, soll lcd-print den string "sharp" ausgeben und nicht irgendeinen int-wert der so heisst. coCo hat damit schon recht.
die " kennzeichnen ja in c einen string ..

wenn die lcd.print funktion string-formatierung versteht, dann sollte dein kommando so ähnlich aussehen:

lcd.print(0, 0, "%d", sharp");

das %d ist ein platzhalter für einen int.
ansonsten einfach mit sprintf einen string daraus machen und diesen dann ausgeben:

char wert[10+1]; // keine ahnung wie lang dein wert sein könnte
sprintf(wert, "%d", sharp);
lcd.print(0,0, wert);

hoffe das ist so ok :)
ein link zur benutzung von ansi-c sprintf findest du unter [1].

lg

[1] http://www.cppreference.com/stdio/sprintf.html

zumgwadrad
04.12.2006, 15:29
Hi,
bin da auch gerade drüber!
Das muss doch eigentlich mit einem itoa(sharp,puffer,10) gelöst werden!


int sharp;
char puffer[5];
itoa (sharp, puffer, 10);
lcd.print(0,0,puffer);

palermo
04.12.2006, 17:56
Hallo Travolds
Meintest du das so? (hast du absichtlich vor sharp kein " geschrieben?)


#include "qfixBobbyBoard.h"
#include "qfixLCD.h"

BobbyBoard bobby;
LCD lcd;

int main(){

while (1) {
lcd.clear();
int sharp = bobby.analog(0);
lcd.print(0, 0, "int", sharp");
}
}




> "c:\WinAVR\compile-mega32.bat" myTest
compiling ...
myTest.cc: In function `int main()':
myTest.cc:12: Fehler: fehlendes abschließendes Zeichen "
myTest.cc:13: Fehler: expected `)' vor »}«-Zeichen
myTest.cc:13: Fehler: expected `;' vor »}«-Zeichen
avr-objcopy: 'myTest.elf': No such file
OK

> Process Exit Code: 0
> Time Taken: 00:01

Was müsste ich in die Klammern von char wert[]; eintragen wenn mein Wert z.B. bis 300 geht?

Hallo zumgwadrad
Irgendwie wird itoa garnicht als Befehl erkannt. :-k


#include "qfixBobbyBoard.h"
#include "qfixLCD.h"

BobbyBoard bobby;
LCD lcd;

int main(){

while (1) {
lcd.clear();
int sharp = bobby.analog(0);
char puffer[5];
itoa (sharp, puffer, 10);
lcd.print(0,0,puffer);
}
}


> "c:\WinAVR\compile-mega32.bat" myTest
compiling ...
myTest.cc: In function `int main()':
myTest.cc:13: Fehler: »itoa« wurde in diesem Gültigkeitsbereich nicht definiert
myTest.cc:13: Warnung: Variable »itoa« wird nicht verwendet
avr-objcopy: 'myTest.elf': No such file
OK

> Process Exit Code: 0
> Time Taken: 00:00



PS: Sorry an alle wegen meiner Dummheit - ich programmiere noch nicht so lange.

zumgwadrad
04.12.2006, 18:08
Hi palermo!
Sry war wieder nur ne Halbinfo von mir!
Musst noch die Standardbib includen


#include <stdlib.h>

Sonst läuft da herzlich wenig!!
Viel Erfolg noch!!

palermo
04.12.2006, 18:36
Hallo zumgwadrad
Es funktioniert sehr gut :Strahl (ich habe da noch einen warte-Befehl reingesetzt weil der Wert so schnell gewechselt hat das man gar nichts sehen konnte). Es wäre sehr nett wenn du versuchen würdest mir das einmal ganz kurz zu erklären was ich da jetzt programmiert habe.


#include <stdlib.h>
#include "qfixBobbyBoard.h"
#include "qfixLCD.h"

BobbyBoard bobby;
LCD lcd;

int main(){

while (1) {
lcd.clear();
int sharp = bobby.analog(0);
char puffer[5];
itoa (sharp, puffer, 10);
lcd.print(0,0,puffer);
sleep(1);
}
}

vielen Dank für eure Hilfe

zumgwadrad
04.12.2006, 18:42
Hi!
Freut mich das es funktioniert. Bei mir noch nicht wirklich! Ich bin der Herr des Sonderzeichensalats.
Ne gute anleitung zu itoa findest du hier
http://www.goblack.de/desy/sc12chip/c/bibliothek/itoa.html
Eigentlich wandelst du die Zahl ja nur in ein String um, da du am Display ja nur Strings und keine Werte ausgeben kannst! Also dieses"%d",sharp);
geht ja nur bei printf und so.
Díesen erzeugten String kannst du jetzt am Display ausgeben!
Viel Erfolg weiterhin!

palermo
04.12.2006, 18:59
Hi!
Danke, ich glaube das habe ich verstanden (sehr guter Link). Nur noch eine letzte Frage und zwar habe ich noch nie die Variablenart char benutzt. Wofür ist die [5] ?
mfg palermo

zumgwadrad
04.12.2006, 20:38
Hi!
char ist die abkürzung für character, also entweder ein Buchstabe oder eine ganze Zahl zw. -127 und +128.
[] nach einer Variable deklarieren diese als so genanntes Array, also Feld, oder leichter gesagt eine Reihe unterschiedlicher Daten. Ein String setzt sich zusammen aus einer Reihe von Buchstaben also einem char Array. Die 5 gibt die Länge des Arrays an. Also kannst du aktuell maximal eine 5stellige Zahl ausgeben. Schau dazu auch mal im Wissensbereich unter C-Programmierung ins C-Tutorial. Bietet einen übersichtlichen Einstieg in C.

Travolds
05.12.2006, 11:17
Hallo Travolds
Meintest du das so? (hast du absichtlich vor sharp kein " geschrieben?)


nein ich hatte es so gemeint:



#include "qfixBobbyBoard.h"
#include "qfixLCD.h"

BobbyBoard bobby;
LCD lcd;

int main()
{
char wert[3+1];

while (1) {
lcd.clear();
int sharp = bobby.analog(0);
sprintf(wert, "%d", sharp);
lcd.print(0, 0, wert);
}
}


kurz als erklärung:

zeile "char wert[3 + 1];":
du hast ja gesagt du hast maximal 300 als wert also 3 zeichen,
der wert soll also in einen string umgewandelt werden. für jedes zeichen muss speicher reserviert werden. wir müssen also ein array mit 4 zeichen anlegen.
du denkst dir sicher es würden dann ja 3 zeichen reichen, aber das ist nur bedingt der fall.
in c wird ein string immer mit '\0' abgeschlossen. dies kennzeichnet das ende eines strings. '\0' ist ein weiters zeichen und muss unbedingt berücksichtigt werden, wenn du mit string funktionen arbeitest.

zeile sprintf:
siehe link von meinem ersten post :)

zeile "lcd.print(0, 0, wert);":
an die unterfunktion lcd.print wird ein pointer auf die daten übergeben. ein pointer zeigt auf eine speicherstelle in der dein wert steht. in unserem fall steht der string in der variable "wert" welche auf irgendeine speicherstelle zeigt.

hoffe das ist verständlich :)



PS: Sorry an alle wegen meiner Dummheit - ich programmiere noch nicht so lange.


mach dir da drüber keine gedanken jeder hat mal klein angefangen. trotzdem würd ich dir nahelegen, dir irgendeinen c kurs reinzuziehen. spätestens bei einem komplexeren programm wirds dich aufschmeissen mit pointern sag ich mal :)
wenn du aber zeit in zuerst lesen und dann probieren investierst, wirst du sicher viel mehr spass an der sache haben :)

lg

palermo
06.12.2006, 13:22
Hallo Trravolds
Hm du hast sicher Recht nur habe ich (wirklich) nichts passendes bei Google gefunden und dann habe ich hier mal gefragt. Ich würde gerne mal einen C/C++ Standartbibliotehk Kurs mitmachen nur bin ich noch nicht wirklich fündig geworden, ich habe aber bei Büchern und so nur C/C++ Anleitungen gefunden um Spiele/PC-Programme zu programmieren. Ich wäre an Link/Buchtipps sehr interesiert.


Also er denkt immer noch das sprintf eine Variable sei:


> "c:\WinAVR\compile-mega32.bat" myTest
compiling ...
myTest.cc: In function `int main()':
myTest.cc:15: Fehler: »sprintf« wurde in diesem Gültigkeitsbereich nicht definiert
myTest.cc:15: Warnung: Variable »sprintf« wird nicht verwendet
avr-objcopy: 'myTest.elf': No such file
OK

> Process Exit Code: 0
> Time Taken: 00:00
Aber das Prinziep denke ich habe ich verstanden.

Hallo zumgwadrad
danke für die Erklärung, müsste ich verstanden haben.

PS:Irgendwie kann man überhaupt keine Formel erstellen um den Sharp-Wert in cm umzurechnen - man kann überhaupt keine Regelmäßigkeit feststellen. Weiß einer von euch was darüber? (ich weiß, dass passt nicht mehr zum Thema aber wenn ihr gerade einen passenden Link da habt.............. O:))

*grins* inerhalb kürzester Zeit bin ich schon der zweite der nach itoa fragt
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=25688&highlight=

Travolds
06.12.2006, 13:41
hi,



Hm du hast sicher Recht nur habe ich (wirklich) nichts passendes bei Google gefunden und dann habe ich hier mal gefragt. Ich würde gerne mal einen C/C++ Standartbibliotehk Kurs mitmachen nur bin ich noch nicht wirklich fündig geworden, ich habe aber bei Büchern und so nur C/C++ Anleitungen gefunden um Spiele/PC-Programme zu programmieren. Ich wäre an Link/Buchtipps sehr interesiert.


links siehe [1] und [2]



Also er denkt immer noch das sprintf eine Variable sei:


> "c:\WinAVR\compile-mega32.bat" myTest
compiling ...
myTest.cc: In function `int main()':
myTest.cc:15: Fehler: »sprintf« wurde in diesem Gültigkeitsbereich nicht definiert
myTest.cc:15: Warnung: Variable »sprintf« wird nicht verwendet
avr-objcopy: 'myTest.elf': No such file
OK

> Process Exit Code: 0
> Time Taken: 00:00
Aber das Prinziep denke ich habe ich verstanden.

Hallo zumgwadrad
danke für die Erklärung, müsste ich verstanden haben.


sieht so aus als würdest du nicht den benötigten header für sprintf includieren.
probier mal ein



#include <stdio.h>


dort wo auch deine anderen includes stehen, einzutragen.

zu deiner letzten umrechnungsfrage kann ich dir leider gar nicht helfen :)

lg

[1] http://www.galileocomputing.de/openbook/c_von_a_bis_z/
[2] http://de.wikibooks.org/wiki/C-Programmierung

palermo
06.12.2006, 13:54
Hallo Travolds
der code funktioniert!
Hast du das Buch?
mfg palermo

Travolds
06.12.2006, 14:05
hi,

nö hab ich nicht :)
habs dir deswegen geschickt, weil es auf den ersten blick einen vernünftigen anschein macht und komplett online verfügbar ist.
einfach mal anfangen und durchlesen - ist eh net so viel ;)

unter [1] findest du auch noch eine ansi-c/c++ befehlsreferenz die mit beispielen doch sehr gut ist - IMHO :)

lg

[1] http://www.cppreference.com

palermo
15.12.2006, 16:25
Hallo
Die Werte 119 bis 54 sind produktgleich bzw. antiproportional \:D/ \:D/ \:D/ und lassen sich somit natürlich mit einer Formel errechnen. Das funkt sehr gut nur bekomme ich wegen char ja nur ganze Zahlen ausgegeben und ersetzen gegen z.B. short geht auch nicht. Es wäre ein wenig schade immer nur ganze Zahlen zu bekommen da ich sie ja recht genau berechnen kann.
mfg palermo



#include <stdlib.h>
#include "qfixBobbyBoard.h"
#include "qfixLCD.h"

BobbyBoard bobby;
LCD lcd;

int main(){

while (1) {
int sharp = bobby.analog(0);
int cm;
char puffer[5];
lcd.clear();
if ((sharp<120) && (sharp>53)) {
cm=540/sharp;
lcd.clear();
itoa (cm, puffer, 10);
lcd.print(0,0,puffer);
lcd.print(0,2,"cm");
sleep(1);
}
}
}

palermo
17.12.2006, 12:11
Hallo
Weiß niemand was ich machen muss um Kommazahlen zu bekommen? :shock:
*komisch* palermo

zumgwadrad
17.12.2006, 22:26
Hi!
Des mit den Nachkommazahlen musst du mal im Forum suchen! Irgendwie double auf display oder so!
Hatte dazu schonmal was gelesen! musst auf jeden fall vorkomma und nachkomma getrennt berechnen und ausgeben!
Also des Prinzip war das du den Wert berechnest und nach der Berechnung mit 100 mutlipizierst! Diesen Integer teilst du dann nochmal durch 100, mittels Modula-Operator(%), das ist dann dein Vorkommawert!
Der Rest dieser berechnung ist dann der Nachkommawert!
Viel Erfolg

palermo
21.12.2006, 15:24
Hallo
Irgendwie finde ich im Roboternetz nichts darüber.
Ich werde jetzt mal die ganzen Links von Travolds durchgucken ob ich da etwas passendes finde. Ansonsten hatte ich noch die Idee es einfach in mm umrechnen zu lassen, dann hätte ich ja nur ganze Zahlen.
mfg palermo

zumgwadrad
22.12.2006, 10:55
Moin Palermo!
Hab mal schnell den Thread gesucht den ich gemeint hab ich wusste ja ungefähr wo ich suchen muss
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=23975&highlight=lcd
WÜnsche dir viel Erfolg und schöne Feiertage!