Go Down

Topic: Arduino + Ethernet Shild (Read 1 time) previous topic - next topic

dvluca

Buongiorno a tutti,
Cerco di muovere i primi passi per gestire il mio progetto in modo immediato via "web" (in realtà solo dalla mia rete).

Ho "scritto" (riadattato) un piccolo codice che funziona bene e male a singhiozzo.
Bene, io non mi spiego come una cosa possa funzionare 3 volte su 4 perchè di norma, o va o non va!

Non credo il problema sia software però lo spero, altrimenti la scheda....
Testato con Arduino Uno / Mega, ide 1.0.3
Mac Firefox, Ihone/Ipad Safari
Pc vari, cellulari vari...


Code: [Select]

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF };
byte ip[] = { 10, 77, 114, 50 };                                        // Adeguare alla vs. rete
EthernetServer server(80);
String leggidalweb;
byte t=3;
byte ur=3;

void setup()
{
 Ethernet.begin(mac, ip);
 Serial.begin(9600);          
 
}



void loop()
{
  EthernetClient  client = server.available();

 if (client) {
   boolean currentLineIsBlank = true;
 
   while (client.connected()) {
     if (client.available()) {
       char c = client.read();
       leggidalweb.concat(c);  
       if (c == '\n' && currentLineIsBlank) {
         //Serial.print(readString);
             
       if(leggidalweb.indexOf("on_1") > 0)    {Serial.println("out_1, on");   t=1;}    
       if(leggidalweb.indexOf("off_1") > 0)   {Serial.println("out_1, off");  t=2;}
       if(leggidalweb.indexOf("auto_1") > 0) {Serial.println("out_1, Auto"); t=3;}      
     
       if(leggidalweb.indexOf("on_2") > 0)     {Serial.println("out_2, on");   ur=1;}    
       if(leggidalweb.indexOf("off_2") > 0)    {Serial.println("out_2, off");  ur=2;}
       if(leggidalweb.indexOf("auto_2") > 0) {Serial.println("out_2, Auto"); ur=3;}        
 
       
       
       
       client.println("HTTP/1.1 200 OK");
       client.println("Content-Type: text/html");
       client.println();
       client.print("<html><head><title>ARDUINO Controllo WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
       client.print("<BR><BR>");
     
    client.print("<span> Attuatore 1 </span>");
       if (t==1) client.print("<input disabled=\"disabled\" maxLength=\"30\" size=\"9\" value=\"Acceso\" STYLE=\"background-color:#2EFE2E\"/>");  
       if (t==2) client.print("<input disabled=\"disabled\" maxLength=\"30\" size=\"9\" value=\"Spento\" STYLE=\"background-color:#FE2E2E\"/>");
       if (t==3) client.print("<input disabled=\"disabled\" maxLength=\"30\" size=\"9\" value=\"Auto\" STYLE=\"background-color:#00BFFF\"/>");
     
       client.print("<p><p/>");  
       client.print("<input type=\"button\" style=\"width:60px; height:40px\" value=\"On\" onclick =\" location.href='/?on_1'\">");
       client.print("<input type=\"button\" style=\"width:60px; height:40px\" value=\"Off\" onclick =\" location.href='/?off_1'\">");      
       client.print("<input type=\"button\" style=\"width:60px; height:40px\" value=\"Auto\" onclick =\" location.href='/?auto_1'\">");    
       client.println("<hr \"color:#00FF00\" size=\"1\">"); // Linea Orizzontale
       client.print("<p><p/>");
     
    client.print("<span> Attuatore 2 </span>");
       if (ur==1) client.print("<input disabled=\"disabled\" maxLength=\"30\" size=\"9\" value=\"Acceso\" STYLE=\"background-color:#2EFE2E\"/>");  
       if (ur==2) client.print("<input disabled=\"disabled\" maxLength=\"30\" size=\"9\" value=\"Spento\" STYLE=\"background-color:#FE2E2E\"/>");
       if (ur==3) client.print("<input disabled=\"disabled\" maxLength=\"30\" size=\"9\" value=\"Auto\" STYLE=\"background-color:#00BFFF\"/>");
     
       client.print("<p><p/>");  
       client.print("<input type=\"button\" style=\"width:60px; height:40px\" value=\"On\" onclick =\" location.href='/?on_2'\">");
       client.print("<input type=\"button\" style=\"width:60px; height:40px\" value=\"Off\" onclick =\" location.href='/?off_2'\">");      
       client.print("<input type=\"button\" style=\"width:60px; height:40px\" value=\"Auto\" onclick =\" location.href='/?auto_2'\">");    
       client.println("<hr \"color:#00FF00\" size=\"1\">"); // Linea Orizzontale
       client.print("<p><p/>");
     

     
     
       client.println("</body></html>");
       
       leggidalweb="";
       
       delay(1);
       client.flush();
       client.stop();
       }
     }
   }
 }
}



lesto

aggiorna all'ide 1.0.4, che c'è un problema con la malloc e le String

in oltre le stringhe lettile in f(), così non occupano RAM (altro possibilissimo problema)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

acik

Sto provando io con la 1.0.4  ...

Premendo velocemente sui pulsanti (nel browser) la Ethernet Shield va in palla e non funziona piu'.

lesto

puoi mettere un pò di serial print per debuggare dove si blocca, sempre se si blocca sempre nello stesso punto?
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pablos

#4
Apr 08, 2013, 07:14 pm Last Edit: Apr 08, 2013, 07:32 pm by pablos Reason: 1
La maggior parte dei problemi che si hanno con la ethernet shield sono causati dal fatto che la stessa scheda condivide l' ICSP dia per la comunicazione verso la rete che verso la SD
Il pin della SD è il 4
il pin della ETH è il 10
Il 4 il 10 e il 53 (per la mega) nel tuo sketch sono flottanti creando grossi problemi, in pratica i segnali non sanno da che parte andare!!
Questa è una delle cause (non l'unica) che porta al freeze lo shield, questi pin vanno sempre dichiarati e fissati quando si monta lo shield anche se la SD non la usiamo


metti questo e non avrai più problemi
Code: [Select]

#include <SD.h>

void setup()
{
delay(1000);
 pinMode(SS_PIN, OUTPUT);
 digitalWrite(SS_PIN, 1);
 pinMode(10, OUTPUT);
 digitalWrite(10, 1);
 pinMode(4, OUTPUT);  
 digitalWrite(4, 1);

 Ethernet.begin(mac, ip);
 Serial.begin(9600);          
}

no comment

acik



Il 4 il 10 e il 53 (per la mega) nel tuo sketch sono flottanti creando grossi problemi, in pratica i segnali non sanno da che parte andare!!
Questa è una delle cause (non l'unica) che porta al freeze lo shield, questi pin vanno sempre dichiarati e fissati quando si monta lo shield anche se la SD non la usiamo



Scusa ma... capisco i pin 4 e 10... ma il "pinMode(SS_PIN, OUTPUT);" a che serve ?

acik

Ho aggiunto ...
Code: [Select]
 pinMode(10, OUTPUT);
 digitalWrite(10, 1);
 pinMode(4, OUTPUT);  
 digitalWrite(4, 1);


... nel codice e funziona alla grande.
Ho provato a stressarlo con continue accensioni/spegnimenti ma non sono riuscito a bloccarlo !!!



Non ho messo ...
Code: [Select]
#include <SD.h> ...perche' se lo faccio, non funge, ovvero il file html viene creato storto...

pablos

Sono corrispondenze basta leggere i datasheet
NO mega                  mega 2560
slave reset: 10:               53
MOSI:         11:               51
MISO:         12:               50
SCK:           13:               52

Ma invece di rispondere con un altra domanda..... funziona o no con la modifica? sarebbe corretto che tu dessi un opinione sul risultato.... senza offese ovviamente :smiley-mr-green:


no comment

pablos

#8
Apr 08, 2013, 09:23 pm Last Edit: Apr 08, 2013, 09:30 pm by pablos Reason: 1
ho visto ora la nuova risposta....
Diciamo che mettere la SD.h è una predisposizione per ovviare a problemi successivi durante esperimenti vari
La gestione del pin SS_PIN si trova dentro la lib SD
no comment

acik

Stavo riflettendo su: "A cosa serve bloccare il PIN 4 come dice Pablo.... se non ho inserito nessuna MicroSD ??"
...
Ieri sera stavo facendo varie prove con la mia Ethernet Shield e vi ho messo dentro una MicroSD.
Non avendo "bloccato" il PIN 4, ovviamente la MicroSD andava a rompere alla Ethernet !!!

Chiedo umilmente venia...







acik

Comunque non mi spiego perche' includendo la libreria SD.h, lo sketch non funziona piu'.

Ho provato ad aggiungere la libreria SD.h nello sketch di esempio "WebServer" e non da nessun problema.....


Mah. Chi mi spiega l' arcano ???

acik


metti questo e non avrai più problemi
....


Da quello che vedo, la libreria Ethernet di per se' mette subito in OUTPUT il PIN del ETH CS. E lo tira subito su. Quindi in questo caso, non serve. Almeno con la IDE 1.0.4, con le altre non so.

Stesso vale al contrario: Nello sketch di esempio "CardInfo" c'e' scritto:
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.


Morale della favola:
Se usi la Ethernet, bisogna bloccare il PIN della SD.
Se usi SD, bisogna bloccare il pin della ETH.



Sarebbe stato bello che lo avessero scritto nello sketch di esempio Webserver... cosi' se qualcuno come me, una sera mette il cervello in sleep :-D....

pablos

#12
Apr 08, 2013, 10:49 pm Last Edit: Apr 08, 2013, 11:19 pm by pablos Reason: 1
Perchè continui a parlare di "bloccare" i pin 4 e 10 sono enable-disable, se voglio parlare con la SD metto il 4 a 0 e il 10 a 1 se voglio parlare con la ethernet metto il pin 4 a 1 e il 10 a 0

riassumendo
0 = enable
1 = disable
è scritto nelle librerie non l'ho inventato io

digitalWrite(10, 1); disabilito la eth allo start nel setup
digitalWrite(4, 1); disabilito la SD allo start nel setup
isoliamo entrambi i device tanto per restare sicuri :)

saranno poi le librerie a decidere chi parla dei 2, l'importante è che non siano flottanti (in uno stato di indecisione)
no comment

acik

Se rileggi il mio messaggio, vedrai che ho scritto la stessa cosa.

pablos


Se rileggi il mio messaggio, vedrai che ho scritto la stessa cosa.
può darsi .... facciamo che l'ho ripetuto senza leggere il tuo post  :D
no comment

Go Up