Pulsanti premuti contemporaneamente per accendere dei led

Ho bisogno che qualcuno mi illumini in merito al quesito sottostante:
3 LED collegati rispettivamente ai Pin 9, 10 e 11. (con realtiva resistenza 220 ohm)
2 pulsanti collegati senza resistenze ai pin 7 e 6
Vorrei che premendo contemporaneamente i due pulsanti si accendessero tutti 3 i LED.
Al rilascio di uno dei due pulsanti i LED si devono spegnere.
Alla pressione di uno solo dei due pulsanti non deve accadere nulla.

Ho dichiarato le variabili, impostato INPUT e OUTPUT come di seguito:

//definizione dei pin
int led1= 11;
int led2= 10;
int led3= 9;

int buttonA = 7;
int buttonB = 6;


void setup()
{
  //impostazioni dei pin come uscite
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  
  //impostazioni dei pin come ingresso
   pinMode(7, INPUT);
   pinMode(6, INPUT);
          
  //impotazione resistenza pullup
  digitalWrite(buttonA, HIGH);
  digitalWrite(buttonB, HIGH);
          
}

void loop()
{ 
 
 
  
}

Adesso non essendo molto pratico delle strutture di controllo if ed else vorrei vostri consigli suggerimenti su come gestire questo tipo di condizione.
Grazie a tutti in anticipo

if (condizione)
{
Cose
}
else
{
Altre cose
}

fa "cose" se la condizione é vera e "altre cose" se la condizione é falsa, fine, semplice semplice
La funzione per leggere un pin é la digitalRead (numerodelpin) che restituisce 0 se basso e 1 se alto
La funzione per cambiare lo stato di un pin é, come sai, la digitalWrite (pin, stato)
&& significa 'E', e nelle condizioni vale vero se e solo se entrambe le condizioni che separa valgono vero, quindi si può fare
if (condizione1 && condizione2)
== vuol dire "é uguale?", separa due valori numerici e fa valere il tutto 1 se essi sono uguali

Non saprei cosa altro dirti per non darti la pappa fatta

Silente:
if (condizione)
fa "cose" se la condizione é vera e "altre cose" se la condizione é falsa, fine, semplice semplice...

Grazie mille, mi sei satato di grande aiuto.
Non sapevo di questo comandao "&&".
Leggendo un pò di manuali, articoli, su arduino, avevo più o meno un'idea per quanto riguardasse la struttura di controllo che convolge if ed else e su come impostare la stessa.
Unica cosa che mi sfuggiva era su come indicare ad arduino che deve attivare l'output solamente se entrambe le 2 condizioni sono vere usando i simboli "&&" da te appena citati.
Se non è chiedere troppo completeresti lo sketch relativo come da te spiegato cosi da capire meglio come usare questa funzione?
Se ci fossero tre condizioni che che devono essere vere, tre pulsanti premuti contemporaneamente, si potrebbe usare sempre:
if (condizione1 && condizione2 && condizione3)?

Concludo il discorso && aggiungendo altri 3 amici:
|| che vuol dire "almeno uno", dall'utilizzo uguale a &&, ma che perché sia vero basta che una delle condizioni che separa lo sia
!, la negazione logica, questo si mette prima di una condizione e ne inverte il valore (!1=0, !2=0, !4096=0, !0=1)
!= diverso, separa due valori numerici e vale 1 se sono diversi

&&, || e ! si possono usare senza limiti all'interno delle condizioni. esempio: vuoi fare qualcosa se c1 è vera O se C2 E C3 sono vere O se C4 è falsa?
if (C1 || (C2 && C3) || !C4)

Ora parliamo di cosa può essere una condizione. Una condizione è un confronto tra valori numerici (con == o !=)
Un valore numerico può essere qualsiasi cosa, ovvero A) una funzione che restituisce qualcosa (digitalRead() si, delay() no, ad esempio) B)Una variabile C) un numero
Una condizione vale 1 se vera o 0 se falsa (HIGH e true sono equivalenti a 1, LOW o false a 0)

Infine una condizione, o un insieme di esse, può anche essere usato come vero e proprio valore, 0 o 1, ovunque lo si desideri, ma forse questo è troppo complicato

Nella loop (fra le graffe che vedi dopo quella riga) devi metterci una if e la sua else, ricordati che nessuna delle due vuole il ; ed entrambe vogliono le parentesi graffe dopo, per indicare cosa devono fare al verificarsi (la if) o al non verificarsi (la else) della condizione.
Ora abbiamo 3 aree:
1)tra le tonde della if, dove devi inserire la condizione (lettura del primo pulsante==1 && lettura del secondo pulsante==1)
2)tra le graffe della if, dove devi mettere la funzione che accende il primo led, la funzione che accende il secondo led, la fu nzione che accende il terzo led
3)tra le graffe della else, dove devi mettere la funzione che spegne il primo led, la funzione che spegne il secondo led, la funzione che spegne il terzo led

Jamming:
Ho dichiarato le variabili, impostato INPUT e OUTPUT come di seguito:

Vero, hai dichiarato delle variabili, ma per i nomi dei pin non servono variabili, bastano delle costanti (i numeri dei pin non cambiano mai), quindi la definizione corretta sarebbe la seguente, con la costante scritta per convenzione in maiuscolo, e magari di tipo byte visto che non deve rappresentare valori più grandi di 255:

const byte LED1 = 11;

Perché sono state defnite quelle variabili/costanti? Solo per chiarezza, per usare i loro nomi nel programma invece di cospargere il codice di numerini facili da confondere, e quindi è del tutto inutile definirle se poi nelle righe seguenti si continuano a scrivere i numerini :wink:

Ed infine, l'attivazione delle resistenze di pull-up si ottiene già con il pinMode specificando INPUT_PULLUP:

pinMode(BUTTON_A, INPUT_PULLUP);

Jamming:
2 pulsanti collegati senza resistenze ai pin 7 e 6

Oltre alle risposte nelle quali ti hanno fatto un "bignamino" delle strutture di controllo in C (ma se vuoi fare qualcosa di decente tu DEVI studiarte un poco di più il linguaggio C...), devi anche spiegare come hai collegato questi pulsanti "senza resistenze", ossia i pulsanti hanno DUE contatti: a cosa hai collegato i due contatti di ogni pulsante? Te lo chiedo perché anche il discorso dei cablaggi è importante per far funzionare correttamente il tutto.

Un pin non connesso a nulla (o connesso ad un pulsante non premuto) è "fluttuante" ossia potresti leggere LOW o HIGH, in modo anche quasi casuale. Per questo un pulsante si collega sempre da un lato al pin e dall'altro o a GND (ma con una resistenza, diciamo da 10k, verso +5V) ossia in "pull-up", o al +5V (sempre con una resistenza da 10k verso GND) ossia in "pull-down". Nel primo caso quando non premi il pulsante tu leggerai sempre HIGH (e LOW quando lo premi) oppure nel secondo caso leggerai sempre LOW (e HIGH quando lo premi).

Esiste anche una resistenza di "pull-up" interna ad Arduino, come ti hanno già accennato, e la attivi definendo il pinMode come "INPUT_PULLUP" invece del solo "INPUT". In tal caso quindi tu rilevi la pressione del pulsante quando il pin diventa LOW (logica inversa).

...che poi in pratica ti hanno spiegato le tabelline senza però dirtelo :slight_smile:
Si chiamano OPERATORI LOGICI e sono quello che in pratica eseguono i chip elettronici in ogni "aggeggio elettronico" che hai in mano o in casa.
Dato che un cervello ragiona in vari modi ma una macchina ragiona solo in 1 ( UNO, oppure "ON" oppure "acceso" oppure "presenza di tensione") e ragiona in 0 (ZERO, oppure "spento" oppure "assenza di tensione") si è dovuto inventare un metodo per ottenere qualcosa da queste due semplici stati.
Ecco quindi gli operatori logici che ti hanno descritto e che sono

AND (in italiano E) &&
OR (in italiano OPPURE) ||
NOT (in italiano INVERSO) !=

eccetera (gli altri sono una evoluzione e una combinazione dei due basilari AND e OR). Qui non si parla ancora di linguaggio C ma sono le vere BASI su cui poi nacquero tutti i linguaggi.

operatori.png

Avrai capito che con queste condizioni puoi fare tutto ciò che ti serve:
se ho l'ingresso 1 AND l'ingresso 2 allora fai questo
se ho l'ingresso 1 OR l'ingresso 2 allora fai questo
se ho l'ingresso 1 NOT allora fai questo

Che poi potrebbero diventare
se ho l'ingresso 1 AND l'ingresso 2 OR l'ingresso 3 allora fai quest'altro....

C'è da divertirsi :slight_smile:

operatori.png

Jamming:
Se non è chiedere troppo completeresti lo sketch relativo come da te spiegato cosi da capire meglio come usare questa funzione?

Si tutto bene, però (lo dico a tutti noi, e mi ci metto pure io..), qui parliamo delle basi di programmazione, e in secondo luogo del C in particolare... In rete ci sono il classico "fottìo" di tutorial, video, e forum (per non parlare di ebook e libri) dove si insegnano ste cose, a questo punto credo che trasformare questo topic in un "micro-corso di C" da zero sia un poco fuori dagli scopi del forum, anche se la voglia di aiutare amici poco esperti è tanta (i maker sono in genere altruisti... :wink: ).
Non è cattiveria, ma qui non si scrive codice "per conto terzi", le imbeccate te le abbiamo date in abbondanza, ma ora tocca a te, poi se hai difficoltà posta il tuo codice e possiamo aiutarti... :smiley:

Quindi ti consiglierei di prendere un qualche tutorial introduttivo sulla programmazione di Arduino e seguirlo, sperimentando man mano i vari aspetti relativi all'interfacciamento hardware e quindi alla relativa codifica della logica. Evita "spezzoni" presi qua e là perché alla fine non hai un quadro di insieme e ti confondi solo le idee.

Puoi iniziare ad esempio da QUESTO oppure QUESTO. Ma se cerchi con Google trovi parecchie altre cose, ed anche dei video su YouTube (cerca "corso introduttivo arduino") tipo QUESTO o QUESTO...