Salve a tutti, torno ad usare questo utilissimo forum dopo un po’ di tempo.
Vorrei accendere e spegnere 4 output con dei pulsanti normali, ovviamente la chiamata da parte degli input deve essere casuale, cioè io dovrò accendere 4 dispositivi non in un ordine preciso ma nell’ordine che ritengo opportuno al momento, anche tutti insieme ecc ecc… Ho pensato quindi di avvalermi dell’uso degli array che consentono di creare dei gruppi di funzioni esterne al loop o al controllo del flusso.
Ho trovato questo code che potrebbe fare al caso mio, solo che in questo modo la funzione ‘else’ mi fa spegnere il led quando rilascio il pulsante, invece vorrei che il led rimanga acceso fino a che non ripremo il pulsante nuovamente, come fosse un interruttore. E questo deve essere applicato a tutti e 4 i led. Qualcuno ha un’idea di come possa memorizzare gli stati utilizzando gli indici?
vi incollo il code attuale e vi ringrazio moltissimo per l’attenzione!
int pinPulsanti[] = {2,3,4,5}; // crea un array di pin per gli input
// costituiti dai pulsanti
int pinLed[] = {10,11,12,13}; // crea un array di pin di output per il LED
void setup()
{
for(int indice = 0; indice < 4; indice++)
{
pinMode(pinLed[indice], OUTPUT); // dichiara il LED come output
pinMode(pinPulsanti[indice], INPUT); // dichiara il pulsante come input
digitalWrite(pinPulsanti[indice],HIGH); // abilita la resistenza di pull-up
// l'abilitazione della resistenza di pull-up mi permette di non utilizzare
// una resistenza esterna in serie al pulsante
}
}
void loop(){
for(int indice = 0; indice < 4; indice++)
{
int stato = digitalRead(pinPulsanti[indice]); // legge il valore di input
if (stato == LOW) // controlla se il pulsante è premuto
{
digitalWrite(pinLed[indice], HIGH); // accende il LED il pulsante è premuto
}
else
{
digitalWrite(pinLed[indice], LOW); // spegne il LED
}
}
}