Pages: [1]   Go Down
Author Topic: problema Arduino si blocca  (Read 591 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 38
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley


#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("<html>");
           client.print("<head>");
           
           client.print(" <title>FabryTerry Server Domotica</title> ");
         client.println(" <meta name='viewport' content='width=device-width, user-scrollbar=no'>");
          client.print("</head>");
           client.println(" <body>"); //inizio pagina
           
            client.println("<p>Temperatura  ");
        client.print(temperatureC);
        client.println(" C</p>");
       
                   client.println("<hr >");
          client.println("<h3>Apertura</h3>"); //apricancello
          client.println(" <h3><a href='/?L=1'>   APRI   </a> </h3>");

          client.println("<h3>Rele'  n. 8</h3>");
          client.println("<a href='/?L=2'>Accendi</a> | <a href='/?L=3'>Spegni</a></h2>"); //primo rele
          if (LEDON) {
              client.println("<span style='color:green; font-weight:bold;'>ON</span></font>");
            }
            else
            {
             
             
              client.println("<span style='color:grey; font-weight:bold;'>OFF</span></font>");
          }
          client.println("<hr >");

          client.println("<h3>Rele'  n. 7</h3>");
          client.println("<a href='/?L=4'>Accendi</a> | <a href='/?L=5'>Spegni</a>");//secondo rele
           if (LEDONn) {
              client.println("<span style='color:green; font-weight:bold;'>ON</span></font>");
            }
            else
            {
              client.println("<span style='color:grey; font-weight:bold;'>OFF</span></font>");
          }
          client.println("<hr >");

           client.println("<h3>Rele'  n. 6</h2>");
           client.println("<a href='/?L=6'>Accendi</a> | <a href='/?L=7'>Spegni</a>"); //terzo rele
          if (LEDN) {
              client.println("<span style='color:green; font-weight:bold;'>ON</span></font>");
            }
            else
            {
              client.println("<span style='color:grey; font-weight:bold;'>OFF</span></font>");
          }
          client.println("<hr >");

           client.println("<a href='/?L=10'>Accendi + cancello</a> "); // apricancello piu televisione e ampli
           
           client.println("<a href='/?L=9'>Accendi</a> ");//solo accendi tv
                      client.println("<h3>ALL OFF<h3><a href='/?L=8'>Spegni Tutto</a> "); //spegni tutti i rele
                                 client.println(" </body>");
          client.println("</html>");

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

Global Moderator
Offline Offline
Brattain Member
*****
Karma: 480
Posts: 18721
Lua rocks!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Read this before posting a programming question
Logged


Global Moderator
Milano, Italy
Offline Offline
Edison Member
*****
Karma: 19
Posts: 1175
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

F

Global Moderator
Offline Offline
Newbie
*****
Karma: 13
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 257
Posts: 21466
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A quest ora non analizzo il tuo codice.  smiley-wink smiley-wink smiley-sleep smiley-sleep
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
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 327
Posts: 22635
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7079
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: [1]   Go Up
Jump to: