ich fang gleich echt zum heuln an.. ich hasse die Variablentypen in C.. wer ist auf die Idee gekommen, so einen scheiß zu machen >.<.. so.. genug geheult.
Also, wie ihr gerade schon gelesen habt, bei mir wollen die Variablen wieder mal nicht. Hat jemand nen Link zu ner guten Lektüre zur Hand? Kann ich googlen, was ich will, ich find nichts, womit ich mein Problem lösen kann.. wie dem auch sei:
Mit "+" funktioniert das nicht, sowas geht bei Pascal wenn du String Objekte hast.
Die Arduino hat auch sowas:
Sogar ich bin davon abgekommen dies zu benutzen.
Hier hast du ein Array url[] - jedes Element ist ein Char.
Dort willst du quasi ein anderes Char array "GET" an Anfang anfügen.
Man könnte jetzt überlegen wie man das zu Fuß macht.
Oder strcat benutzen.
Dass das mit "+" nicht geht hab ich auch festgestellt.. ich hats vergessen, wie raus zu löschen. Ich komm auf der "Serverecke" und in JS geht's ja z. B. so
Ja.. url ist char, strcat hatte ich auch schon gefunden, aber - deswegen hab ich "int conSerial[MAX_NUMBERS];" mit dazu kopiert - conSerial ist int, nicht char. Heißt, das geht wieder nicht.
sschultewolter:
Das hat mit Variablentypen insofern zu tun, dass ich einmal char und einmal int hab. Und die will, oder besser gesagt muss, ich in einen Sack stecken.
Sorry fipsi, hatte dein char url[] als Konstante gesehen und nicht genauer angesehen. :-[
jurs:
Wenn Du in C/C++ programmieren möchtest, lerne in C/C++ zu programmieren!
Na ja, dafür ist dieses Forum unter anderem da.
Es ist oft zu lesen das der Arduino mit keinen Vorkennissen einfach zu Programmieren ist.
fipsi kommt aus der IT Ecke und stolpert trotzdem.
Ich habe nur Hobbymässig vor 20 Jahren Pascal gelernt, und seit 2 Jahren auch auf diese Weise C/C++ angeeignet.
Ich weiß, dass ich die verschiedenen Typen nicht einfach zusammen schmeißen kann.
Schlagt mich jetzt dafür, aber ich begreifs einfach nicht, wie ich das jetzt alles in eine Variable bekomm, die ich dann einfach in "client.println();" einsetzen kann..
Hat zufällig jemand nen Vorschlaghammer der Weisheit im Keller und will mir damit so lang aufn Kopf haun, bis ich das in Schädel gekriegt hab?
Das zu char konvertrieren krieg ich ja "grad noch so" hin, aber dann ist auch schon wieder ende..
Der erste Fehler ist hier zu denken, dass das alles in einem String stehen muss. Das kann man genausogut stückeln. Macht vielleicht von der Performance her einen Unterschied, dass dass dann eventuell in mehr Pakete aufgeteilt wird, aber das sollte egal sein.
So, da mir Google bei der Frage nicht helfen kann^^: Für was steht das "F"?
Und ich versuche die lib-Sammlung so klein wie möglich zu halten, da ich eine Menge Speicherplatz brauch.. Ich bin jetzt schon bei gut 20 KB und mir fehlt noch jede Menge im Code.. ich schätz mal am Ende werd ich meinen Code eh noch irgendwie komprimieren müssen.. aber da schau ich dann, wenns so weit ist.
Und auf das print statt println hät ich auch kommen können facepalm
Oh je, oh je. Diese Library braucht Null Ressourcen. Das sind alles inline Funktionen. Da wird lediglich der << Operator überladen. Vom Code her springt genau das gleiche heraus wie man per Hand print() schreibt. Aber kann die Anweisungen schön verketten.
F() steht für "Flash" und erstellt einen String im Flash. Sonst verschwendest du da massig RAM. Funktioniert nur mit print()/println()
Okay..? Ich hab die libs bisher halt immer so verstanden:
Alle libs, bzw. in dem Fall könnte man ja eher Dateien sagen, die eingebunden werden, werden beim kompilieren an die Stelle mit in die eine Datei gezogen und dann allesamt auf den IC geschoben. Holzweg? Und die lib muss ich ja auch erst downloaden und die muss ja doch irgendwo hin? Oder schreibt der Compiler das um..? Ooooh man.
Das überlad also den << Operator und nimmt eine Referenz auf ein Objekt das von der Print Klasse abgeleitet ist (wie Serial, lcd oder client). Dann gibt es den Wert mit print() aus und gibt die Referenz auf das Print Objekt wieder zurück. Letzteres ist der Grund weshalb man die Anweisungen verketten kann und der ganze Sinn der Sache.
Das ist eine inline Funktion. Die Funktion wird also nicht aufgerufen, sondern deren Inhalt wird an der Stelle direkt in den Code geschrieben:
Dann ist noch etwas Code drin, damit die Formatierung von Binär oder Hex funktioniert, aber das sind Makros die ebenfalls keinen Speicher brauchen.
Du musst das nicht verwenden, aber diese Stream Syntax ist hier einfach angenehmer zu lesen und zu schreiben als jedesmal Client.print() zu schreiben und das über zig Zeilen aufzuteilen.
Na dann werd ich mir die mal runter laden und einbinden.
Ich schätz mal, wenns so viele print-Befehle wie bei mir sind, dann könnte das auch positiv aufn Speicher gehen? Mach gleich mal den vergleich..
Nichts kleiner.. hab grad nen bissl längeren Ethernet-Befehl umgeschrieben, jetzt hab ich 8 Byte mehr. Ich glaub jetzt aber mal, dass die's nicht groß raus reißen.
Okay.. doch kleiner.. gerade ne Serial-Befehlskette umgeschrieben:
Am Anfang: 20.516 Byte
Nach der Client-Kette umgeschrieben: 20.524 Byte
Nach der Serial-Kette umgeschrieben: 20.238 Byte
Ist zwar jetzt keine Welt, aber Kleinvieh macht ja auch Mist und das kann was bei mir ausmachen^^.