Consigli

Salve questo è il mio primo esperimento con l'arduino che sostanzialmente prevede 3 led (il led da "controllare", un led per segnalare il livello massimo di luminosità e un led per segnalare il livello minimo) e 3 pulsanti (un pulsante per aumentare il livello di luminosità uno per diminuirlo e l'ultimo per resettare il tutto)

Essendo questo appunto il mio primo passo nel mondo arduino volevo "farlo pre bene" e quindi mi rivolgo ai veterani: Va bene il programma che ho scritto?

Mi spiego meglio, dal punto di vista pratico funziona tutto come dovrebbe, la mia curiosita' e' soprattutto dal punto di vista formale visto che io ho seguito la logica del scrivo cosi perche funziona, c'è qualche punto che potrebbe essere perfezionato, c'è qualche convenzione che dovrei usare per imparare per bene cosicche un domani quando mi buttero' in un progeeto piu corposo non mi ritrovi con bug dovuti a errori di logica o con un sorgente troppo complicato?

int PinPWM = 11;                 // Imposto l'uscita da controllare
int PinMax = 12;                 // Imposto l'uscita per la segnalazione del livello massimo
int PinMin = 13;                 // Imposto l'uscita per la segnalazione del livello minimo
int LivMax = 20;                 // Variabile in cui setto il livello massimo
int LivRes = 10;                 // Variabile in cui setto il livello da far assumere dopo il reset
int LivMin = 5;                  // Variabile in cui setto il livello minimo
int PinIn1 = 2;                  // Ingresso per aumentare l'intensita'
int PinIn2 = 3;                  // Ingresso per resettare l'intensita'
int PinIn3 = 4;                  // Ingresso per diminuire l'intensita'
int Val1 = LOW;                  // Variabile in cui viene letto lo stato dell'ingresso aumenta
int Val2 = LOW;                  // Variabile in cui viene letto lo stato dell'ingresso diminuisce
int Val3 = LOW;                  // Variabile in cui viene letto lo stato dell'ingresso reset
int Val = 0;                     // variabile in cui viene settato il livello di regolazione
int ValPas = 5;                  // Variabile in cui setto i passi di aumento o diminuzione dell'intensita'
                                 //
void setup() {                   //
  //pinMode(ledPin, OUTPUT);     //
  pinMode(PinMax, OUTPUT);       // Imposto come uscita il pin per la segnalazione del livello massimo
  pinMode(PinMin, OUTPUT);       // Imposto come uscita il pin per la segnalazione del livello mainimo
  pinMode(PinIn1, INPUT);        // Imposto come ingresso il pin per aumentare
  pinMode(PinIn2, INPUT);        // Imposto come ingresso il pin pre diminuire
  pinMode(PinIn3, INPUT);        // Imposto come ingresso il pin per resettare
}                                //
                                 //
void loop(){                     //
  Val1 = digitalRead(PinIn1);    // Leggo lo stato dell'ingresso per aumentare
  Val2 = digitalRead(PinIn2);    // Leggo lo stato dell'ingresso per resettare
  Val3 = digitalRead(PinIn3);    // Leggo lo stato dell'ingresso per diminuire
  if (Val1 == HIGH) {;           // controllo se il l'ingresso dell'aumento [ch8730]® attivo
    aumenta();                   // se l'ingresso e' alto richiamo la funzione per aumentare l'intensita
    };                           //
  if (Val2 == HIGH) {;           // controllo se il l'ingresso dell reset e' attivo
    azzera();                    // se l'ingresso e' alto richiamo la funzione per resettare
    };                           //
  if (Val3 == HIGH) {;           // controllo se il l'ingresso della diminuzione [ch8730]® attivo
  diminuisce();                  // se l'ingresso e' alto richiamo la funzione per diminuire l'intensita
    };                           //
    analogWrite(PinPWM, Val);    // regolo l'uscita con il valore regolato
  delay(500);                    // aspetto mezzo per permetere di fare la regolazione
}                                //
void aumenta(){                  // Funizione per aumentare l'intensita'
  if (Val < LivMax) {;           // Controllo che il valore di intensita' sia minore del valore massimo
    (Val = (Val+=5 ));           // Se il valore e' minore lo aumento di uno step
    digitalWrite(PinMin, LOW);   // Spengo l'uscita che segnala il livello minimo
  } else {;                      // Se il livello e' superiore al livello massimo
    digitalWrite(PinMax, HIGH);  // Accendo l'uscita che segnala il livello massimo
  };                             //
}                                //
                                 //                                
void diminuisce(){               // Funzione per diminuire l'intensita'
  if (Val > LivMin) {;           // Controllo che il valore di intensita' sia maggiore del valore minimo
    (Val = (Val-=5 ));           // Se il valore e' minore lo amento di uno step
    digitalWrite(PinMax, LOW);   // Spengo l'uscita che segnala il livello massimo
  } else {;                      // Se il livello e' minore al livello minimo
    digitalWrite(PinMin, HIGH);  // Accendo l'uscita che segnala il livello minimo
  };                             //
}                                //
void azzera(){                   // Funzione per azzerare l'intensita'
  digitalWrite(PinMax, LOW);     // Spengo l'uscita che segnala il livello massimo
  digitalWrite(PinMin, LOW);     // Spengo l'uscita che segnala il livello minimo
  (Val = LivRes);                // Setto l'intensita al livello di reset
}                                //

Jaba81

Ciao! Allora potresti risparmiare qualche byte di ram definendo delle costasti al posto delle variabili per i pin da te utilizzati.
Un' altra cosuccia...è l' assegnazione che fai in val.... magari si puo semplificare un po' :wink:
Per il resto stai facendo un polling sui pin a cui ti sei connesso con dei pulsanti....potresti utilizzare gli interrupt.
ciao ciao

Grazie per la risposta.

Jaba