Pages: [1] 2 3   Go Down
Author Topic: Homecontol mit Arduino RF 433 MHz und Infrarotsender  (Read 3292 times)
0 Members and 1 Guest are viewing this topic.
Berlin
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Ich bin ja bereit alles zu lernen, bin leider auch nur ein Mensch!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo liebe Community,

möchte hier mal mein momentanes Langzeitprojekt vorstellen und vieleicht einige Sachen mit eurer Hilfe verbessern.
Nach vielem Suchen, Lesen und Schnipsel testen hab ich nun endlich einen für mich relatic gut verständlichen und meinen mometanen Bedürfnissen angepassten Sketch zur Homecontrol zusammen gebastelt. Das passende Shield habe ich heut endlich auch  zum laufen bekommen.

Hier ertmal ein paar Bilder dazu.

In de kleinen schwarzen Schachtel steckt nun alles drin was mir seit zwei Wochen den Schlaf raubt.



Na sieht doch recht ordentlich aus,oder? Was ist alles drin?
ein Arduino mega 2556
ein Ethernetshield
ein Sende und Empfangsshield make Eigenbau mit RF 433 Sender, Empfänger und IR LED



Das ganze kann ich über mein Tablet steuern mit Android. Das dazugehörige Programm nennt sich NetIO.
Infos dazu gibts hier:http://netio.davideickhoff.de/



Morgens, im Bett, keine Lust zum aufstehen, Kaffee? Kein problem, mit extragroßen Tasten für meine bessere Hälfte. Nur bedienen muss sie mich noch selbst.



Und hier kann ich dann meine restlichen auf dem Flohmarkt erbeuteten Funksteckdosen bedienen.

Und das brauch ich nur falls ich ja mal vom Rechner wegkomme oder nicht grad arbeiten bin. Is eher was für meine bessere Hälfte.


Logged

Berlin
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Ich bin ja bereit alles zu lernen, bin leider auch nur ein Mensch!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Den dazu gehörigen Code will ich euch dann aber auch nicht vorenthalten.
Code:
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetClient.h> // this is new
#include <EthernetServer.h> // so is this
#include <RCSwitch.h>
#include <IRremote.h>

byte mac[] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24 };  // entspricht einer MAC von 84.85.88.16.0.36
byte ip[]  = { 192, 168, 0, 99 };                  // IP-Adresse

EthernetServer server(80);

RCSwitch mySwitch = RCSwitch();
IRsend irsend = IRsend();


void setup() {
   Serial.begin(9600);
  Serial.println("ARDUINO - STEUERUNG");
 
 
 
 
 
 
 
  Serial.println();
  Serial.println("Verbraucher schalten");
 
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server it at");
  Serial.println(EthernetClient());
  mySwitch.enableTransmit(7);
}

void loop() {
 
  char* command = httpServer();
 
 
 
  if (strcmp(command, "3an=") == 0) {
       mySwitch.switchOn("01111", "10000");
  } else if  (strcmp(command, "3aus=") == 0) {
       mySwitch.switchOff("01111", "10000");
  }
if (strcmp(command, "4an=") == 0) {
       mySwitch.switchOn("01111", "00100");
  } else if  (strcmp(command, "4aus=") == 0) {
       mySwitch.switchOff("01111", "00100");
  }
 if (strcmp(command, "5an=") == 0) {
       mySwitch.switchOn("01111", "01000");
  } else if  (strcmp(command, "5aus=") == 0) {
       mySwitch.switchOff("01111", "01000");
  }
  if (strcmp(command, "6an=") == 0) {
       mySwitch.switchOn("01111", "00010");
  } else if  (strcmp(command, "6aus=") == 0) {
       mySwitch.switchOff("01111", "00010");
  }
if (strcmp(command, "7an=") == 0) {
       mySwitch.switchOn("01111", "00001");
  } else if  (strcmp(command, "7aus=") == 0) {
       mySwitch.switchOff("01111", "00001");
  }
      for (int i = 0; i < 3; i++) {
  if (strcmp(command, "VolDown=") ==0) {
      irsend.sendRC6(0x11, 20); // Samsung TV source
      delay(40);
}
      }
   for (int i = 0; i < 3; i++) {
  if (strcmp(command, "VolUp=") ==0) {
      irsend.sendRC6(0x10, 20); // Samsung TV source
      delay(40);
}
   }
  for (int i = 0; i < 3; i++) {
  if (strcmp(command, "CHUp=") ==0) {
      irsend.sendRC6(0x4D, 20); // Samsung TV source
      delay(40);
}
  }
for (int i = 0; i < 3; i++) {
  if (strcmp(command, "CHDown=") ==0) {
      irsend.sendRC6(0x4C, 20); // Samsung TV source
      delay(40);
}
}

     for (int i = 0; i < 3; i++) {
  if (strcmp(command, "Power=") ==0) {
      irsend.sendRC6(0x1000C, 20); // Samsung TV source
      delay(40);
}
     }
}


/**
 * HTML-Seite die dem Client zurückgeschickt wird.
 */
void httpResponse(EthernetClient c) {
  c.println("HTTP/1.1 200 OK");
  c.println("Content-Type: text/html");
  c.println();
  c.println("<html>");
   
c.println("<head>");
c.println("<title>Funksteckdosen</title>");

c.println("</head>");
c.println("<body bgcolor=black>");
  c.println("<br></br>");
 

 c.println("<form  method=get name=togl>");
 
 c.println("<button name=4an type=submit style=font-weight:bold;background-color:GREEN;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Kaffeemaschiene</font></button>");
 c.println("<br></br>");
 c.println("<button name=4aus type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Kaffeemaschiene</font></button>");
  c.println("<br></br>");

 c.println("<center><text><font color=white>_______________________</font></text></center><br>");
 c.println("<br></br>");

 c.println("<button name=3an type=submit style=font-weight:bold;background-color:GREEN;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Schreibtischlampe</font></button>");
 c.println("<br></br>");
 c.println("<button name=3aus type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Schreibtischlampe</font></button>");
  c.println("<br></br>");

 c.println("<center><text><font color=white>_______________________</font></text></center><br>");
 c.println("<br></br>");

 c.println("<button name=5an type=submit style=font-weight:bold;background-color:GREEN;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Schreibtisch-PC</font></button>");
 c.println("<br></br>");
 c.println("<button name=5aus type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Schreibtisch-PC</font></button>");
 c.println("<br></br>");

 c.println("<center><text><font color=white>_______________________</font></text></center><br>");
 
  c.println("<br></br>");
c.println("<button name=7an type=submit style=font-weight:bold;background-color:GREEN;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Wohnzimmer-PC</font></button>");
 c.println("<br></br>");
 c.println("<button name=7aus type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Wohnzimmer-PC</font></button>");
  c.println("<br></br>");

  c.println("<center><text><font color=white>_______________________</font></text></center><br>");
 c.println("<br></br>");

 c.println("<button name=6an type=submit style=font-weight:bold;background-color:GREEN;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Zusatzsteckdose</font></button>");
 c.println("<br></br>");
 c.println("<button name=6aus type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Zusatzsteckdose</font></button>");
 
c.println("<br></br>");
 c.println("<button name=VolUp type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Volume Up</font></button>");
 c.println("<button name=VolDown type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Volume Down</font></button>");
 c.println("<button name=CHUp type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Channel Up</font></button>");
  c.println("<button name=CHDown type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Channel Down</font></button>");
    c.println("<button name=Power type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Power </font></button>");

 
 c.println("</form>");

   
   

c.println("</body>");
c.println("</html>");

}

/**
 * Verarbeitet Client Anfragen und gibt falls vorhanden den GET Query
 * String, also alles was in der URL hinter dem ? steht, zurück
 */
char*  httpServer() {
  EthernetClient client = server.available();
  if (client) {
    char sReturnCommand[20];
    int nCommandPos=-1;
    sReturnCommand[0] = '\0';
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if ((c == '\n') || (c == ' ' && nCommandPos>-1)) {
          httpResponse(client);
          break;
        }
        if (nCommandPos>-1) {
          sReturnCommand[nCommandPos++] = c;
        }
        if (c == '?' && nCommandPos == -1) {
          nCommandPos = 0;
        }
      }
      if (nCommandPos > 18) {
          client.println("HTTP/1.1 414 Internal server error");
          client.println("Content-Type: text/plain");
          client.println();
          client.println("414 Request URI too long");
          sReturnCommand[0] = '\0';
          break;
      }
    }
    if (nCommandPos!=-1) {
      sReturnCommand[nCommandPos] = '\0';
    }
    // give the web browser time to receive the data
    delay(1);
    client.stop();
   
    return sReturnCommand;
  }
  return '\0';
}

Hier gleich mal vielen Dank an alle die in diesem Code vereinigt sind. fragt mich aber nicht wer und wieviele es sind, Passen aber irgendwie alle zusammen.
So ganz einfach war die Erstellung des Codes nicht. Zwei Wochen lang Suchen, Kopieren, Ausprobieren und verstehen lernen warum was wann wie funkioniert. Aber die Ausdauer hat sich gelohnt, es funktioniert.
Das ganze läuft per Web-Interface und wie gesagt über NetIO für Android. Wenn ich den Code richtig verstehe, kann man es auch mit anderen Sofware und Platformlösungen bedienen welche die selben Kommandos übers Netzwerk verschicken.
Ich denke das wars erstmal zum Aufbau des Projektes selbst.

« Last Edit: October 04, 2013, 04:23:42 pm by littlemoppy » Logged

Berlin
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Ich bin ja bereit alles zu lernen, bin leider auch nur ein Mensch!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Komme ich mal zu den Problemen mit denen ich so zu kämpfen hatte.

Problem 1: Es gibt kaum genug Material im Netz um diese Projekt reibungslos als Anfänger zu realisieren. Die Anfänge waren meist von Fehlern behafet welche ich dann durch Suche von Fehlerbehebungen  wieder beseitigen musste.

Problem 2: Biblioteken und Arduino Mega 2556. Anfangs wolle erstmal gar nichts funktionieren was die Bibliothek für das IR angeht. Es hat schon eine weile gedauert bis ich eine Info über vertauschte Pins gefunden habe. Im Beispielsketch zur Bibliothek ist Pin 3 als send angegeben, beim Mega ist es komischerweise dann Pin 9. Wie soll ich denn auf sowas kommen?

Problem 3: Die Sendeleistung einer IR im Pinmode ist wohl als eher bescheiden zu nennen. Mein Arbeitsplatz ist zwei Meter vom Fernseher entfernt und die Sendeleistung betrug grad mal 20 cm. Abhilfe geschaffen hab ich mir mit einer Transistorschaltung. Die Diode wird jetzt mit 5V bedient, das reicht bis zum Fernseher. Hat aber auch einen Tag gekostet um rauszufinden das es mal nicht am Sketch liegt.

Problem 4: Ist wohl meine mangelnde Löterfahrung. Anschließen is da nicht so mein Ding, aber Kurzschließen klappt einwandfrei. Mein Lieblingswerkzeug nach einer Erfolgreichen Lötsession, Multimeter und Skalpell, der Lötkolben wird auch erst vom Netz getrennt wenn alles funktioniert. Zum Glück verkraftet der Arduino mega meine feinmotorisch exakten Lötversuche ganz gut. Quittiert meist mit wild blinkender LED oder dunkel.

Komme jetzt mal zu dem, was mir noch am Herzen liegt. Das ganze so wie es ist funktioniert. Aber, es gibt da noch Dinge die besser laufen könnten.

1. Ich möchte die HP vom mega raus auf die SD Karte. wenn das nicht geht, wie kann ich Bilder von der SD her in die HP einfügen. Ich weis nicht wie ich die SD als Image Speicher im HTML Code angebe.

2. Der Sketch ist einfach mal zu groß. Mein Leonardo will ihn nicht. Und ich würde lieber den dafür verschwenden. Es gibt sicherlich  Möglichkeiten mit weniger Befehlen das selbe Ergebnis zu erreichen.

3. Kann ich auch Teile des Sketches von der SD Karte abrufen? Die HP geht ja theoretisch auch.

4. Ich will das ganze in Zukunft noch erweitern, dazu soll noch ein Funkwettersensor und eine Uhr integriert werden und ein Relais zum ein und ausschalten meines PCs, ein LCD Display am Gerät selbst und ein großes LED Panel in der Wohnzimmerwand, zum Schluss dann auch noch für jede Steckdose einen Rückkanal, hab da was bei Conrad von Voltkraft gesehen mit Status und Energieverbrauchsanzeige über Funk.

Ich würde mich sehr über ein reges Interesse und jede menge Hilfe freuen.

LG aus Berlin
Logged

Offline Offline
Faraday Member
**
Karma: 118
Posts: 3941
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

IR-LEDs werden gepulst betrieben. Die Spannung hat nichts zu sagen. Die ist immer ca. 1,5V (mehr bei höherem Strom!). Es kommt auf den Strom an. Normalerweise vertragen LEDs etwa 20-30mA Dauerstrom. Bei IR LEDs ist maximal sogar 100mA für mehrere Millisekunden angegeben und die Abstrahlleistung bezieht sich auch diesen Wert.
In den Datenblättern steht aber auch etwas wie z.B. "peak pulse current" oder "surge current". Das gibt an dass man die LED für ein paar µs auch mit einem viel höheren Strom beschalten kann. Die SFH409 z.B. verträgt für weniger als 10µs 3A wenn man ihr danach genug Zeit zum abkühlen gibt. Die SFH4550 hat bei 100mA für 20ms eine Leistung von mindestens 500mW/sr. Bei 1A für 100µs sind es das 10-fache!

100mA solltest du sicher verwenden können. Mehr wenn die Pulslänge entsprechend kurz ist. Da sollte es im Datenblatt ein Diagramm geben, das den maximalen Strom in Abhängigkeit vom Duty Cycle angibt.


Was du generell machen solltest ist die ganzen Strings per F-Makro in den Flash-Speicher verfrachten. Sonst landen die alle im RAM.
« Last Edit: October 03, 2013, 05:33:42 pm by Serenifly » Logged

Berlin
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Ich bin ja bereit alles zu lernen, bin leider auch nur ein Mensch!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@Serenifly

Danke für die Info, Irgendwann wollte ich das Gerät auf 9V Accu umrüsten, dann könnte ich die IR theoretisch auch direct da aufschalten?

Sorry aber das mit Ram, Flash, Strings und so ziemlich viele andere Sachen verstehe ich noch nicht wirklich. Ich bin da noch so ziemlich am Anfang und lerne fast alles an Beispielen. Was ich sehe kann ich meist auch begreifen. Stundenlang Texte wälzen, hat schon mit Basic bei mir nicht funktioniert.
Logged

Offline Offline
Faraday Member
**
Karma: 118
Posts: 3941
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

LEDs brauchen immer einen Vorwiderstand an dem der Rest der Spannung abfällt:
http://www.elektronik-kompendium.de/sites/grd/1006011.htm
http://www.elektronik-kompendium.de/sites/bau/1109111.htm <--- Rechner

Wenn die Betriebsspannung höher wird, muss dann der Vorwiderstand größer werden.


Das mit F-Makro ist ganz einfach. Du schreibst statt println("Text"); -> println(F("Text"));
Dann belegt der String keinen Arbeitsspeicher, der auf Mikrocontrollern sehr begrenzt ist. Sonst stürzt dir recht schnell aus unerklärlichen Gründen das Programm ab.

Du musst dann aber auch statt strcmp -> strcmp_P verwenden. Für println() muss man sonst nichts ändern.
Logged

Berlin
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Ich bin ja bereit alles zu lernen, bin leider auch nur ein Mensch!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

OK, genau so hab ichs mir vorgestellt. Werde es so machen wie von dir beschrieben. Alles in den Flash verfrachten. Weil das mit den Abstürzen und aufhängen ist mir leider bekannt. Und ne Homecontrol die nicht wirklich zu kontrollieren ist is eher sinnlos.
Arbeitet der dann auch effizienter? Immer wenn ich ne Taste drücke unterbricht er mir kurz die Serververbindung.

Das mit der LED lass ich erstmal unbeachtet, werds mir aber für die Zukunft merken.

Danke
Logged

Berlin
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Ich bin ja bereit alles zu lernen, bin leider auch nur ein Mensch!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo ihr Lieben,

hab heute mal versucht alles in den Flashspeicher zu laden. Server geht dann zwar online, aber es reagiert keine Taste mehr und die IR-LED sendet die ganze Zeit.
Was habe ich geändert?
Zu erst: strmp zu strmp_p
Code:
void loop() {
  
  char* command = httpServer();
  
 
  

  if (strcmp_P(command, "6an=") == 0) {
       mySwitch.switchOn("01111", "00010");
  } else if  (strcmp_P(command, "6aus=") == 0) {
       mySwitch.switchOff("01111", "00010");
  }
if (strcmp_P(command, "7an=") == 0) {
       mySwitch.switchOn("01111", "00001");
  } else if  (strcmp_P(command, "7aus=") == 0) {
       mySwitch.switchOff("01111", "00001");
  }
      for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "VolDown=") ==0) {
      irsend.sendRC6(0x11, 20); // Samsung TV source
      delay(40);
}
      }
   for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "VolUp=") ==0) {
      irsend.sendRC6(0x10, 20); // Samsung TV source
      delay(40);
}
   }
  for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "CHUp=") ==0) {
      irsend.sendRC6(0xD4, 20); // Samsung TV source
      delay(40);
}
  }
for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "CHDown=") ==0) {
      irsend.sendRC6(0xC4, 20); // Samsung TV source
      delay(40);
}
}
for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "0=") ==0) {
      irsend.sendRC6(0x00, 20); // Samsung TV source
      delay(40);
}
}
for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "9=") ==0) {
      irsend.sendRC6(0x09, 20); // Samsung TV source
      delay(40);
}
}
for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "8=") ==0) {
      irsend.sendRC6(0x08, 20); // Samsung TV source
      delay(40);
}
}
for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "7=") ==0) {
      irsend.sendRC6(0x07, 20); // Samsung TV source
      delay(40);
}
}
for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "6=") ==0) {
      irsend.sendRC6(0x06, 20); // Samsung TV source
      delay(40);
}
}
for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "5=") ==0) {
      irsend.sendRC6(0x05, 20); // Samsung TV source
      delay(40);
}
}
for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "4=") ==0) {
      irsend.sendRC6(0x04, 20); // Samsung TV source
      delay(40);
}
}
for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "3=") ==0) {
      irsend.sendRC6(0x03, 20); // Samsung TV source
      delay(40);
}
}
      for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "2=") ==0) {
      irsend.sendRC6(0x02, 20); // Samsung TV source
      delay(40);
}
      }
for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "1=") ==0) {
      irsend.sendRC6(0x01, 20); // Samsung TV source
      delay(40);
}
}
for (int i = 0; i < 3; i++) {
  if (strcmp_P(command, "Power=") ==0) {
      irsend.sendRC6(0x0C, 20); // Samsung TV source
      delay(40);
}
}
}

Und dann noch das: println("irgendwas steht drinn") in println(F("irgendwas steht drinn"))
Code:
/**
 * HTML-Seite die dem Client zurückgeschickt wird.
 */
void httpResponse(EthernetClient c) {
  c.println(F("HTTP/1.1 200 OK"));
  c.println(F("Content-Type: text/html"));
  c.println();
  c.println(F("<html>"));
    
c.println(F("<head>"));
c.println(F("<title>Funksteckdosen</title>"));

c.println(F("</head>"));
c.println(F("<body bgcolor=black>"));
  c.println(F("<br></br>"));
  

 c.println(F("<form  method=get name=togl>"));
 

 c.println(F("<button name=5an type=submit style=font-weight:bold;background-color:GREEN;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Schreibtisch-PC</font></button>"));
 c.println(F("<br></br>"));
 c.println(F("<button name=5aus type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Schreibtisch-PC</font></button>"));
 c.println(F("<br></br>"));

 c.println(F("<center><text><font color=white>_______________________</font></text></center><br>"));
 
  c.println(F("<br></br>"));
c.println(F("<button name=7an type=submit style=font-weight:bold;background-color:GREEN;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Wohnzimmer-PC</font></button>"));
 c.println(F("<br></br>"));
 c.println(F("<button name=7aus type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Wohnzimmer-PC</font></button>"));
  c.println(F("<br></br>"));

  c.println(F("<center><text><font color=white>_______________________</font></text></center><br>"));
 c.println(F("<br></br>"));

 c.println(F("<button name=6an type=submit style=font-weight:bold;background-color:GREEN;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Zusatzsteckdose</font></button>"));
 c.println("<br></br>");
 c.println(F("<button name=6aus type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Zusatzsteckdose</font></button>"));
 
c.println(F("<br></br>"));
 c.println(F("<button name=VolUp type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Volume Up</font></button>"));
 c.println(F("<button name=VolDown type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Volume Down</font></button>"));
 c.println(F("<button name=CHUp type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Channel Up</font></button>"));
  c.println(F("<button name=CHDown type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Channel Down</font></button>"));
  c.println(F("<button name=0 type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7> 0</font></button>"));
  c.println(F("<button name=9 type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>9 </font></button>"));
  c.println(F("<button name=8 type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>8 </font></button>"));
  c.println(F("<button name=7 type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>7 </font></button>"));
  c.println(F("<button name=6 type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>6 </font></button>"));
  c.println(F("<button name=5 type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>5 </font></button>"));
  c.println(F("<button name=4 type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>4 </font></button>"));
  c.println(F("<button name=3 type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>3 </font></button>"));
  c.println(F("<button name=2 type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>2 </font></button>"));
  c.println(F("<button name=1 type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7> 1</font></button>"));
  c.println(F("<button name=Power type=submit style=font-weight:bold;background-color:RED;padding:10px;margin:2px;color:WHITE;height:100px;width:1000px><font size=7>Power </font></button>"));

 
 c.println(F("</form>"));
c.println(F("</body>"));
c.println(F("</html>"));

}


Auserdem hab ich noch ein paar Fehler in meinem Sketch korrigiert, hatte ein paar Klammern vergessen. Hab ihn oben gleich aktualisiert. So wie er jetzt ist, funktioniert er auch.

LG aus Berlin
Logged

Offline Offline
Faraday Member
**
Karma: 118
Posts: 3941
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du musst für die Vergleichs-Strings dann auch ins Flash schreiben . Das ist aber komplizierter:
http://arduino.cc/en/Reference/PROGMEM

Geht anscheinend mit dem F-Makro alleine nicht. Da kommt dann ein Compiler-Fehler. Soweit hatte ich da nicht gedacht. Sorry :s

Wobei diese paar Byte im Gegensatz zu den riesigen HTML-Romanen gar nicht so ins Gewicht fallen. Also lass das vielleicht erst mal weg.

Geht zum Glück mit Bearbeiten -> Suchen leicht zu ändern smiley
« Last Edit: October 04, 2013, 05:17:47 pm by Serenifly » Logged

Berlin
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Ich bin ja bereit alles zu lernen, bin leider auch nur ein Mensch!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke,

Hab nach deinem Post gleich die Suche nach F-Macro eingeschaltet und das mit Progmem dazu gefunden. Wie ich gesehen habe muss ich dann auch noch eine Bibliothek dazu einbinden.
Was meinst du? Soll ich die (F(Text)) oder scrmp_P wieder ändern oder beides?
werde mich dann trotzdem mal mit Progmem befassen.
hast du vieleich nen Plan wie ich die HTML vom Ardu auf die Speicherkarte bekomme? Ich sag mal ohne des ganze Geraffel mit der Homecontrol weis ich wies geht ne HTML von der Speicherkarte zu lesen. Nur wie ich dann auf die Funktionen zugreifen kann ist mir noch unklar. Hatte es schon versucht, aber da läßt sich dann nichts schalten. Da scheinen dann die Pfade nicht mehr zu stimmen.
Logged

Offline Offline
Faraday Member
**
Karma: 118
Posts: 3941
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mach es erst mal so wie du es hattest. Das normale strcmp und ohne Flash-Makro. Also strcmp_P wieder durch strcmp ersetzen. Das F-Makro ist leider nur sehr begrenzt einsetzbar. Deshalb muss man das per Hand machen wenn man mehr Funktionalität will. Das lohnt sich für diese kurzen Strings nicht unbedingt.

Und F() dann nur für den HTML-Teil verwenden. Was sein kann, ist dass die Webseite dann etwas langsamer reagiert, da Flash-Zugriff langsamer als das SRAM ist. Aber das wäre mit der SD-Karte noch langsamer.

Mit SD-Karten kenne ich mir nicht aus. Aber das ist in diesem Fall auch nicht anders als generell Text darauf zu schreiben. Mann muss da halt dann zeilenweise auslesen aus einer Text-Datei auslesen. Die Text-Datei kann man auf dem PC per Hand anlegen.
Logged

Berlin
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Ich bin ja bereit alles zu lernen, bin leider auch nur ein Mensch!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mal wieder Danke,

Neue Idee,
kann ich den HTML Teil nicht irgendwie weg lassen? Eigentlich brauch ich ihn ja nicht. Ich greife ja von einem Externen Programm drauf zu. Aber kann ich ohne die HTML-Links überhaupt auf strcmp zugreifen? Senden tu ich ja nur das char was bei strcmp angegeben ist.


Edit: Schon erledigt, einfach die HTML gelöscht.
« Last Edit: October 04, 2013, 08:43:18 pm by littlemoppy » Logged

Cloppenburg
Online Online
Edison Member
*
Karma: 30
Posts: 1241
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi. kannst du bitte alles an Hardware auflisten was du verbaut hast? Konnte bisher nix finden in den Beiträgen.
Logged

Nicht Mensch, nicht Tier: Programmierer halt...

Berlin
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Ich bin ja bereit alles zu lernen, bin leider auch nur ein Mensch!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo skorpi08,

na mal sehen ob ich es zusammen bekomme.

Als Board ein Arduino mega2556, denk drann das die Pinbelegung nicht stimmt, mein Sendeshield geht nicht am Leo. Vieleicht kann man das ja noch nachträglich festlegen das immer der selbe Pin genutzt wird.
Ein Lan- shield, einen billig china RF-XD Sender, IR Diode 950nm, passende Wiederstände, 160 Ohm für die Diode, 1 KOhm für den NPN Transistor um der Diode genügend Saft zu geben, ein Bissl Leiterplatte und ein paar Drähte und des wars.
Um die Fernbedienung auszulesen habe ich mein Leo und nen TSOP 1838 = 4838 von Conrad benutzt. Für die Steckdosen halt das Billiggegenstück zum Empfänger.
Logged

Cloppenburg
Online Online
Edison Member
*
Karma: 30
Posts: 1241
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Also dass mit dem Festplattengehäuse find ich super! Habe geschätzte 10 Stück hier liegen.
Der RF Sender sendet an die Funksteckdose, wozu dann die IR?
Ist es egal von Welchem Hersteller die Funksteckdosen sind?
Hatte was gelesen, dass man die Codes auslesen muss, die der Sender an die Steckdose liefert.
Welche Steckdosen hast du denn?
Logged

Nicht Mensch, nicht Tier: Programmierer halt...

Pages: [1] 2 3   Go Up
Jump to: