Show Posts
Pages: 1 2 3 [4] 5 6 ... 28
46  International / Deutsch / Re: Charr-array aus Variablen zusammenbauen on: August 10, 2014, 10:12:34 am
Mann oh mann,
von dir kann man viel lernen :-)

Das readFlashString hab ich mir gleich eingebaut. Funzt super.

Allerdings hab ich jetzt noch ein Problem mit der dtostrf-Funktion.

Code:
dtostrf (DHTTemp_1,5,2,DHTTemp_1_str);

Bei 27,00 Grad bekomme ich "27.00" Gut so
Bei 5,00 Grad bekomme ich " 5.00" Also noch ein Leerzeichen davor. Und das nimmt mir der Empfänger übel.
Ist ja auch klar. Ich hab als Parameter auch die 5 vorgegeben.
Kann man den Parameter irgendwie dynamisch vorgeben?
47  International / Deutsch / Re: Charr-array aus Variablen zusammenbauen on: August 10, 2014, 08:02:35 am
HI, sehr gut erklärt. Das hab sogar ich verstanden (Hoff ich)

Das geht nicht, da println() einen Zeiger ins RAM will:
Code:
Serial.println(startphp);
m geht das anscheinend nur in C und nicht in C++. Da bleibe ich lieber bei PROGMEM und aktiviere statt dessen C++11 smiley

Das heisst ich muss den String erst ins RAM bringen:
Code:
  char chartemp[100];
    snprintf (chartemp, sizeof(chartemp),"%S", startphp);
    Serial.print (chartemp);
--> Damit bekomme ich den String auf die Console.
Allerdings hab ich dann nichts gewonnen, da ich wieder RAM verschwendet habe.
Man müsste vllt. nur einen Puffer für ein Byte nehmen, und den dann in einer Schleife, x von 0-sizeof(), Byte für Byte ausgeben.
Ich hätte es mal naiv so versucht:
Code:
    chartemp[x] = startphp[x];

Aber das geht nicht.
48  International / Deutsch / Re: Charr-array aus Variablen zusammenbauen on: August 09, 2014, 06:29:29 pm
Jo, 255 sind zu viel :-)

Jetzt beutelts mich aber noch wo anders:

Code:
  char startphp[] PROGMEM = "http://192.168.1.80/emoncms/input/bulk.json?data=";
  char apikey[] PROGMEM = "&apikey=5a0b7a9339e4e75895634654362";
  char phpstring[200];

    cx = snprintf_P (phpstring, sizeof(phpstring), PSTR("[[%d,%d,11.10,22.20,33.30,44.40,1234]]"), timeoffset1, node1);
    snprintf_P (phpstring+cx, sizeof(phpstring)-cx, apikey);

    Serial.println (startphp);
    Serial.println (phpstring);

    ether.browseUrl(startphp, phpstring, website, my_callback);

Auf der seriellen Console bekomme ich nur den "phpstring" angezeigt. "startphp" ist nur ne leere Zeile :-(
Why?? Ist doch dasselbe. Beides sind char-arrays

49  International / Deutsch / Re: Charr-array aus Variablen zusammenbauen on: August 09, 2014, 05:23:07 pm
Ich glaub jetzt bin ich auf dem richtigen Weg.

Mein String soll am Ende in etwa so aussehen:
http://192.168.1.80/emoncms/input/bulk.json?data=[[0,16.22,1137],[2,17.34,1437,3164],[4,19.56,1412,3077]]&apikey=5a0b7a9339e4ed53543545754754

Ich werde mir 3 Teilstrings anlegen. Die beiden blauen Elemente sind immer gleich. Nur der schwarze Teil sind sich ändernde Messwerte.
Den Messwert-String werde ich mit snprint aufbauen.
Am Schluss dann alles mit strcat zusammenkleben.
Wobei ich bei "nur" 3 Teilen wohl besser auf die zusätzliche string.h verzichte und das evtl. besser mit snprint und dem Berechnen der Zielposition mache. (Wie oben diskutiert)

@Serenifly
THX für deine geduldige Hilfe.

Edit: Wieso der eine Teil da oben rot ist, obwohl ich ihn mit (color=blue) formatiert habe, wird wohl auch immer ein Geheimnis bleiben.
50  International / Deutsch / Re: Charr-array aus Variablen zusammenbauen on: August 09, 2014, 05:06:06 pm
Quote
Hmmmm... ich sollte mir wohl auch mal strcat ansehen????
Das ist eine andere Möglichkeit. Du braucht aber dann ein zweites Puffer Array. Das sollte man dann lokal in der Funktion anlegen, damit der Speicher danach wieder freigegeben wird.

Wieso ein zweites Char-Array?

Geht das nicht?
Code:
snprintf_P(buffer, sizeof(buffer), PSTR("%s,%d,%.2f"), str, var1, var2);
strcat (buffer, "Ende Gelände");
oder halt dann strcat_P (wenns das gibt)
51  International / Deutsch / Re: Charr-array aus Variablen zusammenbauen on: August 09, 2014, 04:38:10 pm
OK,
das hab ich einigermassen verstanden. (Patchen werd ich meine IDE für das kleine Projekt nicht.)

Hab allerdings zum Verständnis noch Fragen.
1.)
Muss ich den Text über ein char-array einbauen?  
In der C++-Reference wird es so gemacht:
Code:
snprintf ( buffer, 100, "The half of %d is %d", 60, 60/2 );

2.)
Das PSTR dazwischen: Reicht es nicht, wenn ich vorne schon snprintf_P schreibe, damit ich RAM spare?

3.)
Wenn ich den Stringaufbau etwas strukturieren will?  10 Variablen in einem sprintf zusammenbasteln, wird m.E etwas unübersichtlich.
Geht dann wohl nur so wie in der Reference?
Code:
 cx = snprintf ( buffer, 100, "The half of %d is %d", 60, 60/2 );
  snprintf ( buffer+cx, 100-cx, ", and the half of that is %d.", 60/2/2 );

Oder gibts ne Möglichkeit das einfach hinten dran zu hängen, ohne dass man diesen cx-pointer mitschleppt

Hmmmm... ich sollte mir wohl auch mal strcat ansehen????

gruß/hk007
52  International / Deutsch / Re: Charr-array aus Variablen zusammenbauen on: August 09, 2014, 04:05:42 pm
Hi Serenifly,

danke für deine Antwort.
uihhh jetzt hast du mich schön zerlegt  smiley-cry  (Bin dir aber nicht bös)

Du hast allerdings printf() überhaupt nicht verstanden.

Stimmt, aber es kam das richtige raus  smiley-kiss. Ich hab halt C nie richtig gelernt. Wenn ich etwas programmieren will, dann such ich mir immer Codeschnipsel aus dem Internet und passe die dann so lange an, bis das gewünschte Ergebnis rauskommt. Vllt. in manchen Augen nicht die "richtige" Art und Weise, aber ich programmier halt sehr selten. Immer dann, wenn ich in meiner Hütte etwas durch einen Arduino automatisieren oder messen will. Und dann wird es meistens quickanddirty.

Wie würde es denn bei dir aussehen, wenn du z.B.
- "Text1"
- intvar = 12
- floatvar = 11.12
zusammenfügen willst, damit es so aussieht.:
--> "Text1,12,11.12"

53  International / Deutsch / Charr-array aus Variablen zusammenbauen on: August 09, 2014, 03:29:30 pm
Hi,

die C-strings bringen mich noch um den Verstand.

Meine aktuelle Aufgabestellung ist, einen C-String mit ether.browseUrl (EtherCard-lib) zu übergeben.
Der C-String soll aus Text und Variablen-werten zusammengebaut werden.

Grundlegend hab ich es mal so aufgebaut:
Code:
  char phpstring[255];
 char chartemp[8];

void makestring() {
    sprintf(phpstring, "%d", timeoffset1);
    sprintf(&phpstring[strlen(phpstring)], ",%d", node1);
    sprintf(&phpstring[strlen(phpstring)], ",");
    dtostrf(DHTTemperature,5,2,chartemp);
    sprintf(&phpstring[strlen(phpstring)], chartemp);
.
.
.
   sprintf(&phpstring[strlen(phpstring)], "&apikey=xyz);
}

    ether.browseUrl(PSTR("http://192.168.1.80/emoncms/input/bulk.json?data=[["), phpstring, website, my_callback);

Mit Integerwerten geht es ja ganz gut. Allerdings hakt es ja mit sprintf und float-variablen. Daher der Umweg über dtostrf.
Aber irgendwie ist das doch etwas hölzern. Oder wie seht ihr das? Da ich einen ganzen Sack von float-Werten übergeben will, wäre ich um eine "einfachere" Programmierung schon sehr froh.
Hat da einer von euch C-Gurus eine Idee?

Gruß/hk007
54  International / Deutsch / Re: Grafische Projektier-Oberfläche für GLCDs on: February 22, 2014, 01:11:19 pm
Bezüglich des "Verschmelzens" mit dem Hintergrund, da hilft dir ein geeignetes Grafikprogramm. zB GIMP. Dort kannst du mit Layern arbeiten.

Hab mir mal Gimp Portable gezogen. Das mit den verschiedenen Layern ist richtig. Allerdings auch nicht so zielführend, da das gezeichnete Objekt dann mit dem Layer verschmilzt.
Es geht wohl wirklich in Richtung 2D-CAD....
55  International / Deutsch / Re: Grafische Projektier-Oberfläche für GLCDs on: February 22, 2014, 11:29:53 am
Ja stimmt.
An ein Grafikprogramm hab ich auch schon gedacht. Aber da ist es schwierig bis unmöglich einmal gezeichnete Objekte wieder zu verschieben, da diese mit dem Hintergrund verschmelzen.

Vllt. irgendein 2D-CAD-Programm..... Mal suchen
56  International / Deutsch / Grafische Projektier-Oberfläche für GLCDs on: February 22, 2014, 11:21:13 am
Hi,

ich bin gerade am Überlegen, ob es so was wie eine Projektier-Oberfläche für GLCDs gibt.
Also wo ich meine GLCD-Größe (z.B. 800x480 pixel) als Arbeitsbereich definieren kann. Dann in der Arbeitsfläche meine Objekte zeichne und die dann platziere.
Es würde dann ja schon reichen, wenn ich die zu definierenden Eckpunkte mit den Koordinaten ablesen kann. Eine automatische Codegenerierung ist absolut nicht notwendig.
Ich hab schon an Excel gedacht. Die Zeilen und Spalten entsprechend klein gewählt, damit alles auf den Monitor passt. Bei den Zeilen wäre ja schon eine Nummerierung von oben nach unten vorhanden (Wenn auch von 1 beginnend). Aber die Spalten sind mit A,B,C bezeichnet. Da ist das Umsetzen auf Koordinaten doof.

Hat da von euch schon mal jemand ähnliches versucht?

Gruß/hk007
57  International / Deutsch / Re: GLCD: Zyklusbelastung für Arduino on: February 22, 2014, 07:33:51 am
Guck dir mal die Nucleo Boards von ST an. Die Dinger kosten so wenig, wie ein China-Arduinoclone, hat aber genügend Bums unter der Haube  smiley
Und hab ne komplett andere Entwicklungsebene :-(
Dann nehm ich lieder eine DUE. Da brauch ich nix an der Software ändern, sondern nur ein paar Level-Shifter für meine Peripherie einbauen.
58  International / Deutsch / Re: GLCD: Zyklusbelastung für Arduino on: February 22, 2014, 06:11:33 am
Quote
Wenn wir also von Typ B) Displays reden, dann steigt der Zeitaufwand für das Linien-Zeichnen linear mit der Länge der Linie.
Ich denke wir reden von dem Typ.  smiley-cool
--> Das Zeichnen einer Liniengrafik auf einem 3,2" Display dauert genauso lange wie auf einem 7" Display, wenn man die Größe der Grafik nicht verändert!

Entscheident ist natürlich die Dimension des Displays in Pixel. Wenn dein 4.3" Display 320x240 groß ist, aber das 7" Display 800x600 hat, dann könnte es schon passieren, dass Du mehr zeichnen musst. Da dann vielleicht auch das DPI (Verhältnis Pixel zur Display-Diagonalen) größer wird, möchtest Du vielleicht größere Fonts verwenden, die dann ebenfalls mehr Zeit zum Zeichnen brauchen.
Genau darauf wollte ich mit meiner "Idee" der Teilbildschirme aus dem ersten Post raus.
Wenn man es geschickt anstellt, dann kann man so die Information von 2 oder mehr Seiten eines kleineren Displays auf einem großen darstellen, ohne dass man mehr Ressourcen beim Arduino verschwendet, aber doch alles auf einmal sieht, und nicht immer lästig zwischen den Bildern umschalten muss.
Alles unter der der Regel: Nicht größer zeichen, sondern mehr darstellen.

Quote
Aber Achtung: Displays zwischen 128x128 bis 240x320 werden oft verkauft und werden prima unterstützt. Wenn es größenmäßig  darüberhinaus geht, sollte man vor dem Kauf nach einer geeigneten Library suchen.
Ich hab gerade nachgeschaut.
Die UTFT von Henning Karlsen unterstützt auf alle Fälle 5,0" mit 800x480 pixel. (SSD1963-Controller) Das 7.0 Zoll hat die gleiche Auflösung/Controller. Sollte also kein Problem sein, sogar ein 7 Zoll zu nehmen. DIe Augen werden ja auch nicht besser  smiley-eek-blue
59  International / Deutsch / Re: GLCD: Zyklusbelastung für Arduino on: February 22, 2014, 06:04:07 am
Quote
Nicht die Größe sondern die Auflösung ( pixel) ist ausschlaggebend.
Ist mir klar, kam wohl nicht so rüber  smiley-wink

Quote
Kauf auf alle Fälle ein Display das explizit für Arduino geeignet beschrieben wird und wo der Verkäufer eine Bibliothek und Beispiele zur Ansteuerung mit Arduino bereitstellt.
Ich verwende Displays mit SSD1289 und SSD1963 Controller. Dazu die UTFT...LIB von Henning Karlsen.

Ich geh davon aus, dass es so abläuft:
- Der Arduino hat einen Befehl: Zeichne Linie von P1[X=0;Y=0] nach P2[X=0;Y=19] in Weiss. Linienstärke 1 Pixel.
- Die LIB wandelt das so um, dass folgendes herauskommt: Es sind 20 Pixel in Weiss zu zeichnen. Diese Information wird dann über den Datenbus an den Displaycontroller übergeben.
- Der Displaycontroller schreibt dann die 20 neuen Pixel in seine Bildschirmspeicher und refresht den Bildschirm.

So ähnlich sehe ich es auch in meiner aktuellen Software. Ich stelle so ca. 30-40 Linien/Rechtecke sowie Texte dar.
Sonst läuft auf dem MEGA noch ein kleiner Webserver, und etwas Steuerungssoftware. Freier RAM sind noch ~5k.
Allerdings dauert ein Zyklus ca 1 sec. Davon braucht die Grafikausgabe  ~0,4 sec.

Anders wäre es ja nicht machbar.
Bei einem 5" Display mit 800x480 Pixel bräuchte man dann 384.000 Byte Speicher. Dann könnte man alle Pixel mit 256 verschiedenen Farben im Arduino halten.
Etwas viel für den MEGA. Selbst für den DUE  smiley-razz smiley-razz

60  International / Deutsch / GLCD: Zyklusbelastung für Arduino on: February 22, 2014, 02:58:06 am
Hi,

da die GLCDs immer billiger werden, schiele ich immer mehr nach einem größerem Display.
Aktuell hab ich ein 4,3" in meiner Steuerung. Ist ja schon nicht schlecht, aber 7" wär natürlich was anderes :-)
Allerdings denk ich auch etwas an die "Arbeit" für meinen Arduino.
Da würd ich gern etwas Basics mit euch diskutieren,
Ich stell jetzt mal ein paar Thesen auf.
1.) Für den Arduino ist es ein Befehl eine Linie zu zeichnen. Die "zeitliche Belastung" dafür ist unabhängig von der Größe des Displays und unabhängig von der Länge der Linie. Beim zweiten Teil bin ich mir nicht sicher. Da wäre es interessant zu wissen, ob die Umsetzung von Start-und Endpunkt in Pixel am Arduino, oder im Chip des Displays passiert.
2.) Wenn ich den Bildschirm gedanklich in zwei Hälften teile, und diese geschickt mit Informationen bespiele, dann ist es für den Arduino auch nicht mehr "Arbeit", als wenn ich auf einem kleineren Display zwei Seiten projektiere und die immer umschalte.  Ich seh halt bei einem größeren GLCD mehr Informationen auf einmal.
Pages: 1 2 3 [4] 5 6 ... 28