Non funziona correttamente questo sketch

Faccio ancora uso del vostro immenso sapere. Ho fatto questo sketch che legge la C02, temperatura e luminosità. Il valore che mi resituisce il pin 4 analogico, che è associato alla luminosità, mi da sempre il valore 4 (se metto il pin 3 mi restituisce sempre 3). Se però carico lo stesso sketch solo per la luminosità mi dai i valori corretti. Come mai? Dove sbaglio nella compilazione?

int pinLUM = 4; // Sensore luminosità pin analog 4
int val = 0; // variable to store the value coming
// from the sensor

int pin = 5; // analog pin temp, variato pin in 5 da 0
int tempc = 0,tempf=0; // temperature variables
int samples[8]; // variables to make a better precision
int maxi = -100,mini = 100; // to start max/min temperature
int i;
int sensorValue; //nuova aggiunta

void setup()
{
Serial.begin(9600); // start serial communication
}

void loop()
{

for(i = 0;i<=7;i++){ // gets 8 samples of temperature

samples = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
tempc = tempc + samples;
delay(6000);

}

tempc = tempc/8.0; // better precision
tempf = (tempc * 9)/ 5 + 32; // converts to fahrenheit

if(tempc > maxi) {maxi = tempc;} // set max temperature
if(tempc < mini) {mini = tempc;} // set min temperature

Serial.print(tempc,DEC);
Serial.print(" Celsius, ");

Serial.print(tempf,DEC);
Serial.print(" fahrenheit -> ");

Serial.print(maxi,DEC);
Serial.print(" Max, ");
Serial.print(mini,DEC);
Serial.print(" Min");

tempc = 0;

sensorValue = analogRead(0); // NUOVA AGGIUNTA read analog input pin 0
delay(6000); // prossima lettura tra 1 minuto
Serial.print(" - Valore CO2 -> ");
Serial.print(sensorValue, DEC); // prints the value read

val = analogRead(pinLUM); // Lettura dati sensore luminosità

Serial.print(" - Luminosità -> ");
Serial.println(pinLUM);

delay(1000); // delay before loop
}

Non è pulito come uno dei vostri, ma come primo lavoro, non posso lamentarmi

Ciao, con
Serial.println(pinLUM);
naturalmente stampi sempre il numero del pin, dovresti fare
Serial.println(val);

Ah già che *esso che sono stato. Grazie mille, troppo gentile e le risposte sono sempre chiare e veloci

Colgo l'occasione per chiarire un mio dubbio dovuto all'uso dei pin analogici in input su alcune pagine di tutorial del sito...

In alcune pagine i pin analogici vengono inizializzati con i numeri da 0 a 5, come per i pin digitali... In altre pagine come "AnalogInputPin" vengono inizializzati con A0, A1, ..., A5

C'è differenza?? La seconda permette magari di evitare conflitti con i pin digitali, o è indifferente??

seppe

Per quanto ne so A0 serve per la differenziazione quando usi quei pin come digitali, se invece usi comandi come analogRead/Write ritengo che anche per il software sia ovvio che ti riferisci ai pin analogici.

Per il Read si', per il Write... non credo... :smiley:
Puoi anche usare digitalRead sugli analogici numerandoli dal 14 in su.

A0-A5 sono alias per 14-19 e vengono definiti come costanti nell'IDE quindi è indifferente usare A0 o 14. Chiaramente, per la leggibilità del codice, è consigliabile usare una sintassi chiara, quindi eviterei "0" anche quando è possibile usarlo e metterei sempre A0, che inequivocabilmente indica anche ad altri utilizzatori del codice l'intenzione di usare il pin analogico 0.

leo72:
Chiaramente, per la leggibilità del codice, è consigliabile usare una sintassi chiara, quindi eviterei "0" anche quando è possibile usarlo e metterei sempre A0, che inequivocabilmente indica anche ad altri utilizzatori del codice l'intenzione di usare il pin analogico 0.

Concordo, secondo me puo' essere ancor piu' utile farlo quando si usano gli analog in come output, anche se, alla fin della fiera, e' sempre questione di gusti. In ogni caso, se il codice puo' essere letto da altri, e' sempre doveroso commentare bene :slight_smile:

grazie per il chiarmento!!!