Show Posts
Pages: 1 ... 3 4 [5] 6 7 ... 28
61  International / Deutsch / Re: Ethernet Shield - Datei von SD über Ethernet holen on: February 19, 2014, 01:15:56 pm
Schau mal hier:

http://www.ladyada.net/learn/arduino/ethfiles.html
oder hier
https://github.com/adafruit/SDWebBrowse

Hab das mal vor einiger Zeit gemacht. Glaube, das waren die Quellen dafür.
62  International / Deutsch / Re: GLCD: Flackern, bei übereinanderliegenden Objekten. on: February 09, 2014, 08:32:57 am
Hi Serenifly,

Du bist wie es aussieht, momentan mein persönlicher Telefon-Joker    smiley
Ja, wenn man genauer beobachtet, sieht es aus wie ein Geschwindigkeitsproblem.
Auch wenn die beiden Schreibbefehle direkt hintereinander rausgehen, sieht man, dass erst die Flache komplett gezeichnet wird, und dann noch einmal der Text drüber gelegt wird. Und das ist dann das Flackern.

Hab jetzt noch einige Zeitmessungen durchgeführt:
Aktuell braucht mein GLCD-Programmteil ca. 130ms. Male so 10 Rechtecke und gebe ~20 Werte/Texte aus. Schätze, dass ich so 20-25% der Flache (320x240) beschreibe. Wird aber wohl doppelt so viel werden.
Und der ganze andere Code braucht auch noch mal 700ms :-(
Muss ich mal etwas entzerren. Manche Sachen müssen nicht alle Sekunden aufgerufen werden.

Will das ganze später auf einem 4,3" mit 420x272 laufen lassen.  Mal schauen, wie es dann aussieht.
TFT ist noch auf dem Weg von Hongkong. Dazu hab ich mir jetzt noch das Screw-TFT-Shield von Aqualedsource aus Portugal bestellt. Das mit den fehlenden Anschlussklemmen hat mich eh immer genervt. Und so schlag ich zwei Fliegen mit einer Klappe.
Ach ja: DS1307 ist auch noch drauf. Kann man für eine Heizungssteuerung immer brauchen
Auf einen DUE kann ich immer noch umsteigen. Brauch dann nur einige Levelshifter für die Peripherie.

Gruß/hk007
63  International / Deutsch / GLCD: Flackern, bei übereinanderliegenden Objekten. on: February 09, 2014, 06:50:43 am
Hi,
ich programmiere gerade ein 3,2" Touch LCD mit der UTFT Bibliothek von Henning Karlsen.
Dazu noch einmal eine Frage:

Aktuell habe ich zwei Elemente übereinander platziert. Jetzt flackert das zweite.
Ich habe zum Beispiel ein gefülltes Rechteck. darin schreibe ich dann noch einen Zahlenwert drüber. Das GLCD wird momentan alle 1 Sekunde geschrieben. Man sieht dann ganz deutlich, wie der Bereich an dem die Zahl angezeigt wird, im Sekundentakt flackert.
Schreibe ich die Zahl neben das Rechteck in einen unbenutzen Bereich, dann ist die Ausgabe flackerfrei.

Ist das normal, oder mache ich einen Fehler?

64  International / Deutsch / GLCD: Nullpunkt ändern. on: February 08, 2014, 01:12:09 pm
Hi,
ich programmiere gerade ein 3,2" Touch LCD mit der UTFT Bibliothek von Henning Karlsen.
Dazu mal eine Frage:

Der Nullpunkt ist beim LCD links oben. Gibts da eine Möglichkeit den Nullpunkt nach links unten zu verschieben. Also so, dass man das LCD wie im positiven Quadranten eines Koordinatensystems ansprechen kann? "X+" nach rechts und "Y+" nach oben
Bei der X-Koordinate ist es eh "richtig".
Aber bei der Y-Koordinate verbiegts mir jedesmal das Hirn, wenn ich rückwärts rechnen muss.
65  International / Deutsch / Re: F() -Funktion für Ausgabe über Ethernet on: February 05, 2014, 05:10:58 pm
OK, danke für die Info.
Muss schon sagen, dass du ein fundiertes Hintergrundwissen hast.

Danke nochmal.
Bis zum nächsten Problem  smiley-razz
66  International / Deutsch / Re: F() -Funktion für Ausgabe über Ethernet on: February 05, 2014, 04:00:24 pm
Ja, client.print() verwende ich auch bei der Ethernet-Ausgabe.

Und du hast recht, man könnte die Zeilen auch trennen:
Code:
//client.println("objGradient.addColorStop(0,   'rgb" + temp1 + "'); ");                        
-->
client.print("objGradient.addColorStop(0,   'rgb");
client.print(temp1);
client.println("'); ");
Ist das selbe Ergebnis:
Und dann die erste und die letzte mit dem F() versehen.
Aber da geht mir etwas an Lesbarkeit des HTML-Textes verloren.

Ich hab jetzt alle "normalen" Zeilen der Webseite ins Flash verbannt, und bin dadurch von 1288 auf 4678 Byte freies RAM gekommen.  smiley smiley smiley
Das ist m.E. mit wenig Aufwand ein super Ergebnis.

Noch eine Frage:
Bei der detaillierten Ausgabe des Compilers bekomme ich für jede Zeile mit dem F() Makro eine Warnung:
Code:
warning: only initialized variables can be placed into program memory area

Muss ich mir da Gedanken machen? Ich hab ja keine Variablen, sondern nur Text.
67  International / Deutsch / F() -Funktion für Ausgabe über Ethernet on: February 05, 2014, 02:39:06 pm
Hi,
arbeite zwar momentan mit einem Mega als Webserver, aber da ist der Speicher auch nicht unbegrenzt.
Da ich eine HTML-Seite über Ethernet sende, und nur noch ca. 1000Byte RAM übrig sind,  hab ich angeregt von Serenifly über Auslagerung ins Flash nachgedacht.
Für die F()-Funktion hab ich zwar nur Beispiele für Serial.println gefunden, aber ich dachte mir ich probiers auch mal mit client.println.
Allein der Header der HTML-Seite hat mir schon 60Byte an SRAM gebracht. smiley Aber 106 Byte an Flash gekostet?? Na ja, davon hab ich noch genug.
Code:
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println(F("Connnection: close"));
client.println();
Würdet ihr das auch so machen, oder gibts noch bessere Ideen?

Allerdings klappt es nicht immer. Ich hab auch dynamische Zeilen, bei denen ich Werte in den HTML-Code integriere.
Code:
client.println(F("objGradient.addColorStop(1,   'rgb" + temp6 + "');"));
Hier ist temp6 ein C-String. Da klappt es leider nicht. Fehlermeldung:
initializer fails to determine size of '__c'
Oder auch hier, selbe Fehlermeldung:
Code:
sprintf (timestring, "%02d:%02d:%02d", hour, minute, second) ;
client.println(F("<tr><td colspan='3'>Aktuelle Uhrzeit: " + String(timestring) + " Uhr</td></tr>"));

Gibts da auch eine Lösung?

Gruß/hk007
68  International / Deutsch / Re: UTFT: String als Farbe vorgeben on: February 04, 2014, 06:10:50 pm
P.S. deine Funktion gibt den RGB Wert nicht zurück! Du musst die Parameter schon als Referenzen deklarieren. Sonst arbeitest du lediglich mit lokalen Kopien:
Hehe, du bist echt gut. Und ich ne richtige C-Pfeife smiley-cry

Hab mir gerade den Arsch abgesucht, wieso ich immer "0" zurückbekomme.
Ich mach einfach zu wenig mit C. Und wenn ich wieder mal rumprogrammiere, dann fall ich über die einfachsten Sachen.

Danke dir für deine Hilfe!
69  International / Deutsch / Re: UTFT: String als Farbe vorgeben on: February 04, 2014, 05:39:25 pm
Ja mit den Strings steh ich voll auf Kriegsfuss.  smiley-cry
Ich könnte die Funktion ja für beide Ausgabearten schreiben: Dann brauch ich nichts im HTML-Code ändern.
Code:
  void color (float tempin, String &stringout, byte red, byte green, byte blue) {
      if  (tempin >= 90.0 && tempin < 100.0) {
//        stringout = "(175,0,0)";
        red = 175; green = 0; blue = 0;
      }
      else if  ((tempin >= 75.0) && (tempin < 90.0)) {
.....
 stringout = "(" + red + "," + green + "," + blue +")";  
  }

Allerdings ärgert mich da wieder die letzte Zeile. Anscheinend kann ich nur immer 2 Teilstrings zusammenführen.
Ich wollte mir halt sparen die Zuweisung für stringout in jeder if-Anweisung zu schreiben, sondern die nur einmal am Ende der Funtion "berechnen"
Der Befehl sprintf() ist ja nur für die Ausgabe gedacht. Oder kann ich den hier auch verwenden?
70  International / Deutsch / Re: UTFT: String als Farbe vorgeben on: February 04, 2014, 05:12:52 pm
Ok,
Ich hatte die Hoffnung, dass man es irgendwie so hinbekommt:
Code:
String temp1 = "128,0,128";
[color=red]myGLCD.setColor(temp1);[/color] // irgendwie geht die Farbfunktion nicht im code-tag :-(

aber auch mit nem C-String muss ich zerlegen und wandeln. Oder?

Dann schreib ich mir liebe ne neue Funktion, bei der ich gleich drei Byte mit den Farbwerten rausbekomme.
71  International / Deutsch / Re: UTFT: String als Farbe vorgeben on: February 04, 2014, 04:57:51 pm
Hi Serenifly,
leider großes "S".
Also ein String object.

Hintergrund: Ich habe eine Funktion, die mir für die grafische Ausgabe des Temperaturgefälles meines Warmwasserspeichers abhängig von der Temperatur bestimmte Farben ausgibt.
Die sende ich dann innerhalb einer HTML-Seite.
Code:
  void color (float tempin, String &stringout) {
      if  (tempin >= 90.0 && tempin < 100.0) {
        stringout = "(175,0,0)";  
      }
      else if  ((tempin >= 75.0) && (tempin < 90.0)) {
        stringout = "(255,0,0)";
...........


Jetzt bau ich noch ein Touchdisplay an den Arduino für die Vorort anzeige. Da will ich die Funktion gleich mitbenutzen, um auch hier die entsprechenden Farben anzuzeigen.
72  International / Deutsch / UTFT: String als Farbe vorgeben on: February 04, 2014, 04:44:56 pm
Hi,
ich bräuchte mal wieder die Hilfe von den C-Experten.

Ich verwende die UTFT-Bibliothek von Henning Karlsen.
Da gibt es den Befehl myGLCD.setColor(r,b,g)
Für r b g kann man entweder feste Werte, oder auch 3 Byte-Variablen vorgeben.
Das sagt der Compiler:
Code:
candidates are: void UTFT::setColor(byte, byte, byte)

Jetzt bekomme ich aus einer anderen Funktion die Farbe als String; z.B.: "128,0,128"
Habt ihr eine Idee, wie man den String als Vorgabe für die Farbdefinition verwenden kann?
Ich probier jetzt schon zwei Stunden rum, aber meine C-Kenntnisse sind dazu etwas zu mangelhaft.

Danke vorab/hk007
73  International / Deutsch / Re: Mega + Ethernet-Shield (W5100): Probleme als WebServer on: February 04, 2014, 11:58:50 am
Hi,

ich glaub ich habs gefunden. smiley smiley smiley
Zumindest hab ich jetzt so 30 mal aus dem Browser angesteuert, und es war immer OK.

Das Problem war eine doppelte MAC-Adresse. Ich hab schon einen Arduino mit Ethernet-Shield im Hausnetz. Zum Auslesen des Stromzählers. Da ich diese Software auch auf ein Beispiel aus der Arduino Bibliothek aufgebaut habe, hatte der natürlich die selbe MAC-Adresse. Daran hab ich Esel nicht gedacht.
Man oh man: 281.474.976.710.656 verschiedene MAC-Adressen kann man einstellen. Und ich schaffs doch wirklich zwei mal dieselbe zu nehmen. smiley-cry

Muss man erst mal drauf kommen. Bei der IP, da führ ich über alle Geräte bei mir im Hausnetzwerk peinlichst Buch, damit ich da keine Überschneidungen habe, aber die MAC-Adresse hab ich nie beachtet, da ja jedes Gerät eine einzigartige hat, oder zumindest haben sollte. Der Arduino ist halt das einzige Gerät, bei dem man sie manuell vergibt.

Ich hoffe das war auch wirklich das Problem. Deutet aber alles drauf hin.
74  International / Deutsch / Re: Mega + Ethernet-Shield (W5100): Probleme als WebServer on: February 04, 2014, 03:18:09 am
Hi,
sorry, hast natürlich recht. Dachte nur, weil es das "offiziele" Beispiel aus der Arduino IDE ist.
Code:
/*
  Web Server
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield.
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 */

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,91);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
   if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
//   client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            server.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");       
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(100);
    Serial.println("now 100ms delay");   
    // close the connection:
     client.stop();
     Serial.println("client disconnected");
  }
}
75  International / Deutsch / Mega + Ethernet-Shield (W5100): Probleme als WebServer on: February 03, 2014, 03:58:44 pm
Hi,
da mein aktuell programmierter Webserver nur "leidlich" läuft, habe ich einmal das WebServer Programm aus den Beispielen verwendet. Ich habe nur die Zeile mit dem Refresh entfernt, da ich die Seite nur einmal anfragen und empfangen will, um die Probleme besser eingrenzen zu können.

Hier sieht es allerdings auch nicht wirklich besser aus.  Nach dem Neustart des Aruino zeigt er mir, dass der Webserver unter der programmierten IP gestartet wird.
Wenn ich anschliessend aus dem Browser meines PCs die Seite aufrufe, dann klappt das beim ersten Mal. Die 6 Zeilen mit den Werten der Analogeingängen werden im Browser dargestellt, und in der seriellen Konsole des Arduinos kommt auch das erwartete:
Code:
new client
GET / HTTP/1.1
Host: 192.168.1.91
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cache-Control: max-age=0

client disonnected

Wenn ich dann anschliessend die Seite einige Male neu lade (so im 3 Sekunden Rhythmus), dann kommt es ziemlich bald zu den Problemen. Die Seite wird nicht wieder aufgebaut, im Browser dreht die Sanduhr und der Arduino bringt auch nichts in der seriellen Konsole
Nach einiger Zeit  (20-30 sek) wird die Seite dann doch aufgebaut und in der seriellen Konsole kommen auch die o.g. Zeilen.
In dieser "Wartezeit" sendet der PC immer wieder TCP-Retransmission Telegramme (lt. Wireshark)

Sieht so aus, als ob sich der Arduino oder das WIZnet-Shield irgendwie aufhängen.
- Um einen Hardwaredefekt auszuschliessen hab ich den Mega gegen einen UNO getauscht. Selbes Problem.
- Ethernet-Shield hab ich leider kein Zweites zum Testen hier :-(
- Und ich hab auch schon 3 verschiedene PCs probiert, um hier was auszuschliessen.

Ist das ein generelles Problem, das ich hier habe? Läuft bei euch ein ähnlicher Webserver stabil?

Edit:
Das Problem liegt eigentlich schon bei der server.available Abfrage:
Code:
 // listen for incoming clients
  EthernetClient client = server.available();
   if (client) {
    Serial.println("new client");
In der "Wartezeit" kommt von server.available() eine NULL zurück.
Sieht doch dann so aus, als ob vom Ethernet-Shield keine eingehenden Daten erkannt werden??? Aber lt. Wireshark werden laufend Telegramme an das Ethernet-Shield gesendet.

Pages: 1 ... 3 4 [5] 6 7 ... 28