problema Arduino si blocca

Ciao a tutti mi chiamo Fabrizio e ho iniziato a programmare con Arduino da pochi mesi collegando 4 relè per aprire il cancello e altri apparecchi ma recentemente collegando anche il led ir per accendere la televisione da web e cliccando 4 o 5 volte sulla pagina web arduino si blocca inspiegabilmente ed escono molte scritte strane perdendo così la connessione!
Sarei molto grato se qualcuno sarebbe così gentile da controllarmi il codice se è formalmente corretto

Vi ringrazio :slight_smile:

#include <IRremote.h>
#include <IRremoteInt.h>
#include <String.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Tone.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac address
byte ip[] = { 192, 168, 1, 9 }; // ip arduino internet in
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
Server server(80);

IRsend irsend;

unsigned int Samsung[68] ={4550,4450,600,1600,650,1650,600,1600,650,500,600,500,650,500,600,500,650,500,600,1650,600,1600,650,1600,650,500,600,500,650,500,600,500,650,500,600,500,650,1600,600,500,650,500,600,500,650,500,600,500,650,500,600,1600,650,500,600,1650,600,1650,600,1650,600,1650,600,1650,600,1650,600};
unsigned int dream[70] ={260,700,240,2560,260,700,240,2720,240,1240,260,1240,240,840,240,2040,260,12700,260,700,240,840,240,700,260,700,240,700,260,2700,260,700,240,700,260,15424,260,700,240,2560,260,700,240,2720,240,1240,260,1240,240,840,240,2040,260,12700,260,700,
240,1920,240,1760,260,700,240,700,260,2700,260,700,240,700};
unsigned int box[72] ={260,15424,260,700,240,2560,240,720,240,2720,240,1240,240,1260,240,840,240,2040,260,12700,240,720,240,1900,260,1760,240,720,240,700,240,2720,240,720,240,700,240,11960,260,700,240,2560,260,700,240,2720,240,1240,260,1240,240,840,2040,260,12700,240,720,240,1760,260,1900,240,720,240,700,240,2720,260,700,240,700,260};

int sensorPin = 0;
int led3 = 3;
int led5 = 5;
int led6 = 6;
int led7 = 7;
int led8 = 8;
int led9 = 9; // pin attuatore
boolean LEDON = false; // flag status attuatore
boolean LEDONn = false; // flag status attuatore
boolean LEDN = false; // flag status attuatore

String readString; //string
void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
pinMode(led9, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led5, OUTPUT);

}

void loop(){
int reading = analogRead(sensorPin);
int voltage = reading * 6.5;
voltage /= 1024.0;

{
//temperatura
int temperatureC = (voltage - 0.5) * 10 ; //converting from 10 mv per degree wit 500 mV offset

/inizio client/
// listen for incoming clients
Client client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
readString.concat(c); //store characters to string
if (c == '\n' && currentLineIsBlank) {

if(readString.indexOf("L=1") > 0) {//apricancello

digitalWrite(led9, HIGH);
delay(1000);
digitalWrite(led9, LOW);
}

if(readString.indexOf("L=2") > 0) {//rele ON

digitalWrite(led8, HIGH);
LEDON = true;

//accende il led
}
if(readString.indexOf("L=3") > 0) {//rele OFF

digitalWrite(led8, LOW);

LEDON = false;

}
if(readString.indexOf("L=4") > 0) {//rele ON

digitalWrite(led7, HIGH);
LEDONn = true;

}
if(readString.indexOf("L=5") > 0) {//rele OFF

digitalWrite(led7, LOW);
LEDONn = false;

}
if(readString.indexOf("L=6") > 0) {//rele ON

digitalWrite(led6, HIGH);
LEDN = true;

}
if(readString.indexOf("L=7") > 0) {//rele OFF

digitalWrite(led6, LOW);
LEDN = false;

}

if(readString.indexOf("L=8") > 0) { //rele tutti OFF

delay(10);tone1.play(850,140);

digitalWrite(led6, LOW);
delay(250);
digitalWrite(led7, LOW);
delay(250);
digitalWrite(led8, LOW);
LEDN = false;
LEDONn = false;
LEDON = false;
}

if(readString.indexOf("L=9") > 0) { //accendi solo tv

irsend.sendRaw(Samsung,68,38);
digitalWrite(led3, LOW);
delay(1000);
irsend.sendNEC(0xA55A38C7,32);
irsend.sendNEC(0xA55A38C7,32);
digitalWrite(led3, LOW);

irsend.sendRaw(dream,70,38);
irsend.sendRaw(box,72,38);
}

if(readString.indexOf("L=10") > 0) {//accendi tv + ampli + cancello
digitalWrite(led9, HIGH);
delay(1000);
digitalWrite(led9, LOW);
irsend.sendRaw(dream,70,38);
irsend.sendRaw(box,72,38);
irsend.sendRaw(Samsung,68,38);
delay(1000);
irsend.sendNEC(0xA55A38C7,32);
irsend.sendNEC(0xA55A38C7,32);

}
// COSTRUZIONE PAGINA HTML

// inizializzo pagina (da togliere se uso ajax)
// COSTRUZIONE PAGINA HTML

// inizializzo pagina (da togliere se uso ajax)
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("");
client.print("");

client.print(" FabryTerry Server Domotica ");
client.println(" ");
client.print("");
client.println(" "); //inizio pagina

client.println("

Temperatura ");
client.print(temperatureC);
client.println(" C

");

client.println("


");
client.println("

Apertura

"); //apricancello
client.println("

APRI

");

client.println("

Rele' n. 8

");
client.println("Accendi | Spegni"); //primo rele
if (LEDON) {
client.println("ON");
}
else
{

client.println("OFF");
}
client.println("


");

client.println("

Rele' n. 7

");
client.println("Accendi | Spegni");//secondo rele
if (LEDONn) {
client.println("ON");
}
else
{
client.println("OFF");
}
client.println("
");

client.println("

Rele' n. 6

");
client.println("Accendi | Spegni"); //terzo rele
if (LEDN) {
client.println("ON");
}
else
{
client.println("OFF");
}
client.println("
");

client.println("Accendi + cancello "); // apricancello piu televisione e ampli

client.println("Accendi ");//solo accendi tv
client.println("

ALL OFF

Spegni Tutto "); //spegni tutti i rele
client.println(" ");
client.println("");

readString="";
//fermo il client
client.stop();
}}}}}}

Read this before posting a programming question

anche il cross-posting è vietato. La tua altra discussione: http://arduino.cc/forum/index.php/topic,121342.0.html

Vedi di stare più attento!

Questo topic verrà cancellato.

Scusate,
Ho sbagliato spostando la sottodivisione e questa discussione é finita nella parte sbagliata.
L' ho messa nel posto giusto.
Ciao Uwe

A quest ora non analizzo il tuo codice. :wink: :wink: :sleeping: :sleeping:
Normalmente la cause di blocci all'apparenza incausati é un array dimensionato troppo piccolo oppure se cerchi di scrivere superado il valora massimo del indice del array.
La seconda causa é che il programma usa troppa memoria. Per capire quello e se hai a disposizione un Arduino MEGA prova di caricarlo su quello.

Ciao Uwe

Gli array statici che crei "bruciano" già 420 byte di SRAM.
A parte quello, vedo che includi molte librerie. Forse potrebbe davvero essere un problema di risorse esaurite, se tutto si blocca cliccando più volte via web: magari tutte quelle richieste esauriscono le risorse.

Prova intanto a fare un po' di debug via seriale. Inserisci in diversi punti dello sketch stampe sulla seriale di messaggi vari per verificare dove si blocca lo sketch.

Secondo me c'è incompatibilità con la libreria IR.
Ad esempio, hai disabilitato il blink sul pin 13?