I'm sorry. Here my code:
#include <SPI.h>
#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFF, 0xED};
String code = "";
String doc = "";
String data;
int lencode;
IPAddress server(192,168,1,15);
EthernetClient client;
void setup() {
//set pinmode to control 10 relay
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
// turn - off 10 realy
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
// Ethernet.begin(mac, ip, mydns, gateway, subnet);
Ethernet.begin(mac);
if (Ethernet.begin(mac) == 0 )
{
Ethernet.maintain();
}
delay(50);
client.connect(server,1000);
delay(200);
while(!client.connected()){
delay(50);
client.stop();
delay(50);
client.connect(server, 1000);
delay(200);
}
if (client.connected()) {
client.print("relay already");
}
}
void(*resetFunc) (void) = 0;
void loop()
{
//get string command from server
if (client.available()) {
code = "";
while (client.available() > 0) {
char c = client.read();
code += c;
}
}
if ( code.startsWith("relay")) {
command();
}
//auto re-connect when internet problem
while(!client.connected()){
client.stop();
delay(50);
//try 10 times
for(int i = 0; i<10;i++){
delay(3000);
client.connect(server, 1000);
delay(50);
if(client.connected()){
client.print("re-connect control relay");
return;
}
}
//after 10 times still not re-connect. Call resetFunc goto void(setup)
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
resetFunc();
}
}
void command()
{
//PIN 0 :
if( code.endsWith("OUT00")){
digitalWrite(0,LOW);
delay(20);
code = "";
}
if( code.endsWith("OUT01")){
digitalWrite(0,HIGH);
delay(20);
code = "";
}
//PIN 1 :
if( code.endsWith("OUT10")){
digitalWrite(1,LOW);
delay(20);
code = "";
}
if( code.endsWith("OUT11")){
digitalWrite(1,HIGH);
delay(20);
code = "";
}
//PIN 2:
if( code.endsWith("OUT20")){
digitalWrite(2,LOW);
delay(20);
code = "";
}
if( code.endsWith("OUT21")){
digitalWrite(2,HIGH);
delay(20);
code = "";
}
//PIN 3:
if( code.endsWith("OUT30")){
digitalWrite(3,LOW);
delay(20);
code = "";
}
if( code.endsWith("OUT31")){
digitalWrite(3,HIGH);
delay(20);
code = "";
}
//PIN 4:
if( code.endsWith("OUT40")){
digitalWrite(4,LOW);
delay(20);
code = "";
}
if( code.endsWith("OUT41")){
digitalWrite(4,HIGH);
delay(20);
code = "";
}
//PIN 5:
if( code.endsWith("OUT50")){
digitalWrite(5,LOW);
delay(20);
code = "";
}
if( code.endsWith("OUT51")){
digitalWrite(5,HIGH);
delay(20);
code = "";
}
//PIN 6:
if( code.endsWith("OUT60")){
digitalWrite(6,LOW);
delay(20);
code = "";
}
if( code.endsWith("OUT61")){
digitalWrite(6,HIGH);
delay(20);
code = "";
}
//PIN 7:
if( code.endsWith("OUT70")){
digitalWrite(7,LOW);
delay(20);
code = "";
}
if( code.endsWith("OUT71")){
digitalWrite(7,HIGH);
delay(20);
code = "";
}
//PIN 8:
if( code.endsWith("OUT80")){
digitalWrite(8,LOW);
delay(20);
code = "";
}
if( code.endsWith("OUT81")){
digitalWrite(8,HIGH);
delay(20);
code = "";
}
//PIN 9:
if( code.endsWith("OUT90")){
digitalWrite(9,LOW);
code = "";
}
if( code.endsWith("OUT91")){
digitalWrite(9,HIGH);
delay(20);
code = "";
}
}
My code is fine. It is working.
Ex: I send string command from virtual TCPserver to Arduino, I will turn on/off relay
- relayOUT00 : turn - off relay 1
- relayOUT01 : turn - on relay 1
and so on.
The problem is Ethernet Shield go to Watchdog or timeout/hang. I can not control after 15min.
I modified follow your code in library w5100.cpp. I set 0 and 1. But it did not work.
void W5100Class::init(void)
{
delay(300);
#if !defined(SPI_HAS_EXTENDED_CS_PIN_HANDLING)
SPI.begin();
initSS();
#else
SPI.begin(SPI_CS);
// Set clock to 4Mhz (W5100 should support up to about 14Mhz)
SPI.setClockDivider(SPI_CS, 21);
SPI.setDataMode(SPI_CS, SPI_MODE0);
#endif
SPI.beginTransaction(SPI_ETHERNET_SETTINGS);
writeMR(1<<RST);
writeTMSR(0x55);
writeRMSR(0x55);
SPI.endTransaction();
[b]writeRCR(0x00);[/b]
for (int i=0; i<MAX_SOCK_NUM; i++) {
SBASE[i] = TXBUF_BASE + SSIZE * i;
RBASE[i] = RXBUF_BASE + RSIZE * i;
}
}
Thank SurferTim for your consider