Hello,
It is now ok!! When the network stalls for more than 1000 ms, I reset the board.
This is perfect for me!
Thank you so much! We have a concert saturday 8)
/*
tcp client
Arduino Ethernet shield w5100.
* Ethernet shield attached to pins 10, 11, 12, 13
* carte micro sd = pin 4
*/
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0x25, 0x11, 0x80 };
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(192, 168, 1, 5); // numeric IP for Google (no DNS)
//char server[] = "www.google.com"; // name address for Google (using DNS)
// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 1, 177);
// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;
int connectLoop;
void(* resetFunc) (void) = 0; //declare reset function @ address 0
class Strip
{
public:
int pin;
byte CH;
byte VX;
byte dernierEnvoye;
byte val;
void init(int p, byte c, byte v)
{
pin = p;
CH = c;
VX = v;
}
void tester()
{
val = map(analogRead(pin), 0, 1023, 0x00, 0x7F);
if (val != dernierEnvoye)
{
byte buf[] = { 0xB0, 0x63, CH, 0xB0, 0x62, 0x20 , 0xB0, 0x06, val, 0xB0, 0x26, VX};
client.write(buf, 12);
dernierEnvoye = val;
}
}
};
const int nbStrip = 6;
Strip strip[nbStrip];
int nbFE = 0;
const int ledVerte = 32;
const int ledRouge = 33;
void setup() {
pinMode(ledVerte, OUTPUT);
pinMode(ledRouge, OUTPUT);
digitalWrite(ledVerte, HIGH); // vert
digitalWrite(ledRouge, HIGH); // rouge
pinMode(4, OUTPUT);
digitalWrite(4, HIGH); // disable SD SPI
strip[0].init(A0, 0X2C, 0x03);
strip[1].init(A1, 0X29, 0x03);
//strip[2].init(A1, 0X2A, 0x03);
strip[2].init(A1, 0X2B, 0x03);
//strip[4].init(A1, 0X2C, 0x03);
strip[3].init(A2, 0X24, 0x03);
strip[4].init(A2, 0X25, 0x03);
strip[5].init(A3, 0X23, 0x03);
// Open serial communications and wait for port to open:
Serial.begin(57600);
Serial.println("start!");
// while (!Serial) {
// ; // wait for serial port to connect. Needed for Leonardo only
// }
// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
// try to congifure using IP address instead of DHCP:
Ethernet.begin(mac, ip);
}
// give the Ethernet shield a second to initialize:
delay(1000);
Serial.print("my ip is ");
Serial.println(Ethernet.localIP());
digitalWrite(ledVerte, LOW); // vert
digitalWrite(ledRouge, LOW); // rouge
Serial.println("searching for Alen&Heath QU mixer...");
bool connexionOK = false;
digitalWrite(ledRouge, HIGH); // rouge
IPAddress server(192, 168, 10, 3); // QU-16 ip
Serial.println("192.168.10.3"); // DEFAULT IP ADRESS
if (client.connect(server, 51325))
connexionOK = true;
if (!connexionOK)
{// START AUTODETECT
for (int j = 2; j < 256; j++)
{
//192.168.1.x
digitalWrite(ledRouge, LOW); // rouge
IPAddress server(192, 168, 1, j); // QU-16 ip
Serial.print("192.168.1.");
Serial.println(j);
if (client.connect(server, 51325))
{
connexionOK = true;
break;
}
//192.168.10.x
digitalWrite(ledRouge, HIGH); // rouge
IPAddress server2(192, 168, 10, j); // QU-16 ip
Serial.print("192.168.10.");
Serial.println(j);
if (client.connect(server2, 51325))
{
connexionOK = true;
break;
}
}
}
if (connexionOK) {
connexionOK = true;
Serial.println("connected");
digitalWrite(ledVerte, HIGH); // vert
}
else {
digitalWrite(ledRouge, HIGH); // rouge
Serial.println("connection failed");
delay(1000); // wait for a second
Serial.println("resetting");
resetFunc(); //call reset
}
}
void loop()
{
// if there are incoming bytes available
// from the server, read them and print them:
bool recu = false;
if (client.available())
{
connectLoop = 0;
for (int s = 0; s < nbStrip; s++)
strip[s].tester();
//client.flush();
byte c = client.read();
Serial.print(c, HEX);
Serial.print(" ");
if (c == 0xFE)
{
nbFE++;
if (nbFE >= 2)
{
digitalWrite(ledVerte, HIGH); //vert
nbFE = 0;
}
else
digitalWrite(ledVerte, LOW); // vert
Serial.println();
}
}
delay(1);
connectLoop++;
if (connectLoop > 1000)
{
Serial.println();
Serial.println(F("Timeout"));
client.stop();
}
// if the server's disconnected, stop the client:
if (!client.connected()) {
digitalWrite(ledRouge, HIGH); // rouge
Serial.println();
Serial.println("disconnecting.");
client.stop();
//delay(1000); // wait for a second
Serial.println("resetting");
resetFunc(); //call reset
/*
// do nothing forevermore:
while (true)
{
;
};
*/
}
// digitalWrite(ledVerte, LOW); // vert
}