Arduino och ENC28J60

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
RadioDJ
Inlägg: 446
Blev medlem: 7 november 2005, 16:18:15
Ort: Helsingborg

Arduino och ENC28J60

Inlägg 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 = "";
        }
      }
    }
  }
} 
Användarvisningsbild
Jan Almqvist
Inlägg: 1655
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: Arduino och ENC28J60

Inlägg 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å.
Användarvisningsbild
maDa
Inlägg: 4080
Blev medlem: 11 november 2005, 22:13:16
Ort: Malmö
Kontakt:

Re: Arduino och ENC28J60

Inlägg av maDa »

Färgen? Som i knappen på webbsidan?
RadioDJ
Inlägg: 446
Blev medlem: 7 november 2005, 16:18:15
Ort: Helsingborg

Re: Arduino och ENC28J60

Inlägg 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.
Skriv svar