Pages: [1]   Go Down
Author Topic: Webserver und mehrere LED`s unabhängig schalten.  (Read 1333 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 64
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen ich bin ganz neu in der arduino Welt.
Mein Vorhaben 2 LED`s später Relays über den Webserver zu steuern.

Habe das Arduino Ethernet Shield v1.1 laufen mit folgenden Sketch:
Code:
#include "etherShield.h"
#include "ETHER_28J60.h"

int outputPin = 4;
int outputPin2 = 5;

static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};                                                           
static uint8_t ip[4] = {192, 168, 1, 15};                     
static uint16_t port = 80;                                   

ETHER_28J60 e;

void setup()
{
  e.setup(mac, ip, port);
  pinMode(outputPin, OUTPUT);
  pinMode(outputPin2, OUTPUT);
}

void loop()
{
 
 char* params;
  if (params = e.serviceRequest())
  {
    e.print("<H1>Web Remote PIN 4</H1>");
    if (strcmp(params, "?cmd=on") == 0)
    {
      digitalWrite(outputPin, HIGH);
      e.print("<A HREF='?cmd=off'>Ausschalten</A>");
    }
    else
    {
      digitalWrite(outputPin, LOW);
      e.print("<A HREF='?cmd=on'>Anschalten</A>");
    }
 
 
    e.print("<H1>Web Remote PIN 5</H1>");
    if (strcmp(params, "?cmd2=on") == 0)
    {
      digitalWrite(outputPin2, HIGH);
      e.print("<A HREF='?cmd2=off'>Ausschalten</A>");
    }
    else
    {
      digitalWrite(outputPin2, LOW);
      e.print("<A HREF='?cmd2=on'>Anschalten</A>");
    }
    e.respond();
  }
}
Funktioniert soweit ganz gut bis auf das Problem das sich blos immer ein LED anschalten lässt. Sprich ist Pin4 aktiv und ich klicke Pin5 anschalten dann geht 4 aus. Und umgekehrt gleichzeitig. Kann mir jemand nen hilfreichen Hint geben wie ich das Problem in Griff bekomme? Sitze schon die halbe Nacht davor und habe so einiges Probiert wie weitere Abfragen einzubauen was alles gescheitert ist.

Greeez Oli
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 257
Posts: 21472
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du schickst wahrscheinlich als Parameter immer nur cmd ODER cmd2. Darum schaltet sich das jeweils andere LED aus.
Du mußt das Einschalten bzw Ausschalten eines LED durch 2 verschiedenen IF machen und nicht mit einer IF-ELSE-Bedingung als entweder oder. Du hast dann 3 Möglichkeiten: es wird cmd=on, cmd=off oder kein cmd=xx als Get Parameter übertragen.
also so:
 
Code:
if (strcmp(params, "?cmd=on") == 0)
    {
      digitalWrite(outputPin, HIGH);
      e.print("<A HREF='?cmd=off'>Ausschalten</A>");
    }

 if (strcmp(params, "?cmd=off") == 0)
    {
      digitalWrite(outputPin, LOW);
      e.print("<A HREF='?cmd=on'>Anschalten</A>");
    }

Grüße Uwe
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 64
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke das funktioniert nun das beide wie gewünscht gesteuert werden können.
Nun ist aber noch ein anderes Problem aufgetretten mit der Ausgabe am Webserver da wenn ich eine LED aktivere er auf cmd=foobar geht und mit den 2 Link nicht mehr anzeigt.

Code sieht so im moment aus:
Code:
void loop()
{
 
 char* params;
  if (params = e.serviceRequest())
  {
    e.print("<b>Web Remote PIN 4 </b>");
    if (strcmp(params, "?cmd=on") == 0)
    {
      digitalWrite(outputPin, HIGH);
      e.print("<A HREF='?cmd=off'>Ausschalten</A><br>");
    }
        if (strcmp(params, "?cmd=on") == 0)
    {
      digitalWrite(outputPin, LOW);
      e.print("<A HREF='?cmd=on'>Anschalten</A><br>");
    }
    if (strcmp(params, "") == 0)
    {
      digitalWrite(outputPin, LOW);
      e.print("<A HREF='?cmd=on'>Anschalten</A><br>");
    }

 
 
 
    e.print("<br><b>Web Remote PIN 5 </b>");
    if (strcmp(params, "?cmd2=on") == 0)
    {
      digitalWrite(outputPin2, HIGH);
      e.print("<A HREF='?cmd2=off'>Ausschalten</A>");
    }
    if (strcmp(params, "?cmd2=off") == 0)
    {
      digitalWrite(outputPin2, LOW);
      e.print("<A HREF='?cmd2=on'>Anschalten</A>");
    }
    if (strcmp(params, "") == 0)
    {
      digitalWrite(outputPin2, LOW);
      e.print("<A HREF='?cmd2=on'>Anschalten</A>");
    }
   
    e.respond();
  } 
}

Hat jemand eine Idee.

Greeez Oli
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 257
Posts: 21472
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dann mußt Du jedesmal die Schaltflächen für beide LEDs an den Browser senden. Den Zustand des anderen LEDs kannst Du durch digitalRead des Ausgangs auslesen.
Grüße Uwe
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 64
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Habs jetzt so gemacht. Funktioniert Super:
Code:
#include "etherShield.h"
#include "ETHER_28J60.h"

int outputPin = 4;
int outputPin2 = 5;

static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};                                                           
static uint8_t ip[4] = {192, 168, 1, 15};                     
static uint16_t port = 80;                                   

int statuspin1 = 0;
int statuspin2 = 0;

ETHER_28J60 e;

void setup()
{
  e.setup(mac, ip, port);
  pinMode(outputPin, OUTPUT);
  pinMode(outputPin2, OUTPUT);
}

void loop()
{
 
 char* params;
  if (params = e.serviceRequest())
  {
// PIN 1
    e.print("<table border=1><tr><td><b>PIN 4</b></td>");

    if (strcmp(params, "?cmd=on") == 0)
    {
      digitalWrite(outputPin, HIGH);
    }
    if (strcmp(params, "?cmd=off") == 0)
    {
      digitalWrite(outputPin, LOW);
    }
   

statuspin1 = digitalRead(outputPin);
if (statuspin1 == true)
{
  e.print("<td><font color=green>aktiv</font></td>");
}
else
{
  e.print("<td><font color=red>inaktiv</font></td>");
}
    e.print("<td><A HREF='?cmd=off'>Ausschalten</A></td> ");
    e.print("<td><A HREF='?cmd=on'>Anschalten</A></td></tr>");
   
// PIN 2
    e.print("<tr><td><b>PIN 5</b></td>");
 
    if (strcmp(params, "?cmd2=on") == 0)
    {
      digitalWrite(outputPin2, HIGH);
    }
    if (strcmp(params, "?cmd2=off") == 0)
    {
      digitalWrite(outputPin2, LOW);
    }
 
statuspin2 = digitalRead(outputPin2);
if (statuspin2 == true)
{
  e.print("<td><font color=green>aktiv</font></td>");
}
else
{
  e.print("<td><font color=red>inaktiv</font></td>");
}
    e.print("<td><A HREF='?cmd2=off'>Ausschalten</A></td>");
    e.print("<td><A HREF='?cmd2=on'>Anschalten</A></td>");
 
    e.respond();
  } 
}
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 257
Posts: 21472
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du kannst auch nur eine Schaltfläche pro led haben:

Quote
if (statuspin2 == true)
{
  e.print("<td><font color=green>aktiv</font></td>");
   e.print("<td><A HREF='?cmd2=off'>Ausschalten</A></td>");
}
else
{
  e.print("<td><font color=red>inaktiv</font></td>");
  e.print("<td><A HREF='?cmd2=on'>Anschalten</A></td>");
}
   
Das mit der Tabelle mußt Du noch kontrollieren. Das gleiche für Pin1.
Grüße Uwe
   
 
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 64
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Super Danke
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 257
Posts: 21472
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bitte
Logged

Pages: [1]   Go Up
Jump to: