expected unqualified-id before 'if',non riesco proprio a risolvere

Scusate ma non riesco a risolvere anche se penso che si tratti un errore di sintassi.
l'errore viene indicato su l'ultimo "if"

// SCHEDA RELE VOLT 5
// LCD TIPO QC2004A volT 5,I2C volt 5

// CONNESSIONE DHT
// Connettere attacco 1 (a sinistra)              a +5V di Arduino
// Connettere attacco OUT  del sensore               al pin 2
// Connettere attacco 4 (a destra) del sensore    a GROUND
// Connettere una resistenza da 10K tra attacco 2 (data) e attacco  1 (power) del sensore

// CONNESSIONE SENSORI UMIDITA' TERRA
// connettere il pin A0 al sensore 1
// connettere il pin A1 al sensore 2
// connettere il primo rele (quello della pompa che porta acqua alle piante) al pin 6

// CONNESSIONE LCD con I2C( i 2 LCD )

// connettere SCL al pin A5
// connettere SDA al pin A4
// connettere VCC al pin +5V
// connettere GND al pin GND

// CONNESSIONE DS3231

// connettere SCL al pin A5
// connettere SDA al pin A4
// connettere VCC al pin +5
// connettere GND al pin GND

//CONNESSIONE  LETTORE SD

// connettere CS   al pin 10
// connettere SCX  al pin 13
// connettere MOSI al pin 11
// connettre  MISo al pin 12

// CONNESSIONE RELE'
// connettere pin 5 al IN1 della scheda rele'( VENTOLA)
// connettere pin 6 al IN2 della scheda rele'(acqua piante)
// connettere pin 7 al IN3 della scheda rele'(vaporizzazione/umidità)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <Adafruit_Sensor.h>
#include <EEPROM.h>
#include "DHT.h"
#include <LiquidCrystal_I2C.h>

int sensoreTerra1 = A0;
int sensoreTerra2 = A1;

// variabili per calcolare quante volte vengono eccitati i relè

int cambio5 = 0 ; // conteggio dei cambi di stato del pin 5
int valore5 = 0; //valore del pin 5
int ultimovalore5 = 0;//ultimo valore pin 5


int cambio6 = 0 ; // conteggio dei cambi di stato del pin 6
int valore6 = 0; //valore del pin 6
int ultimovalore6 = 0;//ultimo valore pin 6

int cambio7 = 0 ; // conteggio dei cambi di stato del pin 7
int valore7 = 0; //valore del pin 7
int ultimovalore7 = 0;//ultimo valore pin 7



int sensorValue1 = 0;
int sensorValue2 = 0;

double temp1 = 0.0;
double MediaSensori1 = 0.0;






LiquidCrystal_I2C lcd1(0x27, 20, 4);
LiquidCrystal_I2C lcd2(0x23, 20, 4);

#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

const int reset = 10;
int statoreset = 0;

byte TMIN;
byte TMAX;
byte UMIN;
byte UMAX;




void setup() {
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(sensoreTerra1, INPUT);
  pinMode(sensoreTerra2, INPUT);

  temp1 = 0.0;
  temp1 = temp1 + sensorValue1 + sensorValue2;
  MediaSensori1 = (temp1 / 2);

  Serial.begin(9600);


  dht.begin();//inizializzo dht

  lcd1.init(); // inizializzo lcd n.1
  lcd1.backlight();// accende lcd n.1

  lcd2.init(); // inizializzo lcd n.2
  lcd2.backlight();// accende lcd n.2

  //scrivo sul display i caratteri fissi
  lcd1.print("TEMP ATTUALE");
  lcd1.setCursor(0, 1);
  lcd1.print("MIN");
  lcd1.setCursor(9, 1);
  lcd1.print("MAX");
  lcd1.setCursor(0, 2);
  lcd1.print("UMID ATTUALE");
  lcd1.setCursor(0, 3);
  lcd1.print("MIN");
  lcd1.setCursor(9, 3);
  lcd1.print("MAX");

  lcd2.print("ATT.ACQUA PIAN :");
  lcd2.setCursor(0, 1);
  lcd2.print("ATT.POMPA UMI. :");
  lcd2.setCursor(0, 2);
  lcd2.print("ATT.VENTOLA :");
  lcd2.setCursor(0, 3);





  // TMIN,TMAX,UMIN e UMAX assumono i valori contenuti nella memoria EEPROM

  TMIN = EEPROM.read(1);      // temperatura minimna
  TMAX = EEPROM.read(2);      // temperatura massima
  UMIN = EEPROM.read(3);      // umidita minima
  UMAX = EEPROM.read(4);      // umidita massima

}

void loop() {
  //verifica sensori di terra ed eventualmente attiva relè1 e pompa

  sensorValue1 = analogRead(sensoreTerra1);
  sensorValue2 = analogRead(sensoreTerra2);
  temp1 = 0.0;
  temp1 = temp1 + sensorValue1 + sensorValue2;
  MediaSensori1 = (temp1 / 2);

  int t = dht.readTemperature();
  int u = dht.readHumidity();

  //conteggio cambio di stato pin 5 (VENTOLA)

  valore5 = digitalRead(5);
  if ( valore5 != ultimovalore5 and valore5 == LOW)
  {
    cambio6++;

    lcd2.setCursor(16, 0);
    lcd2.print(cambio5);

  }
  ultimovalore5 = valore5 ;

  lcd2.setCursor(16, 2);
  lcd2.print(cambio5);

  //conteggio cambio di stato pin 6 (IRRIGAZIONE PIANTE)

  valore6 = digitalRead(6);
  if ( valore6 != ultimovalore6 and valore6 == LOW)
  {
    cambio6++;

    lcd2.setCursor(16, 0);
    lcd2.print(cambio6);

  }
  ultimovalore6 = valore6 ;

  //conteggio cambio di stato pin 7 (UMIDITA' VAPORIZZAZIONE)

  valore7 = digitalRead(7);
  if ( valore7 != ultimovalore7 and valore7 == LOW)
  {
    cambio7++;

    lcd2.setCursor(16, 1);
    lcd2.print(cambio7);

  }
  ultimovalore7 = valore7 ;

  // attivazione relè per ventola se temperatura è > 27°

  if (t > 27)
  {
    digitalWrite( 5, LOW);// eccita relè per azionare ventola
  }
  else
  {

    digitalWrite( 5, HIGH);
  }



  // attivazione relè acqua piante,se terreno è secco

  if (MediaSensori1 > 600)
  {
    digitalWrite(6, LOW); // eccita relè per acqua alle piante
  }
  else
  {
    digitalWrite(6, HIGH);
  }


}

// attivazione relè per umidità (vaporizzatori)
if (u < 60 )
{
  digitalWrite( 7, LOW);// eccita relè per umidità (vaporizzatori)
}
else
{

  digitalWrite( 7, HIGH);
}

if (t > TMAX)
{
  TMAX = t;
  EEPROM.write(2, t);
  // se la temperatura supera il dato MAX allora modifico il dato MAX
  // scrivo questo dato anche nella eeprom
}
if (t < TMIN)
{
  TMIN = t;
  EEPROM.write(1, t);
  // se la temperatura è minore del dato MIN allora modifico il dato MIN
  // scrivo questo dato anche nella eeprom

  // int u = dht.readHumidity();
}
if (u > UMAX)
{
  UMAX = u;
  EEPROM.write(4, u);
  // se lìumidità supera il dato MAX allora modifico il dato MAX
  // scrivo questo dato anche nella eeprom
}
if (u < UMIN)
{
  UMIN = u;
  EEPROM.write(3, u);
  // se la temperatura è minore del dato MIN allora modifico il dato MIN
  // scrivo questo dato anche nella eeprom

}

// premendo il tasto reset porto MIN e MAX al valore di temp attuale
statoreset = digitalRead (reset);
if ( statoreset = LOW)
{
  TMIN = t;
  TMAX = t;
  UMIN = u;
  UMAX = u;

}

 // scrittura dati sul display

lcd.setCursor(14, 0);
lcd.print(t);
lcd.setCursor(5, 1);
lcd.print(TMIN);
lcd.setCursor(13, 1);
lcd.print(TMAX);
lcd.setCursor(14, 2);
lcd.print(u);
lcd.setCursor(5, 3);
lcd.print(UMIN);
lcd.setCursor(13, 3);
lcd.print(UMAX);




delay(100);


}

Se usi la formattazione automatica dell'IDE, che ti rimette ben a posto il codice, ti accorgi che c'è un problema con le parentesi graffe e che, da un certo punto in poi, tutto è fuori dal loop() ...

Non c'entra nulla con l'errore (che è dovuto a quanto suddetto), ma in quel IF c'è un altro errore, il confronto si fa con '==' e NON con un solo '='

Guglielmo

Ti ringrazio,per un errore di digitatura vi era una una parentesi graffa in piu'.
Ho anche corretto da "=" a "=="; quindi se ho capito bene ogni volta che ho usato un solo = dovevo usare ==,.
Ti ringrazio come sempre.

= é un assegnazione che dentro un if non é un errore ma assegna il nuovo valore alla variabile ed é sempre vero.

== è un confronto.

Trucco:

se al posto di
if ( statoreset = LOW)

scrivi
if ( LOW = statoreset)

da un messaggio di errore se Ti dimentichi il secondo =

Ciao Uwe

uwefed:
se al posto di
if ( statoreset = LOW)
scrivi
if ( LOW = statoreset)
da un messaggio di errore se Ti dimentichi il secondo =

Vero, ma dai, "non se po' vedé"... :slight_smile:

In quel caso meglio:

if ( ! statoreset )

che dà un aiuto anche alla comprensione del codice visto che si legge "se non è in stato reset..." :wink: