Pages: [1]   Go Down
Author Topic: Arduino + Ethernet Shild  (Read 1302 times)
0 Members and 1 Guest are viewing this topic.
Milano, IT
Offline Offline
Newbie
*
Karma: 0
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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();
        }
      }
    }
  }
}



* funziona.tiff (13.25 KB, 287x256 - viewed 164 times.)

* nonfunziona.tiff (26.64 KB, 277x487 - viewed 152 times.)
Logged

0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10474
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sto provando io con la 1.0.4  ...

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

0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10474
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

puoi mettere un pò di serial print per debuggare dove si blocca, sempre se si blocca sempre nello stesso punto?
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Genova
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3391
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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);          
}
« Last Edit: April 08, 2013, 12:32:50 pm by pablos » Logged

no comment

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


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

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho aggiunto ...
Code:
 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:
#include <SD.h>
...perche' se lo faccio, non funge, ovvero il file html viene creato storto...
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3391
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Logged

no comment

Genova
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3391
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: April 08, 2013, 02:30:29 pm by pablos » Logged

no comment

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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






Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Genova
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3391
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley

saranno poi le librerie a decidere chi parla dei 2, l'importante è che non siano flottanti (in uno stato di indecisione)
« Last Edit: April 08, 2013, 04:19:02 pm by pablos » Logged

no comment

Offline Offline
Sr. Member
****
Karma: 0
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Genova
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3391
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se rileggi il mio messaggio, vedrai che ho scritto la stessa cosa.
può darsi .... facciamo che l'ho ripetuto senza leggere il tuo post  smiley-grin
Logged

no comment

Pages: [1]   Go Up
Jump to: