Pages: [1]   Go Down
Author Topic: [Risolto] [Wifi Shield] questo led non mi ubbidisce...  (Read 1029 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Uffa sono 2 giorni che non riesco a risolvere questo comportamento...

...lo sketch consiste in un web server, il quale mi mostra attraverso una pagina web il valore della fotoresistenza. E fin qui tutto bene, il valore viene visualizzato correttamente e aggiornato ogni 5 secondi.
Nello sketch però dico anche al led di accendersi quando il valore della fotoresistenza supera un certo valore, e questo non accade!  smiley-sad
Osservo invece che il led si accende e spegne ad ogni refresh della pagina, indipendentemente dal valore della fotoresistenza e non capisco perchè.

Lo sketch è il seguente (in pratica ho solo modificato il file "WifiWebServer" di esempio):
Code:
#include <SPI.h>
#include <WiFi.h>


char ssid[] = " :-P ";  //  your network SSID (name)
char pass[] = " :-pPp ";   // your network password
int keyIndex = 0;  // your network key Index number (needed only for WEP)
int sensorValue;
const int analogPin = A0;
const int ledPin = 13;
const int threshold = 600;

int status = WL_IDLE_STATUS;

WiFiServer server(80);

void setup() {
  pinMode(13, OUTPUT);

  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  
  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while(true);
  }
  
  // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:    
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
  }
  server.begin();
  // you're connected now, so print out the status:
  printWifiStatus();
}


void loop() {
  // listen for incoming clients
  WiFiClient 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);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          
          sensorValue = analogRead(analogPin);
          if(sensorValue > threshold){
            digitalWrite(ledPin, HIGH);
          } else digitalWrite(ledPin, LOW);
            
          
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          
          client.println("<p>Valore del sensore: ");
          client.print(sensorValue);
          client.print("</p>");
          client.println("</body></html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
      // close the connection:
      client.stop();
      Serial.println("client disonnected");
  }
}


void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

Non capisco, il codice anche confrontandolo con ciò che ho trovato in giro su internet mi sembra ok, dov'è che sbaglio?
« Last Edit: November 10, 2012, 12:01:27 pm by abstract » Logged

IDE 1.0.5 - Arduino Uno R3 - Arduino Wifi Shield - Arduino GSM Shield -  IMU Digital Combo Board 6 DOF ITG3200/ADXL345

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

Quote
questo led non mi ubbidisce...
piccolo LED cattivo, molto cattivo!!  smiley-wink smiley-wink smiley-wink

Il LED si accende a ogni ricarica della pagina perché hai messo il controllo nella parte di codice che viene eseguiro quando viene richiesto una pagina.

Se vuoi che il LED viene aggiornato a ogni ciclo loop() devi mettere

Code:
sensorValue = analogRead(analogPin);
          if(sensorValue > threshold){
            digitalWrite(ledPin, HIGH);
          } else digitalWrite(ledPin, LOW);

fuori da ogni condizione.

Ciao Uwe
 
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao e grazie per aver risposto!  smiley

Ho messo queste righe di codice

Code:
  sensorValue = analogRead(analogPin);
  if(sensorValue > threshold){
  digitalWrite(ledPin, HIGH);
  } else digitalWrite(ledPin, LOW);

subito dopo loop() ma non va nemmeno ora. In effetti avevo già fatto questo tentativo ma adesso il led si accende e spegne velocemente...ad ogni loop sembra, perchè non fa nemmeno in tempo ad accendersi pienamente. Insomma questo if() proprio non se lo fila smiley-sad
Logged

IDE 1.0.5 - Arduino Uno R3 - Arduino Wifi Shield - Arduino GSM Shield -  IMU Digital Combo Board 6 DOF ITG3200/ADXL345

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

Che segnale analogico stai leggendo?
Ciao Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

L'ingresso A0 è collegato ad un piedino della fotoresistenza e ottengo un valore (tra 0 e 1023) che mi viene visualizzato sula pagina web.

Aggiungo i collegamenti...
« Last Edit: November 10, 2012, 06:50:47 am by UweFederer » Logged

IDE 1.0.5 - Arduino Uno R3 - Arduino Wifi Shield - Arduino GSM Shield -  IMU Digital Combo Board 6 DOF ITG3200/ADXL345

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

Sí, lo avevi scritto ma mi ero scordato.
Scusami.

Presumo che hai collegato i 5V e la massa sulla breadboard.

Prova a farti stampare i valori letti tramite la seiale sul terminale. Cosí Ti rendi conto che numeri arrivano.
Se i valori sono abbastanza costanti, ma intorno al threshold aggiungi un isteresi:
accendi il LED a threshold+isteresi e lo spegni a threshold-isteresi dove per esempio isteresi potrebbe avere un valore da 10.

Ciao Uwe
« Last Edit: November 10, 2012, 06:58:47 am by uwefed » Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 103
Posts: 6580
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se hai collegato il led al pin 13 e usi la wifi shield, lo credo bene che va per i fatti suoi.  smiley-mr-green smiley-mr-green
Cambia pin che non sia 0,1,10,11,12 e 13.
Logged

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

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non so più che pesci pigliare  smiley-cry

Avevo letto in effetti qualcosa a riguardo di alcni pin... e ora sto usando il pin 7 ma non funziona ancora a dovere.
Adesso quando copro (faccio ombra) la fotoresistenza il led passa da spento ad acceso, ma poi si blocca tutto. La pagina web non viene più aggiornata ed il led rimane acceso anche se dovrebbe spegnersi perchè gli faccio luce.

Ri-pubblico il codice che allo stato attuale è il seguente:

Code:
#include <SPI.h>
#include <WiFi.h>


char ssid[] = "....";  //  your network SSID (name)
char pass[] = "....";   // your network password
int keyIndex = 0;  // your network key Index number (needed only for WEP)
int sensorValue;
const int analogPin = 0;
const int ledPin = 7;
const int threshold = 600;

int status = WL_IDLE_STATUS;

WiFiServer server(80);

void setup() {
  pinMode(ledPin, OUTPUT);
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
 
  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while(true);
  }
 
  // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:   
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
  }
  server.begin();
  // you're connected now, so print out the status:
  printWifiStatus();
}


void loop() {
  sensorValue = analogRead(analogPin);
  if(sensorValue >= threshold){
  digitalWrite(ledPin, HIGH);
  }
  if(sensorValue < threshold){
    digitalWrite(ledPin, LOW);
  }
 
  // listen for incoming clients
  WiFiClient 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);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
               
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
         
          client.println("<p>Valore del sensore: ");
          client.print(sensorValue);
          client.print("</p>");
         
          client.println("</body></html>");
          break;
        }
       
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
       
      }
    }
    // give the web browser time to receive the data
    delay(1);
      // close the connection:
      client.stop();
      Serial.println("client disonnected");
  }
}


void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

Logged

IDE 1.0.5 - Arduino Uno R3 - Arduino Wifi Shield - Arduino GSM Shield -  IMU Digital Combo Board 6 DOF ITG3200/ADXL345

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

Se hai collegato il led al pin 13 e usi la wifi shield, lo credo bene che va per i fatti suoi.  smiley-mr-green smiley-mr-green
Cambia pin che non sia 0,1,10,11,12 e 13.

ups, a questo non avevo pensato che il pin 13 viene usato per il SPI della Ethernet.
bravo PaoloP

@abstract hai messo una resistenza in serie al LED?

Ciao Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
su http://arduino.cc/en/Guide/ArduinoWiFiShield (speriamo che il link sia venuto bene ..) trovi i piedini da non usare ed il 7 e' proprio tra questi ....
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@mdpgit
Sei un grande! Era proprio quello il problema, è bastato usare il pin 8 anzichè il 7 e tutto funziona come deve!
Eppure c'ero già passato nel link che mi hai postato, ma evidentemente troppo di fretta  smiley-sweat

Grazie a tutti x l'aiuto, a buon rendere!  smiley-wink
Logged

IDE 1.0.5 - Arduino Uno R3 - Arduino Wifi Shield - Arduino GSM Shield -  IMU Digital Combo Board 6 DOF ITG3200/ADXL345

Pages: [1]   Go Up
Jump to: