Ethernet: Bild als Button

Hallo,

ich hab mal wieder ein neues Projekt und dazu muss ich ein Bild als Button auf dem Arduino-Server verwenden. Ich habe ein Mega 2560 und das passende Ethernetshield mit einem Micro-SD-Slot. Wie kann ich nun ein Bild von der SD-Karte in meinem Arduino-Server als “Bild-Button” auftauchen lassen? Hat jemand eine Idee? Heißt es wie bei der normalen Html-Programmierung :

Danke

http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-web-server-image/

Macht sich aber keinesfalls gut von der Performance!

sschultewolter: http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-web-server-image/

Macht sich aber keinesfalls gut von der Performance!

Man muss ja die Bytes aus einer Datei nicht einzeln einlesen und einzeln senden, wie es in dem Tutorial gemacht wird:

while(webFile.available()) 
{
  client.write(webFile.read()); // send web page to client
}

Noch langsamer geht es wohl nur noch zu programmieren, wenn er nach jedem gesendeten Zeichen noch ein extra "delay()" einbaut.

Eine völlig lahme Schrott-Programmierung, die weit unter den möglichen Durchsatzraten zurückbleibt, die beim Senden einer Datei von SD-Karte möglich sind.

Ruf das Bild von einer anderen URL auf.

Grüße Uwe

Hallo,

schon mal danke.

Aber ich habe noch eine Frage: Es müssen mehrere Bilder sein. Kann ich sie also src1, src2, src3,... bennenen ?

Danke

julivehs: Aber ich habe noch eine Frage: Es müssen mehrere Bilder sein. Kann ich sie also src1, src2, src3,... bennenen ?

Im Normalfall bezeichnet man Grafikdateien mit einer Dateiendung, die das Bildformat kennzeichnet, also beispielsweise src1.gif, src2.jpg, src3.png, src4.bmp oder ähnlich, so dass Du dann auch eine HTTP-Handlerfunktion schreiben kannst, die passend zum Bildformat den richtigen HTTP-Dateiheader zum entsprechenden Bildformat senden kann.

Ok.

Hab ich so gemacht.

Nur habe ich die Bilder in einer For-Schleife mit einer eigenen Funktion von der Sd Karte laden lassen.Der Arduino soll dann immer so im Programm aussehen und, je nachdem vieviele Bilder auf der Karte sind, die Webseite anpassen. Nur kommt dort ein Fehler den ich nicht verstehe. Kann mir jemand helfen ? Kann ich die case-Funktion irgendwie vereinfachen ? Oder hat jemand eine Idee um alles zu vereinfachen ?

Hier ist die eigene Funktion um die Bilder zu laden:

void datLoad(){
  String u = String(i);                         // aus int i(von der For-Schleife) wird String u
  String datei = "d" + u + ".jpg";              //macht aus variablen Dateiname
  String bild = "b" + u;                        //macht bildname
      if (SD.exists(datei)) {                   //existiert die Datei
      bild = SD.open(datei, FILE_READ);         //Wenn ja öffnen  unter bildname
  
         switch (u) {                           //Setze auf ja wenn die datei geladen/existiert

          case 1:    
            d1 = true;
           break;

         case 2:     
          d2 = true;
          break;

         case 3:  
          d3 = true;
            break;

          case 4:   
            d4 = true;
            break;

           case 5:   
            d5 = true;
           break;

           case 6:   
            d6 = true;
            break;

           case 7:   
           d7 = true;
            break;

           case 8:   
            d8 = true;
            break;

           case 9:   
            d9 = true;
            break;

           case 10:   
            d10 = true;
            break;

           case 11:   
            d11 = true;
            break;

           case 12:   
            d12 = true;
            break;
    
    
    
          } 
      }
}

Und das ist der Fehler :
(Info: das Programm heißt “bar”)

bar.ino: In function 'void setup()':
bar.ino:65: warning: suggest parentheses around assignment used as truth value
bar.ino: In function 'void datLoad()':
bar:171: error: no matching function for call to 'SDClass::exists(String&)'
C:\Program Files (x86)\Arduino\libraries\SD/SD.h:77: note: candidates are: boolean SDClass::exists(char*)
bar:172: error: no matching function for call to 'SDClass::open(String&, const uint8_t&)'
C:\Program Files (x86)\Arduino\libraries\SD/SD.h:74: note: candidates are: File SDClass::open(const char*, uint8_t)
bar:174: error: switch quantity not an integer

Danke

SD.exists(datei) und .open(datei) können natürlich mit String Objekten nichts anfangen

julivehs: Oder hat jemand eine Idee um alles zu vereinfachen ?

Es wäre am einfachsten, wenn Du zuerst programmieren lernst.

Und erst, wenn Du die grundsätzlichen Datentypen kennst und in kleinen Übungen gelernt hast, wie man damit umgeht, versuchst nach und nach komplexere und kompliziertere Programme zu machen.

Danke ,

aber ich hab den Fehler dann auch erkant

Die String Klasse ist Müll. Am besten gleich darauf verzichten. Wenn es unbedingt nötig ist, und du dann einen C String brauchst, geht das mit der in der Arduino Doku nicht erwähnten Funktionen c_str():
http://www.cplusplus.com/reference/string/string/c_str/