Pages: 1 [2] 3 4   Go Down
Author Topic: Sensors.requestTemperatures()-pag 3-rallenta molto il ciclo in wifi... perché?  (Read 2029 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

secondo me c'è qualche conflitto con i pin.... ho fatto questa prova:

se carico l'esempio simpleserver della libreria --> funziona

se poi, lasciando sempre lo stesso codice, aggancio sopra alla wifi shield il mio circuito stampato su cui ci sono lo shift register, l'rtc etc etc non funziona più....  io sono comunque sicuro che tutti i collegamenti rispettino lo schema (l'ho progettata su fritzing e poi stampata a casa... per forza funziona)


se poi la stacco, la pagina "hello world" non la rivedo finchè non faccio un reset ad arduino...

allora mi chiedo: è vero che ho avuto conferma dei pin utilizzati dalla shield (10 a 13 + eventualmente 4 e 9) ma come posso verificare fisicamente quali pin utilizzi?

non saprei, pensavo ad un comando seriale che mi indicasse la presenza di tensione o comunque di movimento su ogni singolo pin... così mi accorgerei subito se c'è qualcosa che non va...
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

Si, ma il resto del codice funziona?
Logged

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

si il mio si... ricapitolando ognuno dei due codici funziona; se li unisco funziona solo il mio dopo una trentina di secondi dal riavvio di arduino. il wifi shield, invece, segna l'aggancio alla rete ma non crea la pagina web.
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

Se non pubblichi il codice sano è difficile che ci capiamo qualcosa, potrebbe essere di tutto, da un delay nel posto sbagliato ad un conflitto di librerie o un ram overflow.
Logged

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

ok, questo è l'esempio simpleserver
Code:

/*
 * A simple sketch that uses WiServer to serve a web page
 */


#include <WiServer.h>

#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2

// 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 = {"xxx"}; // 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;
}


void setup() {
  // 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);
}

void loop(){

  // Run WiServer
  WiServer.server_task();
 
  delay(10);
}
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

e questo è quello che funziona no?
Logged

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

e questo il mio codice
Code:


#include <ShiftRegLCD.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "Wire.h"  
#define DS1307_I2C_ADDRESS 0x68  
#define ONE_WIRE_BUS 9



/*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  L E D   D I M M I N G   P A R T  |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
/*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  F A D E S   I N   A N D   O U T  |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/



int blueramptime = 5 ;    // time for blue LEDs to dim on and off in minutes
int whiteramptime = 5 ;  // time for white LEDs to dim on and off in minutes
int bluemin = 0 ;          // minimmum dimming value of blue LEDs, range of 0-255
int bluemax = 255 ;        // maximum dimming value of blue LEDs, range of 0-255
int whitemin = 0 ;         // minimum dimming value of white LEDs, range of 0-255
int whitemax = 255 ;       // maximum dimming value of white LEDs, range of 0-255
int photoperiod = 720 ;    // amount of time array is on at full power in minutes
int ontime = 10 ;          // time of day (hour, 24h clock) to begin photoperiod fade in
int blue = 3;              // blue LEDs connected to digital pin 3 (pwm)
int white = 5;            // white LEDs connected to digital pin 11 (pwm)
int ledlcd = A0;            // Lcd backlight relay connected to analog pin 0
int livellob = A1;
int livellom = A2;
int livelloa = A3;

int bluepercent[11] = { 0, 26, 52, 78, 103, 128, 154, 180, 205, 230, 255 };    
int whitepercent[11] = { 0, 26, 52, 78, 103, 128, 154, 180, 205, 230, 255 };  

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

byte cursorevuoto[8] = {
    B11111,
    B10001,
    B10001,
    B10001,
    B10001,
    B10001,
    B10001,
    B11111
};

byte cursorepieno1[8] = {
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111
};


// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.  
DallasTemperature sensors(&oneWire);

/*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  R T C   C L O C K   D S 1 3 0 7  |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/



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) );
}

// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers
void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.send(0);
  Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock
  Wire.send(decToBcd(minute));
  Wire.send(decToBcd(hour));   // If you want 12 hour am/pm you need to set
  // bit 6 (also need to change readDateDs1307)
  Wire.send(decToBcd(dayOfWeek));
  Wire.send(decToBcd(dayOfMonth));
  Wire.send(decToBcd(month));
  Wire.send(decToBcd(year));
  Wire.endTransmission();
}

// Gets the date and time from the ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  // Reset the register pointer
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // A few of these need masks because certain bits are control bits
  *second = bcdToDec(Wire.receive() & 0x7f);
  *minute = bcdToDec(Wire.receive());
  *hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
  *dayOfWeek = bcdToDec(Wire.receive());
  *dayOfMonth = bcdToDec(Wire.receive());
  *month = bcdToDec(Wire.receive());
  *year = bcdToDec(Wire.receive());
}



/*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  D E F I N E  :  O N E S E C O N D |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/

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);
  }

  delay(1000);
}

 
Logged

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

e la seconda parte
Code:

/*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  D E F I N E  :  L C D   O N |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
void ledlcdOn()
{
  digitalWrite(ledlcd, HIGH);  
 // lcd.setCursor(17, 3);
 // lcd.print("On ");
  //analogWrite(fan, 255);
    
}
/*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  D E F I N E  :  L C D   O F F |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/
void ledlcdOff()
{
  digitalWrite(ledlcd, LOW);
 // lcd.setCursor(17, 3);
 // lcd.print("Off");
    //analogWrite(fan, 0);
    
}

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


void setup() {
  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);
  sensors.begin();             // Start up the DS18B20 Temp library

  /*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  S E T U P - D I S P L A Y |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/



  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  Wire.begin();

  second = 00;
  minute = 15;
  hour = 20;
  dayOfWeek = 25;  // Sunday is 0
  dayOfMonth = 4;
  month = 4;
  year = 11;
  
  //Use the next line for setting the clock
  //setDateDs1307(0, 50, 14, 5, 17, 2, 12);

  analogWrite(blue, bluemin);
  analogWrite(white, whitemin);
  srlcd.createChar(0, cursorevuoto);
  srlcd.createChar(1, cursorepieno1);

  srlcd.setCursor(11, 1);
  srlcd.print("B:");
  srlcd.print(33*bluemin/85);
  srlcd.setCursor(0, 1);
  srlcd.print("W:");
  srlcd.print(33*whitemin/85);
  srlcd.setCursor(6, 1);
  srlcd.print("led");
  srlcd.setCursor(11, 3);
  srlcd.print("Ro");
  
}




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




void loop()
{
  WiServer.server_task();
  onesecond();


  /*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  L O O P - D I M   F U N C T I O N |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/

  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  int daybyminute = ((hour * 60) + minute); //converts time of day to a single value in minutes
      

  int bluerampup;
     if (daybyminute >= (ontime*60))  
       bluerampup = (((ontime*60) + blueramptime) - daybyminute);
     else
       bluerampup = blueramptime;
        
  int whiterampup;
    if (daybyminute >= (ontime*60 + blueramptime))  
       whiterampup = (((ontime*60) + blueramptime + whiteramptime) - daybyminute);
     else
       whiterampup = whiteramptime;

  int whiterampdown;
    if (((ontime * 60) + photoperiod + blueramptime + whiteramptime) <= daybyminute)
      whiterampdown = (((ontime*60) + photoperiod + blueramptime + 2*whiteramptime) - daybyminute);
    else
      whiterampdown = whiteramptime;
      
  int bluerampdown;
    if (((ontime * 60) + photoperiod + blueramptime + 2*whiteramptime) <= daybyminute)
      bluerampdown = (((ontime*60) + photoperiod + 2*blueramptime + 2*whiteramptime) - daybyminute);
    else
      bluerampdown = blueramptime;






  /*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  L O O P - F A D E  I N |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/


 if (daybyminute >= (ontime*60))
  {  
    if (daybyminute <= ((ontime*60) + blueramptime + (whiteramptime/10*9))) //if time is in range of fade in, start fading in + (whiteramptime/10*9)
    {
      // Turn the lcdbkl on.
      ledlcdOn();
      
      for (int i = 1; i <= 10; i++) // setting ib value for 10% increment. Start with 0%  
      {  
        analogWrite(blue, bluepercent[i]);  
        srlcd.setCursor(13, 1);
        srlcd.print(i);
        srlcd.print(" ");  
      
        int countdown = ((bluerampup*60)/10); // calculates seconds to next step
        while (countdown>0)
          {
          onesecond(); // updates clock once per second
          countdown--;
        }
      }      

      // fade white LEDs in from min to max.
      for (int i = 1; i <= 10; i++) // setting i value for 10% increment. Start with 0%
      {  
        analogWrite(white, whitepercent[i]);  
        srlcd.setCursor(2, 1);
        srlcd.print(i);
        srlcd.print(" ");  

        int countdown = ((whiterampup*60)/10); // calculates seconds to next step
        while (countdown>0)
        {
          onesecond(); // updates clock once per second
          countdown--;  
        }
      }  
    }
  }


  /*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  L O O P - M A X  V A L U E |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/



 if (daybyminute >= ((ontime * 60) + blueramptime + whiteramptime))  
  {  
    if ( daybyminute < ((ontime * 60) + blueramptime + whiteramptime + photoperiod)) // if time is in range of photoperiod, turn lights on to maximum fade value
    {
      // Turn the lcdbkl on.
      ledlcdOn();
      
      analogWrite(blue, 255);
        srlcd.setCursor(13, 1);
        srlcd.print(10);
        srlcd.print(" ");
      analogWrite(white, 255);  
        srlcd.setCursor(2, 1);
        srlcd.print(10);
        srlcd.print(" ");  
      
    }  
  }



  /*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  L O O P - F A D E  O U T |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/



  if (((ontime * 60) + photoperiod + blueramptime + whiteramptime) <= daybyminute)
  {  
    if (((ontime * 60) + photoperiod + whiteramptime + 2*blueramptime + (blueramptime/10*9)) >= daybyminute)
    {
      // Turn the lcdbkl on.
      ledlcdOn();
  
      
      // fade white LEDs out from max to min in increments of 1 point:
      for (int i = 10; i >= 0; i--) // setting i value for 10% increment. Start with 10%
      {  
        analogWrite(blue, 255);
        srlcd.setCursor(13, 1);
        srlcd.print(10);
        srlcd.print(" ");  
        
        analogWrite(white, whitepercent[i]);  
        srlcd.setCursor(2, 1);
        srlcd.print(i);
        srlcd.print(" ");  

        int countdown = ((whiterampdown*60)/10); // calculates seconds to next step
        while (countdown>0)
        {
          onesecond(); // updates clock once per second
          countdown--;  
        }

      }  

      // fade blue LEDs out from max to min in increments of 1 point:
      for (int i = 10; i >= 0; i--) // setting i value for 10% increment. Start with 10%
      {  
        analogWrite(blue, bluepercent[i]);
        srlcd.setCursor(13, 1);
        srlcd.print(i);
        srlcd.print(" ");  

        int countdown = ((bluerampdown*60)/10); // calculates seconds to next step
        while (countdown>0)
        {
          onesecond(); // updates clock once per second
          countdown--;
        }
      }
    }
  }

// DS18B20 display
sensors.requestTemperatures(); // Send the command to get temperatures
    // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  srlcd.setCursor(0, 2);
  srlcd.print(sensors.getTempCByIndex(2));  
  srlcd.print((char)223);  
  srlcd.setCursor(10, 2);
  srlcd.print(sensors.getTempCByIndex(1));  
  srlcd.print((char)223);
  srlcd.setCursor(0, 3);
  srlcd.print("H2O ");
  srlcd.print((sensors.getTempCByIndex(0)) + 0.6);
  srlcd.print((char)223);  
  
  delay(500);
  //*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  Night Time |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*/

if (((ontime * 60) + photoperiod + (2 * blueramptime) + (2 * whiteramptime)) < daybyminute)
  {          
      
    ledlcdOff();  
  }
  
}  // END LOOP

« Last Edit: February 20, 2012, 02:21:01 pm by luca56 » Logged

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

si esatto, entrambi funzionano con IDE 22
Logged

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

ok, era un problema di loop.... forse ho risolto con due bei void ciclo1() e vois ciclowifi()

 smiley

(il vostro aiuto comunque è stato fondamentale.... vi ricordo che studio legge, non informatica)

Logged

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

si devo dire che con l'espediente del void effettivamente ora funziona tutto però sembra molto rallentato nella comunicazione su web... ci mette parecchio a caricare le 2 righe html di "hallo Worl".

Inoltre ho notato che aggiungendo una riga alla pagina html e più precisamente un WiServer.write(((sensors.getTempCByIndex(0)))) praticamente non si connette nemmeno...

Qui penso si tratti proprio di ottimizzare il programma perché si inchioda da qualche parte...

E qui come si fa?!
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

Devi capire quale blocco di codice si mangia tutto quel tempo.
Io scommetto che un pò di colpa è della libreria DallasTemperature, del ds18b20 e di come le usi. smiley
Prova a far girare lo sketch senza però leggere la temperatura, dagli un numero fisso al posto della temperatura letta e vedi se i tempi migliorano.
Logged

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

..inoltre considera di ottimizzare il codice, inizia effettuando qualche verifica sull'utilizzo della memoria..

Logged

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

Grazie delle dritte... giocando ancora un po' con lo sketch sono arrivato a questo situazione: è tutto funzionante, il display mostra le info richieste ed il wifi crea la pagina web che viene tuttavia caricata in ben 8/10 secondi.

l'unica cosa che non sono ancora riuscito a fare è far mostrare su web una delle 3 temperature... questa è la parte di sketch relativa alla creazione della pagina:
Code:
// 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
        sensors.requestTemperatures();
        WiServer.print("<html>");
        WiServer.print("Ciao!<br><br>");
        WiServer.print("Temperatura=");
        WiServer.write(((sensors.getTempCByIndex(1))));
        WiServer.print("°C");
        WiServer.print("</html>");
        
        // URL was recognized
        return true;
    }
    // URL not found
    return false;
}


penso sia sbagliata, mi confermate? devo forse inserire un sensors.requestTemperatures();?

Logged

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

anche io avevo pensato di ottimizzare il codice però non ho idea di come si possa fare.... per caso sapete se sul forum c'è un post riassuntivo o una guida che posso seguire? ho provato a dare un occhiata sul web stamattina ma non ho trovato un granché...
Logged

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