errore nella compilazione codice con lcd

Ciao tutti,
in rete ho trovato un codice che ho adattato al caso mio ma adesso ho un problema che non riesco a risolvere dovuto alla poca conoscenza di programmazione.
ho collegato arduino a un sensore di umidità ma i valori visualizzati sul monitor non sono corretti.
Mi potete aiutare?

Grazie

/*
 FILE:    hygrometer.29SET16
 PURPOSE: Soil Moisture and Temperature Sensor
 PROBES:  LM393+FC28, TMP36
 DISPLAY: LiquidCrystal_I2C 16x2
 COMFORT: 400mV soil
 AUTHOR:  Antonio Cannavale
 
 Soil moisture sensor connected to Arduino as follow:
 GND -> GND
 VCC -> +5V
 D0  -> 13
 A0  -> A0

 TMP36 sensor connect to Arduino as follow:
 GND  -> GND
 Vout -> A1 
 Vcc  -> +5V

 LCD connect to Arduino as follow:
 GND  -  GND
 VCC  -  +5V
 SDA  -  SDA
 SCL  -  SCL
 */

#include <Wire.h> // Include Wire library:
#include <LiquidCrystal_I2C.h> // Include LiquidCrystal_I2C library:
#define GLED 13 // Digital pin that the green LED is connected:

// Set the LCD I2C address
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int soilReading, soil, tempReading;
float temp;
boolean DEBUG=true;

// The setup function runs once when you press reset or power the board:
void setup() { // Start setup:
  if (DEBUG){Serial.begin(9600);} // Set up serial port for 9600 baud (speed):
  while(!Serial) {
     ; // Wait for serial port to connect. Needed for native USB port only:
  } // End while(!Serial):
  delay(1000); // Delay to let system boot:
  pinMode(soilReading, INPUT);
  pinMode(GLED, OUTPUT); // Initialize the indicator LED:
  digitalWrite(GLED, HIGH); // Set our LED:
  Serial.println(F("\nSOIL MOISTURE AND TEMPERATURE SENSOR"));
  Serial.println(F("------------------------------------"));
  lcd.begin(16,2); // Start LCD communication 16x2:
  lcd.clear(); // Clears the LCD screen and positions the cursor in the upper-left corner:
  lcd.backlight(); // Turn on backlight:
} // End setup:

// The loop function runs over and over again forever:
void loop() { // Start loop:
  // Getting voltage from sensor at Analog PIN A0:  
  soilReading = analogRead(A0);
  // Limits range of sensor values:
  soilReading = constrain(soilReading, 100, 1024);
  // Map the value to a percentage:
  soil = map(soilReading, 100, 1024, 100, 0);
  // Getting voltage from sensor at Analog PIN A1:
  tempReading = analogRead(A1);
  // Convert voltage to celsius:
  temp = (((tempReading*5.0)/1024)-0.5)/0.01;
  // LED soil moisture indicator:
  if(soilReading > 400){
    digitalWrite(GLED, LOW);
  } // End if(soilReading):
  else {
    digitalWrite(GLED, HIGH);
  } // End else:
  if(DEBUG) {
    Serial.print(soilReading);
    Serial.print(F(" mV soil,\t"));
    Serial.print(soil);
    Serial.print(F(" %,\t"));
    Serial.print(tempReading);
    Serial.print(F(" mV temp, \t"));
    Serial.print(temp); 
    Serial.write(176); // Print out the degree symbol:
    Serial.println(F("C"));
  } // End if(DEBUG)
  printSOIL(); // Call printSOIL subroutine:
  delay(1000); // Wait 1 second before accessing sensor again:
} // End loop:

void printSOIL() {
  lcd.setCursor(0,0);
  lcd.print(soilReading);
  lcd.print(F(" mV"));
  lcd.setCursor(8,0);
  lcd.print(soil);
  lcd.print(F(" %"));
  lcd.setCursor(0,1);
  lcd.print(tempReading);
  lcd.print(F(" mV"));
  lcd.setCursor(8,1);
  lcd.print(temp);
  lcd.print(F(" "));
  lcd.write(223); // Print out the degree symbol:
  lcd.print(F("C"));
}

No, non possiamo aiutare.

uwefed: No, non possiamo aiutare.

Grazie

antoniocnn: Grazie

Vedo che non hi afferrato il sarcasmo di Uwe ... sarò più diretto:

Se non metti lo schema di tutti i collegamenti (alimentazione, sensori, ecc.), se non dici che sensore stai usando, se non metti un link al prodotto che hai preso così si può esaminarlo, se non metti gli errori / i valori sbagliati, ecc. ecc. OVVERO, [u]se non dai TUTTI i dettagli[/u] ... ma come diavolo pretendi che qualcuno ti aiuti ? ? ? >:(

Guglielmo

MA NON SOLO: nel titolo "errore nella compilazione" nel post "ho collegato arduino a un sensore di umidità ma i valori visualizzati sul monitor non sono corretti."

Ma allora l'errore cos'é ? non compila o hai valori strani ?!? :o

gpb01: Vedo che non hi afferrato il sarcasmo di Uwe ... sarò più diretto:

Se non metti lo schema di tutti i collegamenti (alimentazione, sensori, ecc.), se non dici che sensore stai usando, se non metti un link al prodotto che hai preso così si può esaminarlo, se non metti gli errori / i valori sbagliati, ecc. ecc. OVVERO, [u]se non dai TUTTI i dettagli[/u] ... ma come diavolo pretendi che qualcuno ti aiuti ? ? ? >:(

Guglielmo

Ciao, come potete vedere nei commenti iniziali del codice alla riga PROBES trovate i sensori. Nello specifico un sensore di umidità LM393 con FC28 e come sensore di temperatura il transistor TMP36 (se inserire le sigle in google immagini viene fuori). I riferimenti ai collegamenti li trovate nel codice (sempre nei commenti iniziali). L'errore nasce quando il sistema richiama la funzione void printSOIL() visualizzando sempre zero.

Scusate il sarcarmo.

Ma perché dobbiamo sbatterci NOI a cercare gli esatti sensori che VOI usate ? ? ? :o :o :o

Ma non sapete [u]mettere il link[/u] alle schedine che avete comprato e che, spesso, oltre al sensore, includono altra componentistica ? ? ?

Guglielmo

Quindi il titolo "errori di compilazione" cosa c'entra ?

... in ogni caso, solo guardando il codice, già non capisco ...

definisci una variabile "int soilReading", NON gli assegni alcun valore, e poi nel setup() fai una "pinMode(soilreading, INPUT);" ... ::)

Dopo di che mi chiedo ... perché dopo "soilReading = analogRead(A0);" non metti una bella "Serial.println(soilReading);" e vedi che valore hai letto ? Perché continuare a fare tutto il resto se non sai quello che leggi ... ::)

Guglielmo

Ok, visto i toni della discussione preferisco abbandonare e ricercare su internet le informazioni che mi servono.

Grazie e scusate

Mah ! "visto i toni" boh non ti spieghi, fai un thread che è un casino (non ci fai capire le cose) e poi siamo noi ? Vabbè. Qui se ti spieghi bene non ci sono problemi a darti info. Parli di problema del sensore di umidità ma la funzione soil() stampa anche il soil. Tutti i valori sono a 0 ?

Intanto quel soil anche io c'e' l'ho. Perchè colleghi sia il digitale che l'analogico ? Il digitale serve solo come "soglia" che imposti con il trimmer.

E' solo il Tmp36 che dà 0 ? Lo hai provato da solo ?

nid69ita: Mah ! "visto i toni" boh non ti spieghi, fai un thread che è un casino (non ci fai capire le cose) e poi siamo noi ? Vabbè. Qui se ti spieghi bene non ci sono problemi a darti info. Parli di problema del sensore di umidità ma la funzione soil() stampa anche il soil. Tutti i valori sono a 0 ?

Intanto quel soil anche io c'e' l'ho. Perchè colleghi sia il digitale che l'analogico ? Il digitale serve solo come "soglia" che imposti con il trimmer.

Grazie ho risolto tutto. mi è bastato cancellare la linea pinMode(soilReading, INPUT);

Strano. soilReading non lo inizializzi, ma dovrebbe essere a 0 quando parte il programma. Quindi quello pinMode(soilReading, INPUT); dovrebbe essere pinMode(0, INPUT); e il pin 0=RX che è già input.

P.S. chiedo agli esperti. Non rammento, le variabili globali su queste MCU sono azzerate alla partenza ?

nid69ita:
P.S. chiedo agli esperti. Non rammento, le variabili globali su queste MCU sono azzerate alla partenza ?

SI

Guglielmo

Non è questione della MCU, è proprio lo standard C che lo richiede :).

SukkoPera: Non è questione della MCU, è proprio lo standard C che lo richiede :).

Si, ovvio, anche perché la MCU di variabili locali, globali, ecc. non ne sa nulla ... ... quelle sono cose che si smazza il compilatore :D

Guglielmo

SukkoPera: Non è questione della MCU, è proprio lo standard C che lo richiede :).

Vero. Anche la printf richiede la gestione del %f ma su queste MCU è disabilitato. Mai dare tutto per scontato, di eccezioni è pieno il mondo ;)

Vero, ma quello è fatto per ragioni di efficienza nell'utilizzo di RAM e flash. L'inizializzazione delle globals è praticamente gratuita, non avrebbe senso non farla :).

Non si sà mai quali specifiche vengono date a noi programmatori che facciamo i compilatori, le MCU le fanno gli elettronici ... mai fidarsi di uno "spelafili" :grin:

(oh scherzo ovviamente ^-^ )

Su questo concordo :D.