funzione if

scusate la mia ignoranza in materia ma sono un nuovo appassionato, posso inserire una funzione del genere? if((vSelect =1) && (val >=420)) { digitalWrite(pompa,LOW); digitalWrite(elettrovalvola1, LOW); digitalWrite(elettrovalvola2,LOW);} ....cioè se le due condizioni delle variabili sono vere, le tre uscite vanno basse o bisogna usare un'altro tipo di funzione? grazie

Ciao, puoi ma nella “if” devi usare == al posto di =

if (( vSelect == 1 ) && ( val >= 420 ) {

Ciao.

si... sono condizioni messe in AND... puoi fare anche le condizioni in OR, similari ma al posto delle && ci sono ||, e rende vero l'if non appena una condizione è soddisfatta...

se non dico una cavolata, l'OR ha precedenza di confronto rispetto all'AND, quindi attenzione alle parentesi... poi, generalmente, gli operatori di confronto sono lazy, ovvero appena una condizione risulta vera in un gruppo di or, quelle successive non vengono considerate, e similarmente, appena una condizione è falsa in un gruppo di and, tutto il gruppo risulta false

e come detto attenzione alla differenza tra assegnamenti e confronti... come avevi scritto te, la prima condizione (vSelect=1) risulta sempre vera, perché controlla cosa c'è in quella variabile e per convenzione valori != 0 sono veri, mentre 0 è falso... quindi attenzione ;-) anche perché il confronto ha precedenza rispetto all'assegnamento... ovvero fare a = B && C è totalmente diverso che fare (a = B) && C nel tuo caso tuttavia, visto che non ci sono assegnamenti, non servono parentesi e basta scrivere

if ( vSelect == 1 && val >= 420 )

p.s. cosa importante, una funzione è una cosa totalmente diversa dall'if, che invece è un flusso di controllo ;-)

grazie mille ma secondo voi dovrei inserire anche else con le condizioni che rimangano Alte le uscite o è sottinteso visto che le ho portate tutte alte nel comando precedente?

dipende da quello che vuoi fare...

però non ti offendere se ti dico di guardarti qualche guida di programmazione e fare qualche esercizio base... avere la padronanza dei costrutti che permettono vari flussi di controllo è una cosa fondamentale, e se ben usati possono ottimizzare il tutto

se le hai già settate alte puoi evitare di farlo di nuovo. Occhio però se modifichi il codice o ad eventuali altri if

secondo voi è possibile una condizione del genere? vSelect=map(analogRead(a02), 300, 1023, 1, 6); // lettura sensore pressione val = map(analogRead(sensore_press), 300,1023,1,6); // lettura di 2° sensore pressione

if(vSelect ==val-1) { digitalWrite(pompa,HIGH); digitalWrite(elettrovalvola1, HIGH); digitalWrite(elettrovalvola2,HIGH);}

cioè se il valore del 2°sensore è sempre inferiore di uno rispetto l'altro sensore si azionano le porte pompa, elettrovalvola1 ed elettrovalvola2, altrimenti le uscite sono basse. Però non capisco se potrebbe dare problemi quando vSelect e val hanno il valore 1, che calcola fa Arduino se val va solo da 1 a 6 e non c'è 0 grazie scusate sono un profano

attento!
la funzione map NON limita i valori. per esempio se in input hai 200, vselect diventerà 0 o un numero negativo!

gli if non hanno problemi con 0 o numeri negativi, la normale aritmetica viene utilizzata.
Ah, questo if accende le elettrovalvole SOLO se val-1 è uguale a vselect.
se invece vuoi attivare le valvole se val è minore basta fare
if (val < vselect)
gli operatori in sono > < == <= >= !(punto esclamativo trasforma una condizione vera in falsa e viceversa)

grazie lesto, ma i sensori di pressione sono tarati da 1,45 volt a 5 quindi non dovrebbe mai scendere sotto i 300 e andare a 0 o negativo