Time lapse , cerco aiuto e soluzioni

Ciao a tutti
Vorrei chiederVi un aiuto su come risolvere alcuni problemi.Allora, sto realizzando l’ennesimo progetto di centralina per fare Time Lapse, altro non è che una sorta di autoscatto per macchine fotografiche che scatta foto ad intervalli di tempo impostati. Visto che non tutte le macchine fotografiche ce l’hanno Onborad ho deciso di farmelo da me. Siccome non sono molto bravo nella programmazione sono partito per gradi. Ho iniziato a studiare un pò la programmazione di base, l’inclusione della Liquidcrystal, e qualche altra cosa. Ora la centralina è composta da 3 pulsanti n.a.( uno per aumento tempo intervallo [+] , uno per il decremento[-] , uno per lo start/stop conteggio), un display e un led IR per comandare da remoto la macchina.
vorrei che mi aiutaste nel migliorare la programmazione ,sopratutto per alcuni problemi:

1- non riesco a trovare la soluzione per far si che ad OGNI pressione dei bottoni di + e - il conteggio mi vari di 1 sola unità anzichè qualche centianio ( credo sia dovuto al problema del ciclo if che viene ripetuto tante volte in un secondo).

2- come posso fare per capire se la sequenza è partita o meno?

3- vorrei inserire un menu per impostare il nr di foto da scattare , non sò usare la libreria apposita x MENU, ci sono altri modi per ovviare a questo problema?

vi chiedo aiuto per favore : grazie

#include <multiCameraIrControl.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // definisce ingressi lcd
Nikon D60 (8); // definisce pin del Led di comando remoto e il modello della macchina fotografica dalla libreria
int ButtplusPin = 6; // definisce il pin del bottone per incremento
int ButtminusPin = 7; // definisce il pin del bottone per decremento
int BstartstopPin = 9; // definisce il pin del bottone di start/stop
int Tintervallo = 0; // tempo intervallo tra gli scatti
int conteggio =0; // variabile conteggio pressioni del bottone UP (valore di partenza pari a Zero pressioni)
// const int conteggioDW =0; //variabile conteggio pressioni bottone DW
int statoattualeUP =0; // variabile stato del bottone UP (parto da ZERO)
int statoattualeDW =0; //variabile stato del bottone DW (parto da Zero)
int startstop =0; //variabile che se =0 corrisponde a Stop , se uguale a 1 inizia la sequenza
int viastop =0;
//int statoprecedenteUP =0; // variabile stato precedene bottone UP
//const int statoprecedenteDW = 0; //variabile stato precedente bottone DW

void setup() {
lcd.begin(16,2); //definizione specifiche Lcd 2 righe 16 colonne
// pinMode(D60,OUTPUT); // definisce il pin led come USCITA
pinMode(ButtplusPin,INPUT); //definisce il pin del bottone incremento come INGRESSO
pinMode(ButtminusPin,INPUT);//definisce il pin del bottone decremento come INGRESSO
pinMode(BstartstopPin,INPUT); //definisce il pin del bottone start/stop come INGRESSO
lcd.setCursor(0, 0);// set the cursor to (0,0):
lcd.print (“Time Lapse rel.2”); //scrive sul display alla prima riga il testo virgolettato
lcd.setCursor(0,1); // sposta il cursore alla riga 2 colonna 1
lcd.print(“Max996duino”); //scrive sul display il testo virgolettato
delay(3000); //ritarda di 3 secondi la lettura del testo
lcd.clear(); //pulisce la schermata
lcd.print(“interv.scatto:”); // scrive su display ‘interv.scatto:’

}
void loop() {
statoattualeUP = digitalRead(ButtplusPin); //associa alla variabile “statoattualeUp” il valore ottenuto dal pin BUTTPLUSPIN
statoattualeDW = digitalRead(ButtminusPin);// associa alla variabile “statoattualedw” il valore ottenuto dal pin BUTTMINUSPIN
viastop = digitalRead(BstartstopPin); // associa alla variabile “viastop” il valore ottenuto dal pin BstartstopPin
if (statoattualeUP == HIGH && conteggio>=0 ){ //se il valore di statoattualeUP è ALTO AND il valore di CONTEGGIO è maggiore o uguale a Zero
conteggio++;} // incrementa la var. CONTEGGIO di 1 unità
if (statoattualeDW == HIGH && conteggio > 0 ){ //se il valore di statoattualeDW è ALTO AND il valore di Conteggio è MAGGIORE di Zero
conteggio–;} //decrementa la variabile CONTEGGIO di 1 unità
// else (conteggio=0); //altrimenti forza il valore di CONTEGGIO pari a Zero
Tintervallo = (1000* conteggio); // associo alla variabile Tintervallo il valore della variabile Conteggio moltiplicato per 1000 (trasformo millis in secondi)
lcd.setCursor(0,1); //posiziona il cursore nella seconda riga
lcd.print(conteggio );// scrive sul display il valore del nr di pressioni contenute nella variabile conteggio che corrisponde ai secondi tra uno scatto e l’altro
lcd.print( " s"); // scrive S dopo il valore del tempo intervallo
if (viastop == HIGH && startstop==0){ // se il valore logico di Bstartstop ( bottone start stop) è ALto AND pari a 0
startstop++;// incrementa ad 1 il valore della variabile startstop (parte da 0)
void scatti(); } //passa alla procedura di scatto
if (viastop == HIGH && startstop==1){
void loop();}
}

void scatti(){ //procedura chiamata SCATTI
for (int foto=0; foto < 1000; foto++){ //ciclo che prevede la ripetizione di 999 volte lo scatto
D60.shutterNow(); //comando scatto libreria nikon
delay(Tintervallo); //ritarda lo scatto successivo della durata dell’intervallo importato dal valore di CONTEGGIO
}
}

nessuno sà come posso fare?

non ci credo

max996duino:
...
1- non riesco a trovare la soluzione per far si che ad OGNI pressione dei bottoni di + e - il conteggio mi vari di 1 sola unità anzichè qualche centianio ( credo sia dovuto al problema del ciclo if che viene ripetuto tante volte in un secondo).
...

il secondo esempio e' uno dei sistemi possibili ... :wink:

altro esempio piu "esteso" come possibilita' :wink: