Pages: [1] 2 3 4   Go Down
Author Topic: Sensors.requestTemperatures()-pag 3-rallenta molto il ciclo in wifi... perché?  (Read 1933 times)
0 Members and 1 Guest are viewing this topic.
Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao a tutti,

non riesco poprio a farla funzionare questa shield wifi.... vi posto il tentativo (non funzionante) che mi sta dando delle belle rogne...

questa è la shield
http://www.open-electronics.org/arduino-wifi-shield/

questo il codice

Code:





#include <WiServer.h>
#include <ShiftRegLCD.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "Wire.h"  
#define DS1307_I2C_ADDRESS 0x68 //set rtc  
#define ONE_WIRE_BUS 4 //Define the pin of the DS18B20
#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2





altri int.... tolti per fare spazio

int blue = 3;              // blue LEDs connected to digital pin 3 (pwm)
int white = 9;            // white LEDs connected to digital pin 11 (pwm)
int ledlcd = A0;            // led lcd connected to analog pin 0
int livellob = A1;
int livellom = A2;
int livelloa = A3;


ShiftRegLCD srlcd(7, 8, 6, 2);

OneWire oneWire(ONE_WIRE_BUS);  
DallasTemperature sensors(&oneWire);



/*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  RTC 1307  |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/



byte decToBcd(byte val)    // Convert normal decimal numbers to binary coded decimal
{
  return ( (val/10*16) + (val%10) );
}


byte bcdToDec(byte val)    // Convert binary coded decimal to normal decimal numbers
{
  return ( (val/16*10) + (val%16) );
}

etc etc...



/*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  ONESECOND --> OPERAZIONI CICLICHE RIPETUTE OGNI SECONDO|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/



void onesecond() //function that runs once per second while program is running
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  srlcd.setCursor(0, 0);
 
      srlcd.print(hour, DEC);
    
  
  srlcd.print(":");
  if (minute < 10) {
    srlcd.print("0");
  }
  srlcd.print(minute, DEC);
 
  srlcd.setCursor(8, 0);
  if (dayOfMonth < 10) {
    srlcd.print("0");
  }
  srlcd.print(dayOfMonth, DEC);
  
  srlcd.print("/");
  if (month < 10){
    srlcd.print("0");
  }
  srlcd.print(month, DEC);
  srlcd.print("/");
  srlcd.print(year, DEC);
  
  
  
  
 srlcd.setCursor(13, 3);
  if (digitalRead(livellob) == LOW){
    srlcd.write(1);
  }
  else {
    srlcd.write(0);
  }
 
  srlcd.setCursor(14, 3);
  if (digitalRead(livellom) == LOW){
    srlcd.write(1);
  }
  else {
   srlcd.write(0);
  }
   srlcd.setCursor(15, 3);
  if (digitalRead(livelloa) == LOW){
    srlcd.write(1);
  }
  else {
    srlcd.write(0);
  }
 // lcd.print(":");
  //if (second < 10) {
   // lcd.print("0");
 // }
 // lcd.print(second, DEC);
  
 // lcd.print(" ");
 WiServer.server_task();
 
 // delay(10);
  delay(1000);
}

 



/*||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||   WIFI CONFIGURAZIONE|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/


// Wireless configuration parameters ----------------------------------------
unsigned char local_ip[] = {192,168,1,120}; // IP address of WiShield
unsigned char gateway_ip[] = {192,168,1,1}; // router or gateway IP address
unsigned char subnet_mask[] = {255,255,255,0}; // subnet mask for the local network
const prog_char ssid[] PROGMEM = {"Cisco Home 2,4 gHz"}; // max 32 bytes

unsigned char security_type = 3; // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2

// WPA/WPA2 passphrase
const prog_char security_passphrase[] PROGMEM = {"15342985dresa"}; // max 64 characters

// WEP 128-bit keys
// sample HEX keys//
prog_uchar wep_keys[] PROGMEM = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, // Key 0
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 1
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 2
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Key 3
};

// setup the wireless mode
// infrastructure - connect to AP
// adhoc - connect to another WiFi device
unsigned char wireless_mode = WIRELESS_MODE_INFRA;

unsigned char ssid_len;
unsigned char security_passphrase_len;
// End of wireless configuration parameters ----------------------------------------


// This is our page serving function that generates web pages
boolean sendMyPage(char* URL) {
  
    // Check if the requested URL matches "/"
    if (strcmp(URL, "/") == 0) {
        // Use WiServer's print and println functions to write out the page content
        
         WiServer.print("<html>");
        WiServer.print("Hello World!");
        WiServer.print("</html>");
      
    
        
    
        // URL was recognized
        return true;
    }
    // URL not found
    return false;
}




/*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  S E T U P  |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/


void setup() {
 // pinMode(ledPin1, OUTPUT);    // set the digital pin as output:
 // pinMode(ledPin2, OUTPUT);    // set the digital pin as output:
  pinMode(ledlcd, OUTPUT);      // Set analog pin 0 as a output
  pinMode(livellob, INPUT);
  pinMode(livellom, INPUT);
  pinMode(livelloa, INPUT);
  digitalWrite(livellob, HIGH);
  digitalWrite(livellom, HIGH);
  digitalWrite(livelloa, HIGH);
  
 // pinMode(fuge, OUTPUT);      // Set analog pin 1 as a output
 // pinMode(moon, OUTPUT);      // Set analog pin 3 as a output
  sensors.begin();             // Start up the DS18B20 Temp library
  
  
  // wifi//
  
 // Initialize WiServer and have it use the sendMyPage function to serve pages
  WiServer.init(sendMyPage);
  
  // Enable Serial output and ask WiServer to generate log messages (optional)
  //Serial.begin(57600);
 // WiServer.enableVerboseMode(true);

  /*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  SETUP DISPLAY |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/




/*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  L O O P |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/




void loop()
{
  onesecond();
 // relay2();
 // relay1();

// Run WiServer
  




  /*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  FUNZIONI DIMMING|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/

  




  /*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  LOOP CRESCENTE|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/



  /*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  LOOP MANTENIMENTO|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/






  /*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  LOOP DECRESCENTE|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/



 
  //*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  N O T T E |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/


}  // END LOOP


il risultato che ottengo è questo:

una volta caricato il programma arduino non da segni di vita per circa 30 secondi, dopodiché parte ma le sonde di temperatura non le legge ed il wifi non si aggancia alla rete nonostante sia a 2 metri dal router...

Forse non vanno uniti in questo modo i due programmi?

Ciao a tutti
Luca
« Last Edit: February 24, 2012, 02:42:59 pm by luca56 » Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

vi ricordo quali sono le connessioni:

A0 --> retroilluminazione lcd
A1 --> SENSORE GALLEGGIANTE 1
A2 --> SENSORE GALLEGGIANTE 2
A3 --> SENSORE GALLEGGIANTE 3
A4 --> RTC
A5 --> RTC

13 / 10 --> WIFI SHIELD
9 --> PWM 1
8 --> SHIFT REGISTER
7 --> SHIFT REGISTER
6 --> SHIFT REGISTER
5 --> SERVO MOTORE
4 --> I2C SONDE DS18B20
3 --> PWM 2
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6984
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A parte che nel codice ci sono commenti senza il // e il compilatore è un po' schizzinoso.
Dovresti per prima cosa staccare tutti i sensori e lcd.
Attaccare solo la wifi shield ad arduino e provare solo la parte di codice per ottenere l'indirizzo ip e testare le comunicazioni con il pc tramite seriale.
Distribuisci lungo il codice dei Serial.println("cosa stai facendo?"); per capire dove si blocca e restituire i risultati delle funzioni.

Come sei sicuro che la wifi funziona aggiungi le altre parti (hardware e software), una alla volta, finché non trovi tutto funzionante.
Logged

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

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si le parti le ho dovute togliere perché altrimenti non sarei riuscito ad inserirlo nel post... supera i 9500 caratteri.... dal punto di vista software comunque non mi da problemi, lo verifica e lo compila...

separatamente i programmi funzionano entrambi: sia il mio che la wifi shield. il problema sorge quando li unisco e pensavo che fosse solo un problema di "collocamento" degli spezzoni di codice della wifi shield...

Logged

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2295
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
non ho guardato il codice, ma la mappatura.
Hai verificato l'utilizzo dei pin?

Quote
A0 --> retroilluminazione lcd
A1 --> SENSORE GALLEGGIANTE 1
A2 --> SENSORE GALLEGGIANTE 2
A3 --> SENSORE GALLEGGIANTE 3
A4 --> RTC
A5 --> RTC

13 / 10 --> WIFI SHIELD
9 --> PWM 1
8 --> SHIFT REGISTER
7 --> SHIFT REGISTER
6 --> SHIFT REGISTER
5 --> SERVO MOTORE
4 --> I2C SONDE DS18B20
3 --> PWM 2

il pin digitale 4 , guardando lo schema della WIFI shield, è in uso dalla stessa (gestione SD).
Sicuro non dia problemi?
Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

anche io avevo il dubbio così ho provato a lasciare libero il pin 4 spostando le sonde i2c sul pin 5 ma il risultato è sempre lo stesso.

mi correggo però: il codice qui sotto mi da solo due problemi:

dopo averlo caricato su arduino il display rimane spento per una trentina di sec, poi parte e anche le sonde restituiscono la temperatura nonostante siano sul pin 4

è il wifi che non va proprio, si connette ma se visito l'ip 192.168.1.120 non c'è nulla, mi segnala errore server irraggiungibile

deve trattarsi per forza di un problema di programma
« Last Edit: February 20, 2012, 09:49:37 am by luca56 » Logged

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2295
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao
Quote
è il wifi che non va proprio, non si aggancia alla rete
se invece utilizzi il wifi da solo, con quella configurazione, funziona bene?

Poi ti chiedo una cosa; perchè setti una password sia per WPA2 (la rete l'hai settata così) che per WEP?

Code:
const prog_char security_passphrase[] PROGMEM = {"15342985dresa"}; // max 64 characters

// WEP 128-bit keys
// sample HEX keys//
prog_uchar wep_keys[] PROGMEM = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, // Key 0
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 1
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Key 2
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Key 3
};

nel loop hai avviato il wifi server?

Code:
WiServer.server_task();

hai provato ad abilitare il wifi server in verbose mode, nel setup?

Code:
WiServer.enableVerboseMode (true);

Poi, qualche considerazione personale: a me piace mettere tutte le dichiarazioni nella parte alta del codice, e tutte le funzioni aggiuntive dopo setup e loop.
In questo modo so che se cerco una variabile, la troverò sempre e solo in un posto, così come per le funzioni base e le aggiuntive - cosa che agevola molto la lettura del codice e soprattutto il debug...  smiley-razz

Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grazie dell'intervento...

il programma della shield wifi l'ho preso e copiato così com'era, per quello ci sono sia la wpa2 (la mia) che la wep (ora ho tolto)... e da solo funziona senza problemi

anche il mio programma da solo funziona e funziona anche se ci unisco quello del wifi: ci mette una trentina di secondi a caricarsi ma dopo quel lasso di tempo il display si accende e mi restituisce tutti i dati... insomma funziona in tutto.


il wifi invece no, funziona unicamente se è da solo. Proprio adesso ho provato a liberare anche il pin 4 e 9 ma nulla: ho provato a chiudere il contatto sulla shield del led di "segnalazione aggancio alla rete" e dopo quella 30ina di secondi si accende quindi dovrebbe essere connesso però non ho risposta all'indirizzo da me settato!


wifi server nel loop:

ho provato ad aggiungerlo sia al loop principale sotto al onesecond() che ad implementarlo direttamente in onesecond ma il risultato è lo stesso

verbose mode: non so cosa intendi dire, anche qui mi sono limitato a lasciare tutto come ho trovato nel codice d'esempio e le due stringhe sono abilitate... non sono rese commento..:
Code:
WiServer.init(sendMyPage);
 
  // Enable Serial output and ask WiServer to generate log messages (optional)
  Serial.begin(57600);
  WiServer.enableVerboseMode(true);

ho anche chiamato futurashop per avere conferma dei pin utilizzati dalla shield... e mi hanno confermato 10 a 13 digitali + 9 per il led di segnalazione (a ponticello innestato) + eventualmente il 4 per la micro sd

non so proprio più cosa tentare, è da stamattina che giro e rigiro il codice ed il risultato non cambia... ma è possibile?!! poi senz'altro sarà una cavolata
Logged

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2295
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
mi sa che il problema è proprio la funzione onesecond.

Fai questa prova: commenta tutta la parte di scrittura su LCD e il delay, lasciando solo

Code:
  WiServer.server_task();

Questo perchè nella onesecond tu usi un delay: questa funzione blocca l'esecuzione di tutto il codice per il tempo  indicato.
Se vuoi gestire degli intervalli, utilizza piuttosto millis(), o funzioni come Metro et similia
Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho provato... non risolve nulla...
Logged

0
Offline Offline
Edison Member
*
Karma: 24
Posts: 2295
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Come stai alimentando il tutto?
Come sei messo con l'utilizzo di memoria?
Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

alimentatore esterno da 10v e lo sketch è di 23274 bytes.

ho fatto delle prove anche con un alimentatore a 12v sempre e comunque connesso tramite jack su Arduino a 2 metri dal router con tutte le protezioni disattivate tranne chiave wpa2 (firewall disatt., Passthrough VPN tutto disattivato..)

 
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dal router riesci a vedere il client (wifi-shield) associato?
Se dopo la presunta connessione del wifi con il router provi a fare ping sull'indirizzo 192.168.1.120 ti risponde?
Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ah caspita no, non lo vede! ho appena provato a caricare l'esempio della libreria (funzionante) e nonostante visualizzo Hello World digitando l'ip, dalle pagine di configurazione del router non vedo la shield... facendo il ping non mi restituisce niente...
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

aspetta però,... questo potrebbe anche voler dire che il wifishield non gestisce il prtocollo icmp (quello del ping), se vedi il messaggio servito dal webserver tramite il pc allora funziona. (io non ho quello shield)
Partendo quindi dallo sketch funzionante inizia ad aggiungere il codice relativo alla gestione degli altri componenti , uno per volta e vedi fino a che punto continua a funzionare.
Oppute scrivi dei messaggi traccianti sulla seriale relativi alle varie funzioni e vedi fino a che messaggio ricevi.
Logged

Pages: [1] 2 3 4   Go Up
Jump to: