Sida 1 av 1

Arduino och ENC28J60

Postat: 8 september 2016, 20:57:58
av RadioDJ
Jag har hållit på lite grann med Arduino i sig själv men ska nu ge mig in i ethernet träsket.
Om detta har jag ingen koll alls.

Jag har hittat lite kod som jag stulit och sedan ändrat för att passa mig.
Det fungerar delvis.
Jag kan tända och släcka mina lampor ett litet tag, sedan hänger sig hemsidan och jag måste starta om min Arduino.
Det finns ingen logik att jag måste trycka en viss kombination utan det inträffar lite som det själv vill.
Någon som kan hjälpa mig på vägen?

Sedan har jag ett problem som jag ej löst än och skulle behöva lite kod till.
Hur kan jag ändra färgen på knappen jag tryckt på?

Ett annat litet problem. Om jag har en ingång på Arduinon, hur kan jag få detta att visas på hemsidan utan att själv behöva uppdatera den i webläsaren.

Koden som jag har just nu:

Kod: Markera allt

//zoomkat 8-04-12
//simple button GET server code to control arduino pins
//for use with IDE 1.0 or later
//open serial monitor to see what the arduino receives
//use ' instead of " in the html 
//address will look like http://192.168.0.239:80 when submited
//for use with ENC28J60 based ethernet shields

#include <SPI.h>
#include <UIPEthernet.h>
// NYI
#include <EEPROM.h>   // Spara utgångarnas värde i minnet. För att kunna återta rätt läge vid strömavbrott

byte mac[]     = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // physical mac address
byte ip[]      = {192, 168, 0, 239};                   // ip in lan
byte gateway[] = {192, 168, 0, 253};                   // internet access via router
byte subnet[]  = {255, 255, 255, 0};                   // subnet mask
byte port      = 80;                                   // Portatt lyssna på 
EthernetServer server(port);                           // Dra igång servern på rätt port

String readString;                                     // Håller inkommande sträng

//////////////////////
void setup()
{
// Vilka pinnar går till reläerna
  pinMode(5, OUTPUT); //pin selected to control
  pinMode(6, OUTPUT); //pin selected to control
  pinMode(7, OUTPUT); //pin selected to control
  pinMode(8, OUTPUT); //pin selected to control

// Se till att alla utgångarna är av
  digitalWrite(5, HIGH);    // set pin 5 low
  digitalWrite(6, HIGH);    // set pin 6 low
  digitalWrite(7, HIGH);    // set pin 7 low
  digitalWrite(8, HIGH);    // set pin 8 low

  
//start Ethernet
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();

//enable serial data print 
  Serial.begin(9600); 
  Serial.println("server multi pin button test 1.1"); // so I can keep track of what is loaded
// Skriver ut enhetens IP. Användbart vid DHCP
  Serial.print("My IP address: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    // print the value of each byte of the IP address:
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print(".");
  }
}


void loop()
{
// Create a client connection
  EthernetClient client = server.available();
  if (client) 
  {
    while (client.connected()) 
    {
      if (client.available()) 
      {
        char c = client.read();

        //read char by char HTTP request
        if (readString.length() < 200) 
        {
          //store characters to string 
          readString += c; 
        } 

        //if HTTP request has ended
        if (c == '\n') 
        {
          client.println(F("HTTP/1.1 200 OK")); //send new page
          client.println(F("Content-Type: text/html"));
          client.println(F("Connection: close"));  // the connection will be closed after completion of the response
          client.println(F("Refresh: 5"));  // refresh the page automatically every 5 sec
          client.println();

          client.println(F("<HTML>"));
          client.println(F("<HEAD>"));
          client.println(F("<TITLE>Arduino GET test page</TITLE>"));
          client.println(F("</HEAD>"));
          client.println(F("<BODY>"));
          client.println(F("<body bgcolor='yellow'>"));  //blue
          client.println(F("<center><H1>Nätverkstest alfa 0.1</H1>"));
          
          // For simple testing, pin 5, 6, 7, and 8 are used in buttons
          client.println(F("<input type=button value='1 ON' onmousedown=location.href='/?on1;'>"));
          client.println(F("<input type=button value= '1 OFF' onmousedown=location.href='/?off1;'><br><br>"));

          client.println(F("<input type=button value='2 ON' onmousedown=location.href='/?on2;'>"));
          client.println(F("<input type=button value= '2 OFF' onmousedown=location.href='/?off2;'><br><br>"));

          client.println(F("<input type=button value='3 ON' onmousedown=location.href='/?on3;'>"));
          client.println(F("<input type=button value= '3 OFF' onmousedown=location.href='/?off3;'><br><br>"));

          client.println(F("<input type=button value='4 ON' onmousedown=location.href='/?on4;'>"));
          client.println(F("<input type=button value='4 OFF' onmousedown=location.href='/?off4;'><br><br>"));

          client.println(F("<input type=button value='ALL ON' onmousedown=location.href='/?on1on2on3on4;'>"));
          client.println(F("<input type=button value='ALL OFF' onmousedown=location.href='/?off1off2off3off4;'><br><br>"));

          client.println(F("</BODY>"));
          client.println(F("</HTML>"));

          ///////////////////// control arduino pin
          if(readString.indexOf("on1") >0)//checks for 2
          {
            digitalWrite(5, LOW);    // set pin 5 high
            client.println(F("Light 1 Is On"));
            client.println(F("<br/>"));
          }
          if(readString.indexOf("off1") >0)//checks for 3
          {
            digitalWrite(5, HIGH);    // set pin 5 low
            client.println(F("Light 1 Is Off"));
            client.println(F("<br/>"));
         }
          
          if(readString.indexOf("on2") >0)//checks for 4
          {
            digitalWrite(6, LOW);    // set pin 6 high
            client.println(F("Light 2 Is On"));
            client.println(F("<br/>"));
          }
          if(readString.indexOf("off2") >0)//checks for 5
          {
            digitalWrite(6, HIGH);    // set pin 6 low
            client.println(F("Light 2 Is Off"));
            client.println(F("<br/>"));
          }
          
          if(readString.indexOf("on3") >0)//checks for 6
          {
            digitalWrite(7, LOW);    // set pin 7 high
            client.println(F("Light 3 Is On"));
            client.println(F("<br/>"));
          }
          if(readString.indexOf("off3") >0)//checks for 7
          {
            digitalWrite(7, HIGH);    // set pin 7 low
            client.println(F("Light 3 Is Off"));
            client.println(F("<br/>"));
          }     
          
            if(readString.indexOf("on4") >0)//checks for 8
          {
            digitalWrite(8, LOW);    // set pin 8 high
            client.println(F("Light 4 Is On"));
            client.println(F("<br/>"));
          }
          if(readString.indexOf("off4") >0)//checks for 9
          {
            digitalWrite(8, HIGH);    // set pin 8 low
            client.println(F("Light 4 Is Off"));
            client.println(F("<br/>"));
          }         
             
          delay(1);
          //stopping client
          client.stop();
          //clearing string for next read
          readString = "";
        }
      }
    }
  }
} 

Re: Arduino och ENC28J60

Postat: 9 september 2016, 07:46:04
av Jan Almqvist
Får man förslå en alternativ lösning?

Använd en HMI app istället samt en enkel Modbus-server i Arduinon som ansluts via Bluetooth eller ethernet.

http://idea-teknik.com/hmi_droid.html#hemautomation

I exemplet används en liten PLC men det fungerar bra med Arduino också.

Re: Arduino och ENC28J60

Postat: 9 september 2016, 11:37:47
av maDa
Färgen? Som i knappen på webbsidan?

Re: Arduino och ENC28J60

Postat: 9 september 2016, 20:59:15
av RadioDJ
Just så.
Jag vill att när man tryckt på en knapp, så vill jag att den knappen ska ändra färg i webläsaren.