Non sono sicuro della sintassi IF

Ciao a tutti,
scrivo perchè sono un po in panne con un codice...

ho 10 sensori che possono essere esclusi (sensoreNescluso == 1) oppure no (== 0 )e in questo ultimo caso rilevano la pressione tipo ON/OFF scrivendone lo stato nella variabile (statosensoreN == HIGH) o LOW...

sostanzialmente nella fase di un ciclo vado avanti solo se ogni singolo sensore:

  • o è escluso
  • o in stato HIGH

è corretta questa sintassi:

if  ( ((sensores1escluso == 1) || (statosensore1 == HIGH)) && ((sensores2escluso == 1) || (statosensore2 == HIGH)) && ((sensores3escluso == 1) || (statosensore3 == HIGH)) &&  ......... ((sensores10escluso == 1) || (statosensore10 == HIGH))  ) {
faseciclo = faseciclo + 1; // se ogni sensore è HIGH o escluso, passa alla fase successiva
}

perchè purtroppo vedo molti esempi di condizioni "semplici", scusate non sono un bravo ricercartore.
grazie a tutti per il tempo speso.
a presto

Potrebbe andare bene

Ma è lunga, illeggibile e non mantenibile

Ti conviene fare in maniera differente

Il meglio sarebbe invece di avere tante variabili per tanti sensori avere degli array, che scorri in poche righe

Per adesso nell'immediato ti direi di nidificare le if
Ogni sensore nidificato nella if del precedente

Sarà bruttissimo da vedere, ma almeno ha dimensioni umane ogni singloa riga

Se non ti è chiaro chiedi

ciao!
no è chiaro... lasciando perdere la sintassi intendi dire

if (..... sensore1 high || sensore1escluso ==1) {
   if (sensore2 high || sensore2escluso ==1 {
      if nsensori {
      }
   }
}

forse come dici te è lunga... il programma è interfacciato con megunolink e vedo che effettivamente stato sensori e variabili sono corrette...solo che quella istruzione lunga di if con 10 sensori non me la vede...
probabilmente sbaglio io..domani provo a verificare meglio e provo eventualmente la soluzione proposta....

purtroppo per gli array non sono molto tecnico col codice di arduino!
ti aggiorno!

È corretta, ma meglio scriverla più compatta:

// se ogni sensore è HIGH o escluso, passa alla fase successiva
if( (sensores1escluso || statosensore1) &&
    (sensores2escluso || statosensore2) &&
    (sensores3escluso || statosensore3) &&
    .........
    (sensores10escluso || statosensore10) ) {
        faseciclo++;
}

Io userei un array, anzi 2, mi pare più pulito:

byte escluso[10];
byte stato[10];
bool proseguo=true;
//lettura stato e set esclusione
for(uint8_t i=0;i<10;i++){
 if(!escluso[i] || !stato[i]){
  proseguo=false;
  break;
 }
}
if(proseguo){
  //fai qualcosa
}

Dovrebbe funzionare, ma controlla, perchè è tardi(perlomeno per me), sono stanco, e quindi prone a scrivere minchiate.

Ciao, Ale.

edit: infatti ho scritto una fesseria, non ci va un or ma un and:

if(!escluso[i] && !stato[i])

perlomeno mi pare, ma mi sa che è meglio se vado a letto...

Io eventualmente userei un'array di struct così puoi tenere tutto ordinato e compatto

typedef  struct {
  uint8_t pin;
  bool value;
  bool excluded;

  bool getValue() {
    return value || excluded;
  }
} Sensor_t;

Sensor_t sensors[10];

// Oppure
// Sensor_t sensor1, sensor2, sensor3, sensor4 etc etc 


//////////
sensors[0].value = digitalRead(sensors[0].pin);
sensors[1].excluded = true;
etc etc


// If concatenato oppure la logica più smart con il ciclo for già mostrata da @ilguargua
if (sensors[0].getValue() && sensors[1].getValue()
 //etc etc)

Ciao a tutti!
la sintassi era corretta, era un problema di variabile e di conseguenza la condizione non si avverava.
Ad ogni modo vi ringrazio tutti quanti per il vostro supporto!! Ho imparato anche cose nuove grazie a voi!

E' ben per questo che i programmi devono essere chiari e ben leggibili
Per discernere subito tra le possibili cause di malfunzionamento

ERGO: sempre Array di strutture ciclate