TriggerT: Trigger multiuso – terza parte

In questo terzo articolo capirai altre righe di codice del progetto di Alessandro.

triggert vista lato frontale

su oltre 2000 righe non è facile districarsi ma è il bello di progetti così articolati 🙂

Se ti sei perso le prime due parti puoi leggerle qui:

TriggerT: Trigger multiuso – prima parte

TriggerT: Trigger multiuso – seconda parte

Riprendi lo sketch:

// *-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-*
// |                                                                       |
// |                      -_-TriggerT by Travis9011 -_-                    |                                                         
// |                                                                       |
// |             ©2012 www.snapadventure.it - Alessandro Travi             |
// |                                                                       |
// *-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-*


#include <LiquidCrystal.h>  //Libreria per LCD
 
#define ENTER  11            //Pin a cui e' collegato il tasto Enter
#define ESC  10             //Pin a cui e' collegato il tasto Esc
#define BACKLIGHT  9             
#define MENO  8            //Pin a cui e' collegato il tasto Meno
#define OPTION  1
#define PIU  0          //Pin a cui e' collegato il tasto Piu 

boolean piu_set = LOW, meno_set = LOW, option_set = LOW;
unsigned int n_piu, n_meno;
byte i = 0;
int NScatti=300;
int NScattiSetting;
unsigned int principale = 0, principale1=0, principale2=0, principale3=0, principale4=0, mode=0; 
boolean piu = LOW, meno = LOW, enter, esc, option;//Variabili associate ai quattro pulsanti nella modalita' scorrimento pagine
boolean piu0 = LOW, meno0 = LOW, enter0;
boolean set = LOW;//Entra nella modalita' settaggio
boolean set0 = LOW;

boolean setenter = LOW;//Entra nella modalita' settaggio
long tempo_btn = 0, debounce = 190;  //Tempo tra due letture successive di un bottone (300 ms)

unsigned long contaimpulsopiu =0;
unsigned long contaimpulsomeno =0;

unsigned long currentTime;
unsigned long loopTime; 

/*=========== Variabili Macchina Fotografica =========================================================================================================*/

int shutter_on = 200;//tempo di pressione per attivare la cam, da settare intorno i 100 e 300
int lampo = 100;
long otturatore = 0; //posa B
long attesa = 0, attesas = 0, attesal = 0, attesaPIR = 0;
float shutter_off = 4000; // tempo di attesa intervallo
float shutter_off_setting=0;
long shutter_offL = 0;
long shutter_off_settingL=0;

int light =0;
int passaggio=0;
int wakeup = 300; //tempo per il fuoco
int wakewait = 200; //tempo risveglio / scatto
int outpin = 12; //uscita per lo scatto

int flash = 16;//uscita flash
int LDR = 5; //analogico
int SUONO = 4; //analogico
int EXT = 3; //analogico
int EXT_DIGIT = 17; //digitale
int letturaLDR = 0;
int letturaSuono = 0;
int letturaSuonoimp = 0;
int sensSuono = 100, sensSuonosetting = 3;
int sensLDR = 60, sensLDRsetting = 3;
int sensLDRLaser = 25, sensLDRLasersetting = 3;
int sogliaLDR = 0;
int sogliaSuono = 0;
int setsensorLuce = 0,setsensorSuono = 0,setsensorLaser = 0;
int setmod = 0, setmodL = 0, setmodPIR = 0;

/*SIMBOLI*/

byte symbolstop[8] = {
B00000,
B11111,
B11111,
B11111,
B11111,
B11111,
B00000,
};
byte symbolplay[8] = {
B00000,
B10000,
B11000,
B11100,
B11000,
B10000,
B00000,
};

byte symbolnormal[8] = {
B00000,
B01110,
B11111,
B11111,
B11111,
B01110,
B00000,
};

byte symbolmod[8] = {
B00000,
B00100,
B01110,
B11111,
B01110,
B00100,
B00000,
};

byte symbolsens[8] = {
B00000,
B01110,
B01110,
B01110,
B01110,
B01110,
B00000,
};

byte symbolsensno[8] = {
B00000,
B01110,
B01010,
B01010,
B01010,
B01110,
B00000,
};

//Display LCD
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

void setup()
{
  currentTime = millis();
  loopTime = currentTime;
  pinMode(BACKLIGHT, OUTPUT); 
  digitalWrite(BACKLIGHT, HIGH);
  lcd.begin(8, 2);


  pinMode(ENTER, INPUT);
  pinMode(ESC, INPUT);
  pinMode(PIU, INPUT);
  pinMode(MENO, INPUT);
  pinMode(OPTION, INPUT);
  pinMode(SUONO,INPUT);
  pinMode(outpin, OUTPUT); 

  pinMode(flash, OUTPUT);
  
  NScattiSetting=NScatti;
  lcd.createChar(1, symbolstop);
  lcd.createChar(2, symbolplay);
  lcd.createChar(3, symbolmod);
  lcd.createChar(4, symbolnormal);
  lcd.createChar(5, symbolsens);
  lcd.createChar(6, symbolsensno);
  
  
  lcd.setCursor(0,0);
  lcd.print("TriggerT");
  lcd.setCursor(0,1);
  lcd.print("  v1.5  ");
  delay(3000);
  lcd.setCursor(0,0);
  lcd.print("   by   ");
   lcd.setCursor(0,1);
  lcd.print(" Travis ");
  delay(2000);
  lcd.clear();

}

void loop(){
  
  shutter_off_setting=shutter_off;
  backlight();
//LETTURA PULSANTI
if(set == LOW)
  {
    piu = digitalRead(PIU);
    meno = digitalRead(MENO);
    option = digitalRead(OPTION);
  }
  enter = digitalRead(ENTER);
  esc = digitalRead(ESC);
  


  //Se premo PIU incremento di uno il contatore pagine
  if(meno == HIGH && millis() - tempo_btn > debounce)
  {
    
    tempo_btn = millis();
    if(principale >= 0 && principale < 5){
    principale++;}
    
    if(principale1 >= 0 && principale1 < 5){
      principale1++;}
    if(principale2 >= 0 && principale2 < 6){
      principale2++;}
    if(principale3 >= 0 && principale3 < 6){
      principale3++;}
    if(principale4 >= 0 && principale4 < 4){
      principale4++;}
    
    if(principale == 4){
      principale = 0;}
    if(principale1 == 4){
      principale1 = 0;}
    if(principale2 == 5){
      principale2 = 0;}
    if(principale3 == 5){
      principale3 = 0;}
    if(principale4 == 3){
      principale4 = 0;}
  }

  //Se premo MENO decremento il contatore pagine
  if(piu == HIGH && millis() - tempo_btn > debounce)
  {
    
    tempo_btn = millis();
    if(principale > 0 && principale < 5){
    principale--;}
    if(principale1 > 0 && principale1 < 5){
      principale1--;
   }
   if(principale2 > 0 && principale2 < 6){
     principale2--;
   }
   if(principale3 > 0 && principale3 < 5){
     principale3--;
   }
   if(principale4 > 0 && principale4 < 4){
     principale4--;
   }
 }


  //Se premo ESC torno alla schermata Home uscendo anche da tutti i sottomenu
  if(esc == HIGH && millis() - tempo_btn > debounce)  //Quando premo "esc" torno alla schermata HOME
  {
    
    tempo_btn = millis();
    if(mode==0){
    principale = 0;}
    
    else if(mode==1){
    principale1 = 0;}
    
    else if(mode==2){
    principale2 = 0;}
    
    else if(mode==3){
    principale3 = 0;}
    
    else if(mode==4){
    principale4 = 0;}
    
    set = LOW;
  }
  
  
   if(option == HIGH && millis() - tempo_btn > debounce && mode >= 0 && mode < 5)  //Quando premo "esc" torno alla schermata HOME
  {
   
    principale=0;
    principale1=0;
    principale2=0;
    principale3=0;
    principale4=0;
    tempo_btn = millis();
     mode++;
     if(mode == 5)
      mode = 0;
    
  }
  
  
  /*----------------------------INTERVALLOMETRO-------------------------*/
  if(mode==0){
  switch (principale)
  {
  case 0:    //Schermata HOME

    // codice per pagina nr. 0 (HOME)
    lcd.setCursor(0,0);
    lcd.print("Timer         ");
    lcd.setCursor(0,1);
    lcd.print("Scatti               ");

if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      NScatti=NScattiSetting;
      tempo_btn = millis();
      set = !set;
    }
    
     
   if(set == HIGH)
    { 
      digitalWrite(BACKLIGHT, LOW);
      if(NScatti!=0 && otturatore == 0){
        
        NScatti--; //decrementa numero scatti mancante
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Next:");
        
        lcd.setCursor(0,1);
        lcd.print("Fine:");
        lcd.print(NScatti);
        

        delay(wakewait); //Prepara per lo scatto
        scatto();
        
        shutter_off_setting=shutter_off_setting-1000;
        while (shutter_off_setting > 0){
          lcd.setCursor(5,0);
          shutter_off_settingL=shutter_off_setting;
          lcd.print(shutter_off_settingL/1000);
          lcd.print("\"");
          lcd.print("           ");
          shutter_off_setting = shutter_off_setting-500;
          delay(500);

        }
        

       }
       
       else if(NScatti!=0 && otturatore != 0){
        
        NScatti--; //decrementa numero scatti mancante
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Next:");
        
        lcd.setCursor(0,1);
        lcd.print("Fine:");
        lcd.print(NScatti);
        
        delay(wakewait); //Prepara per lo scatto
        lcd.setCursor(8,0);
        lcd.print("B");
        digitalWrite(outpin, HIGH); //Scatta
        delay(otturatore+500); //tempo otturatore aperto
        digitalWrite(outpin, LOW); //Stop scatto
        
        shutter_off_setting=shutter_off_setting-500;
        while (shutter_off_setting > 0){
          lcd.setCursor(5,0);
          shutter_off_settingL=shutter_off_setting;
          lcd.print(shutter_off_settingL/1000);
          lcd.print("\"");
          lcd.print("                      ");
          shutter_off_setting = shutter_off_setting-500;
          delay(500);

        }
        

       }
       
        else if(NScatti==0){
          digitalWrite(BACKLIGHT, HIGH);
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("Finito!     ");
          lcd.setCursor(0,1);
          lcd.print("A casa!      ");
          delay(4000);
          
          set = !set;
        }
    }
    
    
    
    break;
    
    case 1:
    
    lcd.setCursor(0,0);
    lcd.print("Set Int            ");

    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        
        shutter_off=shutter_off+1000;
      }

      if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        meno_set = !meno_set;
        if( shutter_off > 0 )
          shutter_off=shutter_off-1000;
      }
    }
    lcd.setCursor(0,1);  //Scrivo il numero di scatti
    if(shutter_off<60000){
    shutter_offL =shutter_off;
    lcd.print(shutter_offL/1000);
    lcd.print("\"");
                        
                       }
    
    else conversioneminutif(shutter_off);
   
    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

    
    
  break;
  
  case 2:
  
    lcd.setCursor(0,0);
    lcd.print("N Scatti            ");
      
  if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
      
    }


    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);
   
   if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        NScattiSetting++;
        
        contaimpulsopiu++;
        
        if (contaimpulsopiu>10) { 
    
          NScattiSetting=NScattiSetting+10;
    
            }
        
        }
        else if(piu_set == LOW){ contaimpulsopiu=0;}
      
      
       if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        
        meno_set = !meno_set;
        if( NScattiSetting > 0 )
        {
          NScattiSetting--;
        contaimpulsomeno++;
        
        if (contaimpulsomeno>10) {
        NScattiSetting=NScattiSetting-10;
          if(NScattiSetting<0){NScattiSetting=0;}
                                  }
        }
          
      }
     
   else if(meno_set == LOW){ contaimpulsomeno=0;}
    }

    lcd.setCursor(0,1);  //Scrivo il numero di scatti
    lcd.print(NScattiSetting);

    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}
      


    break;
    
    case 3:   // Set Bulb
    lcd.setCursor(0,0);
    lcd.print("Bulb                      ");
      
  if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
      
    }


    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);
      


     

      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        otturatore=otturatore+1000;
        contaimpulsopiu++;
        if(contaimpulsopiu>15){
        otturatore=otturatore+10000;
        }
        
        }
        else if(piu_set == LOW){contaimpulsopiu=0;}
      
       if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        meno_set = !meno_set;
        if( otturatore > 0 )
          otturatore=otturatore-1000;
          contaimpulsomeno++;
        if(contaimpulsomeno>15){
        otturatore=otturatore-10000;
        }
      }
      else if(meno_set == LOW){contaimpulsomeno=0;}
    }

    lcd.setCursor(0,1);  
    
    
    if(otturatore!=0 && otturatore<60000) {
     lcd.print(otturatore/1000);
     lcd.print("\"");
     
     }
     
     if(otturatore>=60000){
       
       conversioneminuti(otturatore);
        
                           }
     
      
    if(otturatore == 0) lcd.print("No");
    
   
    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}
      
      break;
     }//switch
   }//if
   
   
   /*-------------------------------Trigger LUCE---------------------------*/
   if(mode==1){
  switch (principale1)
  {
  case 0:    //Schermata HOME
  
  option_set = digitalRead(OPTION);
  meno_set = digitalRead(MENO);
  piu_set = digitalRead(PIU);
  

    // codice per pagina nr. 0 (HOME)
    lcd.setCursor(0,0);
    lcd.print("Trigger     ");
    

if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      
      tempo_btn = millis();
      set = !set;
    }
    
     
   
      
    if(set == HIGH)
    { 
      if(setsensorLuce==0){
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaLDR=analogRead(LDR);
      sogliaLDR=letturaLDR+sensLDR;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaLDR=analogRead(LDR);
      if(letturaLDR > sogliaLDR){
        lcd.setCursor(0,0);
        lcd.print("Soglia       ");
        lcd.setCursor(0,1);
        lcd.print("Luce!        ");
        delay(attesa);
        scatto();
        
        delay(800);
        
    }}
    
    }//if sensore Interno
    
    else if(setsensorLuce!=0){
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaLDR=analogRead(EXT);
      sogliaLDR=letturaLDR+sensLDR;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaLDR=analogRead(EXT);
      if(letturaLDR > sogliaLDR){
        lcd.setCursor(0,0);
        lcd.print("Soglia       ");
        lcd.setCursor(0,1);
        lcd.print("Luce!        ");
        delay(attesa);
        scatto();

        delay(1000);
        
    }}
    
    }//if sensore ESTERNO
    
   }
    lcd.setCursor(0,1);
    if(set == LOW){
      passaggio=0;
      lcd.print("Luce   ");
    
    lcd.write(1);
    lcd.print("            ");}
    else{
      lcd.print("Luce   ");
    
    lcd.write(2);
    lcd.print("            ");}
    
    break;
    
    case 1:
    
    lcd.setCursor(0,0);
    lcd.print("Sensore         ");

    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        if(setsensorLuce < 1)
        setsensorLuce++;
      }

      if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        meno_set = !meno_set;
        if( setsensorLuce > 0 )
          setsensorLuce--;
      }
    }
    lcd.setCursor(0,1);  //Scrivo il numero di scatti
    if(setsensorLuce==0){
    lcd.print("In");
    }
    else lcd.print("Ext");
   
    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

  break;
  
  case 2:
  
    lcd.setCursor(0,0);
    lcd.print("Sensib.              ");
    
    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        if(sensLDRsetting < 5)
        sensLDRsetting++;
      }

      if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        meno_set = !meno_set;
        if( sensLDRsetting > 0 )
          sensLDRsetting--;
      }
    }
    lcd.setCursor(0,1);
    //lcd.print(sensLDRsetting);
    
    if(sensLDRsetting==0){sensLDR=350; lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6);}
    
    else if(sensLDRsetting==1){sensLDR=225; lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6);}
    else if(sensLDRsetting==2){sensLDR=100; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6);}
    else if(sensLDRsetting==3){sensLDR=60; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6);}
    else if(sensLDRsetting==4){sensLDR=30;lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6);}
    else if(sensLDRsetting==5){sensLDR=15; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5);}
   
    if(set == LOW){
      
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
     
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

  break;
  
  case 3:
  
    lcd.setCursor(0,0);
    lcd.print("Delay              ");
    
    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        if (attesa<1000){
        attesa=attesa+10;
        
        contaimpulsopiu++;}
        
        if (contaimpulsopiu>10) { 
    
          attesa=attesa+30;
          if (attesa>1000){attesa=1000;}
    
            }
            
           
        }
        else if(piu_set == LOW){ contaimpulsopiu=0;}
      
      
       if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        
        meno_set = !meno_set;
        if( attesa > 0 )
        {
          attesa=attesa-10;
        contaimpulsomeno++;
        
        if (contaimpulsomeno>10) {
        attesa=attesa-30;
          if(attesa<0){attesa=0;}
                                  }
        }
          
      }
     
   else if(meno_set == LOW){ contaimpulsomeno=0;}
    }

    lcd.setCursor(0,1);  //Scrivo il numero di scatti
    
     if(attesa==1000){lcd.print(attesa/1000); lcd.print("\"   ");}
     else{lcd.print(attesa); lcd.print("ms   ");}

    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

  break;
    
     }//switch
   }//if
  
  
   /*-------------------------------Trigger SUONO-------------------------------*/
   if(mode==2){
  switch (principale2)
  {
  case 0:    //Schermata HOME
    
    option_set = digitalRead(OPTION);
    meno_set = digitalRead(MENO);
    piu_set = digitalRead(PIU);
    lcd.setCursor(0,0);
    lcd.print("Trigger     ");
    

if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      
      tempo_btn = millis();
      set = !set;
    }
    
     
   if(set == HIGH)
    { 
      
   /*----------------------Sensore INT e Modalità Reflex-----------------*/
      if(setsensorSuono==0 && setmod==1){ 
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaSuonoimp=analogRead(SUONO);
      letturaSuono = constrain(abs(letturaSuonoimp - 512)-25,0,512);
      sogliaSuono=letturaSuono+sensSuono;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaSuonoimp=analogRead(SUONO);
        letturaSuono = constrain(abs(letturaSuonoimp - 512)-25,0,512);
      if(letturaSuono > sogliaSuono){
        lcd.setCursor(0,0);
        lcd.print("Soglia       ");
        lcd.setCursor(0,1);
        lcd.print("Suono!        ");
        delay(attesas);
        scatto();
        
        delay(800);
        
        }}
        
    }// IF sensore e modalità
  
  /*----------------------Sensore EXT e Modalità Reflex-----------------*/  
    else if(setsensorSuono==1 && setmod==1){ 
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaSuonoimp=analogRead(EXT);
      letturaSuono = constrain(abs(letturaSuonoimp - 512)-25,0,512);
      sogliaSuono=letturaSuono+sensSuono;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaSuonoimp=analogRead(EXT);
        letturaSuono = constrain(abs(letturaSuonoimp - 512)-25,0,512);
      if(letturaSuono > sogliaSuono){
        lcd.setCursor(0,0);
        lcd.print("Soglia       ");
        lcd.setCursor(0,1);
        lcd.print("Suono!        ");
        delay(attesas);
        scatto();
        
        delay(800);
        
        }}
        
    }// IF sensore e modalità
    
   /*----------------------Sensore INT e Modalità Flash-----------------*/
    else if(setsensorSuono==0 && setmod==0){ 
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaSuonoimp=analogRead(SUONO);
      letturaSuono = constrain(abs(letturaSuonoimp - 512)-25,0,512);
      sogliaSuono=letturaSuono+sensSuono;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaSuonoimp=analogRead(SUONO);
        letturaSuono = constrain(abs(letturaSuonoimp - 512)-25,0,512);
      if(letturaSuono > sogliaSuono){
        lcd.setCursor(0,0);
        lcd.print("Soglia       ");
        lcd.setCursor(0,1);
        lcd.print("Suono!        ");
        delay(attesas);
         lampeggio();
        
        delay(800);
        
        }}
        
    }// IF sensore e modalità
    
  /*----------------------Sensore EXT e Modalità Flash-----------------*/
    else if(setsensorSuono==1 && setmod==0){ 
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaSuonoimp=analogRead(EXT);
      letturaSuono = constrain(abs(letturaSuonoimp - 512)-25,0,512);
      sogliaSuono=letturaSuono+sensSuono;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaSuonoimp=analogRead(EXT);
        letturaSuono = constrain(abs(letturaSuonoimp - 512)-25,0,512);
      if(letturaSuono > sogliaSuono){
        lcd.setCursor(0,0);
        lcd.print("Soglia       ");
        lcd.setCursor(0,1);
        lcd.print("Suono!        ");
        delay(attesas);
        lampeggio();
        
        delay(800);
        
        }}
        
    }// IF sensore e modalità
    
  /*----------------------Sensore INT e Modalità Mista-----------------*/
    else if(setsensorSuono==0 && setmod==2){ 
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaSuonoimp=analogRead(SUONO);
      letturaSuono = constrain(abs(letturaSuonoimp - 512)-25,0,512);
      sogliaSuono=letturaSuono+sensSuono;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaSuonoimp=analogRead(SUONO);
        letturaSuono = constrain(abs(letturaSuonoimp - 512)-25,0,512);
      if(letturaSuono > sogliaSuono){
        lcd.setCursor(0,0);
        lcd.print("Soglia       ");
        lcd.setCursor(0,1);
        lcd.print("Suono!        ");
        delay(attesas);
        misto();
        
        delay(800);
        
        }}
        
    }// IF sensore e modalità
    
  /*----------------------Sensore EXT e Modalità Mista-----------------*/
    else if(setsensorSuono==1 && setmod==2){ 
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaSuonoimp=analogRead(EXT);
      letturaSuono = constrain(abs(letturaSuonoimp - 512)-25,0,512);
      sogliaSuono=letturaSuono+sensSuono;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaSuonoimp=analogRead(EXT);
        letturaSuono = constrain(abs(letturaSuonoimp - 512)-25,0,512);
      if(letturaSuono > sogliaSuono){
        lcd.setCursor(0,0);
        lcd.print("Soglia       ");
        lcd.setCursor(0,1);
        lcd.print("Suono!        ");
        delay(attesas);
        misto();
        
        delay(800);
        
        }}
        
    }// IF sensore e modalità
    
    }
        
        lcd.setCursor(0,1);
    if(set == LOW){
      passaggio=0;
      lcd.print("Suono  ");
    
    lcd.write(1);
    lcd.print("            ");}
    else{
      lcd.print("Suono  ");
    
    lcd.write(2);
    lcd.print("            ");}
    
    break;
    
    case 1:
    
    lcd.setCursor(0,0);
    lcd.print("Set Mod         ");

    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        if(setmod < 2)
        setmod++;
      }

      if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        meno_set = !meno_set;
        if( setmod > 0 )
          setmod--;
      }
    }
    lcd.setCursor(0,1);  //Scrivo il numero di scatti
    if(setmod==0){lcd.print("Flash            ");}
    else if(setmod==1){ lcd.print("Reflex       ");}
    else lcd.print("Ref+Fl     ");
   
    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

  break;
  
  case 2:
    
    lcd.setCursor(0,0);
    lcd.print("Sensore         ");

    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        if(setsensorSuono < 1)
        setsensorSuono++;
      }

      if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        meno_set = !meno_set;
        if( setsensorSuono > 0 )
          setsensorSuono--;
      }
    }
    lcd.setCursor(0,1);  //Scrivo il numero di scatti
    if(setsensorSuono==0){
    lcd.print("In");
    }
    else lcd.print("Ext");
   
    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

  break;
  
  case 3:
  
  lcd.setCursor(0,0);
    lcd.print("Sensib.              ");
    
    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        if(sensSuonosetting < 5)
        sensSuonosetting++;
      }

      if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        meno_set = !meno_set;
        if( sensSuonosetting > 0 )
          sensSuonosetting--;
      }
    }
    lcd.setCursor(0,1);
   
    
    if(sensSuonosetting==0){sensSuono=350; lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6);}
    
    else if(sensSuonosetting==1){sensSuono=220; lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6);}
    else if(sensSuonosetting==2){sensSuono=150; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6);}
    else if(sensSuonosetting==3){sensSuono=100; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6);}
    else if(sensSuonosetting==4){sensSuono=50;  lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6);}
    else if(sensSuonosetting==5){sensSuono=15;  lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5);}
   
    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

  break;
  
  case 4:
  
    lcd.setCursor(0,0);
    lcd.print("Delay              ");
    
    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        if (attesas<1000){
        attesas=attesas+10;
        
        contaimpulsopiu++;}
        
        if (contaimpulsopiu>10) { 
    
          attesas=attesas+30;
          if (attesas>1000){attesas=1000;}
    
            }
            
           
        }
        else if(piu_set == LOW){ contaimpulsopiu=0;}
      
      
       if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        
        meno_set = !meno_set;
        if( attesas > 0 )
        {
          attesas=attesas-10;
        contaimpulsomeno++;
        
        if (contaimpulsomeno>10) {
        attesas=attesas-30;
          if(attesas<0){attesas=0;}
                                  }
        }
          
      }
     
   else if(meno_set == LOW){ contaimpulsomeno=0;}
    }

    lcd.setCursor(0,1);  //Scrivo il numero di scatti
    
     if(attesas==1000){lcd.print(attesas/1000); lcd.print("\"   ");}
     else{lcd.print(attesas); lcd.print("ms   ");}

    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

  break;
    
     }//switch
   }//if
  
  
   /*-------------------------------Trigger LASER----------------------------*/
    if(mode==3){
  switch (principale3)
  {
  case 0:    //Schermata HOME
  
  option_set = digitalRead(OPTION);
  meno_set = digitalRead(MENO);
  piu_set = digitalRead(PIU);
   
  

    // codice per pagina nr. 0 (HOME)
    lcd.setCursor(0,0);
    lcd.print("Trigger     ");
    

if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      
      tempo_btn = millis();
      set = !set;
    }
    
     
   if(set == HIGH)
    { 
      /*------Mod Laser Sensore interno e scatto flash---------*/
      if(setmodL==0 && setsensorLaser==0){
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaLDR=analogRead(LDR);
      sogliaLDR=letturaLDR-sensLDRLaser;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaLDR=analogRead(LDR);
      if(letturaLDR < sogliaLDR){
        lcd.setCursor(0,0);
        lcd.print("Barriera       ");
        lcd.setCursor(0,1);
        lcd.print("Fermata!        ");
        delay(attesal);
        lampeggio();
        
        delay(800);
        
    }}
      }
       /*------Mod Laser Sensore interno e scatto Reflex---------*/
      if(setmodL==1 && setsensorLaser==0){
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaLDR=analogRead(LDR);
      sogliaLDR=letturaLDR-sensLDRLaser;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaLDR=analogRead(LDR);
      if(letturaLDR < sogliaLDR){
        lcd.setCursor(0,0);
        lcd.print("Barriera       ");
        lcd.setCursor(0,1);
        lcd.print("Fermata!        ");
        delay(attesal);
        scatto();
        
        delay(800);
        
    }}
      }
      
      /*------Mod Laser Sensore esterno e scatto flash---------*/
      if(setmodL==0 && setsensorLaser==1){
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaLDR=analogRead(EXT);
      sogliaLDR=letturaLDR-sensLDRLaser;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaLDR=analogRead(EXT);
      if(letturaLDR < sogliaLDR){
        lcd.setCursor(0,0);
        lcd.print("Barriera       ");
        lcd.setCursor(0,1);
        lcd.print("Fermata!        ");
        delay(attesal);
        lampeggio();
        
        delay(800);
        
    }}
      }
       /*------Mod Laser Sensore esterno e scatto Reflex---------*/
      if(setmodL==1 && setsensorLaser==1){
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaLDR=analogRead(EXT);
      sogliaLDR=letturaLDR-sensLDRLaser;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaLDR=analogRead(EXT);
      if(letturaLDR < sogliaLDR){
        lcd.setCursor(0,0);
        lcd.print("Barriera       ");
        lcd.setCursor(0,1);
        lcd.print("Fermata!        ");
        delay(attesal);
        scatto();
        
        delay(800);
        
    }}
      }
      
       /*------Mod Laser Sensore interno e scatto Misto---------*/
      if(setmodL==1 && setsensorLaser==0){
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaLDR=analogRead(LDR);
      sogliaLDR=letturaLDR-sensLDRLaser;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaLDR=analogRead(LDR);
      if(letturaLDR < sogliaLDR){
        lcd.setCursor(0,0);
        lcd.print("Barriera       ");
        lcd.setCursor(0,1);
        lcd.print("Fermata!        ");
        delay(attesal);
        misto();
        
        delay(800);
        
    }}
      }
      
      /*------Mod Laser Sensore esterno e scatto Misto---------*/
      if(setmodL==1 && setsensorLaser==1){
     if(passaggio==0 || option_set == HIGH){
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.print("Calib...");
      letturaLDR=analogRead(EXT);
      sogliaLDR=letturaLDR-sensLDRLaser;
      delay(1500);
      passaggio++;
    }
      
      else if(passaggio =!0){
        letturaLDR=analogRead(EXT);
      if(letturaLDR < sogliaLDR){
        lcd.setCursor(0,0);
        lcd.print("Barriera       ");
        lcd.setCursor(0,1);
        lcd.print("Fermata!        ");
        delay(attesal);
        misto();
        
        delay(800);
        
    }}
      }
      
   }
    lcd.setCursor(0,1);
    if(set == LOW){
      passaggio=0;
      lcd.print("Laser  ");
    
    lcd.write(1);
    lcd.print("            ");}
    else{
      lcd.print("Laser  ");
    
    lcd.write(2);
    lcd.print("            ");}
    
    break;
    
    case 1:
    
    lcd.setCursor(0,0);
    lcd.print("Set Mod         ");

    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        if(setmodL < 2)
        setmodL++;
      }

      if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        meno_set = !meno_set;
        if( setmodL > 0 )
          setmodL--;
      }
    }
    lcd.setCursor(0,1);  //Scrivo il numero di scatti
    if(setmodL==0){lcd.print("Flash            ");}
    else if(setmodL==1){lcd.print("Reflex       ");}
    else lcd.print("Ref+Fl");
   
    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

  break;
    
    case 2:
    
    lcd.setCursor(0,0);
    lcd.print("Sensore         ");

    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        if(setsensorLaser < 1)
        setsensorLaser++;
      }

      if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        meno_set = !meno_set;
        if( setsensorLaser > 0 )
          setsensorLaser--;
      }
    }
    lcd.setCursor(0,1);  //Scrivo il numero di scatti
    if(setsensorLaser==0){
    lcd.print("In");
    }
    else lcd.print("Ext");
   
    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

  break;
  
  case 3:
  
    lcd.setCursor(0,0);
    lcd.print("Sensib.              ");
    
    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        if(sensLDRLasersetting < 5)
        sensLDRLasersetting++;
      }

      if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        meno_set = !meno_set;
        if( sensLDRLasersetting > 0 )
         sensLDRLasersetting--;
      }
    }
    lcd.setCursor(0,1);
    
    
    if(sensLDRLasersetting==0){sensLDRLaser=25; lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6);}
    
    else if(sensLDRLasersetting==1){sensLDRLaser=20; lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6);}
    else if(sensLDRLasersetting==2){sensLDRLaser=15; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6);}
    else if(sensLDRLasersetting==3){sensLDRLaser=10; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6);}
    else if(sensLDRLasersetting==4){sensLDRLaser=5;  lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6);}
    else if(sensLDRLasersetting==5){sensLDRLaser=2;  lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5);}
   
    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

  break;
  
  case 4:
  
    lcd.setCursor(0,0);
    lcd.print("Delay              ");
    
    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        if (attesal<1000){
        attesal=attesal+10;
        
        contaimpulsopiu++;}
        
        if (contaimpulsopiu>10) { 
    
          attesal=attesal+30;
          if (attesal>1000){attesal=1000;}
    
            }
            
           
        }
        else if(piu_set == LOW){ contaimpulsopiu=0;}
      
      
       if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        
        meno_set = !meno_set;
        if( attesal > 0 )
        {
          attesal=attesal-10;
        contaimpulsomeno++;
        
        if (contaimpulsomeno>10) {
        attesal=attesal-30;
          if(attesal<0){attesal=0;}
                                  }
        }
          
      }
     
   else if(meno_set == LOW){ contaimpulsomeno=0;}
    }

    lcd.setCursor(0,1);  //Scrivo il numero di scatti
    
     if(attesal==1000){lcd.print(attesal/1000); lcd.print("\"   ");}
     else{lcd.print(attesal); lcd.print("ms   ");}

    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

  break;
    
     }//switch
   }//if
   
   /*-------------------------------Trigger Movimento----------------------------*/
    if(mode==4){
  switch (principale4)
  {
  case 0:    //Schermata HOME
  
  option_set = digitalRead(OPTION);
  meno_set = digitalRead(MENO);
  piu_set = digitalRead(PIU);
   
  

    // codice per pagina nr. 0 (HOME)
    lcd.setCursor(0,0);
    lcd.print("Trigger     ");
    

if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      
      tempo_btn = millis();
      set = !set;
    }
    
     
   if(set == HIGH)
    { 
      pinMode(EXT_DIGIT, INPUT);
      int valorePIR = digitalRead(EXT_DIGIT);
      /*------Mod Movimento scatto flash---------*/
      if(setmodPIR==1){
        
        
        if(valorePIR == HIGH){ //was motion detected
         lcd.setCursor(0,0);
        lcd.print("Mov.       ");
        lcd.setCursor(0,1);
        lcd.print("Rilevato        ");
        delay(attesaPIR);
        lampeggio();
        
        delay(3500);
  }
    }
      
       /*------Mod Movimento scatto Reflex---------*/
      if(setmodPIR==0){
     
        if(valorePIR == HIGH){ //was motion detected
         lcd.setCursor(0,0);
        lcd.print("Mov.       ");
        lcd.setCursor(0,1);
        lcd.print("Rilevato        ");
        delay(attesaPIR);
        scatto();
        
        delay(3500);
  }
      }
      
       /*------Mod Movimento scatto Misto---------*/
      if(setmodPIR==2){
     
        if(valorePIR == HIGH){ //was motion detected
         lcd.setCursor(0,0);
        lcd.print("Mov.       ");
        lcd.setCursor(0,1);
        lcd.print("Rilevato        ");
        delay(attesaPIR);
        misto();
        
        delay(3500);
  }
      }
      
     
      
   }
    lcd.setCursor(0,1);
    if(set == LOW){
      passaggio=0;
      lcd.print("PIR    ");
    
    lcd.write(1);
    lcd.print("            ");}
    else{
      lcd.print("PIR    ");
    
    lcd.write(2);
    lcd.print("            ");}
    
    break;
    
    case 1:
    
    lcd.setCursor(0,0);
    lcd.print("Set Mod         ");

    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        if(setmodPIR < 2)
        setmodPIR++;
      }

      if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        meno_set = !meno_set;
        if( setmodPIR > 0 )
          setmodPIR--;
      }
    }
    lcd.setCursor(0,1);  //Scrivo il numero di scatti
    if(setmodPIR==0){lcd.print("Reflex            ");}
    else if(setmodPIR==1){lcd.print("Flash       ");}
    else lcd.print("Ref+Fl");
   
    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

  break;
    
    
  
  case 2:
  
    lcd.setCursor(0,0);
    lcd.print("Delay              ");
    
    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }

    if(set == HIGH)
    {
      //Abilita l'ingresso in modalita' configurazione
      n_piu = 0;
      n_meno = 0;
      //Abilita i tasti "piu" e "meno" in modalita' incremento/decremento
      piu_set = digitalRead(PIU);
      meno_set = digitalRead(MENO);



      if(piu_set == HIGH && millis() - tempo_btn > debounce)  //Incremento "variabile" se premo tasto "piu"
      {
        tempo_btn = millis();
        n_piu++;
        piu_set = !piu_set;
        if (attesaPIR<1000){
        attesaPIR=attesaPIR+10;
        
        contaimpulsopiu++;}
        
        if (contaimpulsopiu>10) { 
    
          attesaPIR=attesaPIR+30;
          if (attesaPIR>1000){attesaPIR=1000;}
    
            }
            
           
        }
        else if(piu_set == LOW){ contaimpulsopiu=0;}
      
      
       if(meno_set == HIGH && millis() - tempo_btn > debounce)  //Decremento "variabile" se premo tasto "meno"
      {
        tempo_btn = millis();
        n_meno++;
        
        meno_set = !meno_set;
        if( attesaPIR > 0 )
        {
          attesaPIR=attesaPIR-10;
        contaimpulsomeno++;
        
        if (contaimpulsomeno>10) {
        attesaPIR=attesaPIR-30;
          if(attesaPIR<0){attesaPIR=0;}
                                  }
        }
          
      }
     
   else if(meno_set == LOW){ contaimpulsomeno=0;}
    }

    lcd.setCursor(0,1);  //Scrivo il numero di scatti
    
     if(attesaPIR==1000){lcd.print(attesaPIR/1000); lcd.print("\"   ");}
     else{lcd.print(attesaPIR); lcd.print("ms   ");}

    if(set == LOW){
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(4);
      lcd.print("            ");}
    else{
      lcd.print("         ");
      lcd.setCursor(7,1);
      lcd.write(3);
      lcd.print("            ");}

  break;
    
     }//switch
   }//if
   
}//loop
  
  void conversioneminutif(float valorentrataf){

long minuti=0;
long secondi=0;
        
        secondi = valorentrataf/1000; 
        minuti=secondi/60;
        secondi=secondi-(minuti*60); 
         lcd.setCursor(0,1);
         lcd.print(minuti);
         lcd.print("'");
         lcd.print(secondi);
         lcd.print("\"");
}

void conversioneminuti(long valorentrata){

long minuti=0;
long secondi=0;
        
        secondi = valorentrata/1000; 
        minuti=secondi/60;
        secondi=secondi-(minuti*60); 
         lcd.setCursor(0,1);
         lcd.print(minuti);
         lcd.print("'");
         lcd.print(secondi);
         lcd.print("\"");
}

void backlight(){
     
  currentTime = millis();
  if(currentTime >= (loopTime + 10000)){  
    digitalWrite(BACKLIGHT, LOW);   // toggles the LED on/off
    loopTime = millis();  // Updates loopTime
  }
  
  if(enter == HIGH || esc == HIGH || option == HIGH || piu == HIGH || meno == HIGH || option_set == HIGH || piu_set == HIGH || meno_set == HIGH){loopTime=millis(); digitalWrite(BACKLIGHT, HIGH);}

}

void scatto(){
        digitalWrite(outpin, HIGH); //Scatta
        delay(shutter_on); //Attendi fine scatto
        digitalWrite(outpin, LOW); //Stop scatto
             }
              
void lampeggio(){
        digitalWrite(flash, HIGH); //Scatta
        delay(lampo); //Attendi fine scatto
        digitalWrite(flash, LOW); //Stop scatto
            }

void misto(){        
        digitalWrite(outpin, HIGH); //Scatta
        digitalWrite(flash, HIGH); //Scatta
        delay(shutter_on); //Attendi fine scatto
        digitalWrite(flash, LOW); //Stop scatto
        digitalWrite(outpin, LOW); //Stop scatto
            }

Parti dalla linea 133 in cui definisci a quali pin hai collegato il display, se non ti è chiaro come collegare il display e come definire i pin su Arduino puoi seguire il tutorial: LCD ACM1602B con Arduino in cui trovi anche la spiegazione tecnica pin per pin del display.

linea 135: definisci la funzione setup();

linea 137: assegna alla variabile currentTime il valore di millis() al momento dell’avvio dello sketch;

linea 138: imposta la variabile loopTime come currentTime, appena valorizzato;

linea 139: indica che il pin BACKLIGHT è di tipo OUTPUT;

linea 140: imposta ad HIGH il valore del pin BACKLIGHT, questo fa si che il display si retroillumini correttamente;

linea 141: inisalizza il display LCD definito come un 8 colonne x 2 righe;

linee 143-151: definisci i pin relativi ai pulsanti e suono come INPUT e i pin outpin e flash come OUTPUT;

linea 153: imposta la variabile NScattiSetting come NScatti;

linee 154-159: crea i caratteri stop, play, mod, normal, sens e sensno per ciascun carattere devi definire a quale registro del display associarlo, il metodo createChar( num, char ) ti permette di assegnare 8 caratteri rispettivamente dalla posizione 0 alla 7;

linea 161: posiziona il cursore alla prima colonna della prima riga, il metodo setCursor() accetta due parametri, rispettivamente setCursor( colonna, riga );

linea 162: scrivi sulla prima riga “TriggerT”;

linea 163: sposta il cursore sulla seconda riga;

linea 164: scrivi il numero di versione dello sketch, nell’esempio ” v 1.5 “;

linea 165: attendi un tempo di 3 secondi, questo ti permette di leggere il testo scritto sul display;

linea 166: riposiziona il cursore nell’angolo in alto a sinistra ( 0,0 );

linea 167: scrivi ” by “;

linea 168: posiziona il cursore alla prima colonna della seconda riga;

linea 169: scrivi “Travis ” il nome d’arte dell’autore dello sketch, qui non posso dire che il nostro amico Alessandro si sia risparmiato un personale elogio, io per correttezza non lo rimuoverei ma sei libero di farlo :-);

linea 170: attendi 2 secondi per leggere bene il nuovo testo scritto da Alessandro;

linea 171: pulisci il display utilizzando il metodo clear() della classe LCD;

Finisce qui la funzione di setup il cui scopo è impostare le variabili utili al funzionamento dello sketch, definire i pin in che modo devono lavorare ed eseguire il primo test del display scrivendo le frasi che haisto.

Passa alla funzione loop(), ricorda che tutte le operazioni definite in questa funzione verranno eseguite ad ogni ciclo di lavoro di arduino:

linea  177: imposta la variabile shutter_off_setting come shutter_off;

linea 178: richiama la funzione backlight() definita alla linea 2079, che analizzerò  in un prossimo articolo;

linea 180: verifica il valore della variabile set se questo è LOW ossia livello logico basso, la variabile set è stata definita alla linea 26 come di tipo boolean, probabilmente è più corretto verificare che sia true o false assegnandole tale valore in fase di inizializzazione, sono permessi che arduino ti concede, provvede lui a trasformare HIGH in true e LOW in false in casi come questo;

linee 182-187: imposti i valori letti sui pin digitali di arduino alle rispettive variabili, per leggere il valore digitale utilizzi digitalRead(), la pressione di ciascun pulsante porta il valore letto a HIGH ( +5v )

linea 190: confronta il valore assunto dal pulsante meno e che il tempo in millisecondi ( millis() ) decrementato del valore della variabile tempo_btn sia maggiore del valore che hai impostato per il debounce. il debouce è comunemente usato per definire il rilascio di un bottone, siccome la velocità di lettura di arduino è superiore ai riflessi umani potrebbe accadere che premendo il pulsante e rilasciandolo siano interpretate molte letture accidentalmente. Se il tuo tempo di reazione nel premere il pulsante è maggiore di quello definito dall’autore puoi aumentare il valore della variabile debounce;

linea 193: reimposta il valore di tempo_bnt uguale a millis(), ora l’espressione della linea 190 ha più senso, al prossimo loop di arduino la differenza tra millis() e tempo_btn sarà il tempo trascorso tra questa pressione e la successiva, da cui il confronto con debouce;

linee 194-195: verifica che il valore della variabile principale sia compreso tra 0 e 5 con 0 compreso, in tal caso incrementi il valore della stessa variabile, questo gioco serve a incrementare l’avanzamento delle voci di menu, per consentirti di spostarti tra i menu;

linee 197-204: sono tutte righe identiche alle 194-195 ma ciascuna dedicata ad una variabile specifica;

linee 206-215: determini i valori massimi che ciascuna delle variabili viste sopra può raggiungere, questo determina che al raggiungimento el valore massimo la variabile corrispondente ritorna ad essere azzerata;

linee 218-237: eseguono le stesse operazioni viste per il pulsante più per il pulsante meno, decrementando i valori delle variabili.

Avrai notato che c’è un po di confuzione, originariamente l’errore sembra nel commento in realtà l’errore è nelle condizioni presenti alle linee 190 e 219, in particolare sono stati invertiti i valori dei pulsanti, l’impostazione corretta dovrebbe essere per la line 190:

if(piu == HIGH && millis() - tempo_btn > debounce)

e per la linea 219:

if(meno == HIGH && millis() - tempo_btn > debounce)

c’è anche un’altro piccola imprecisione, nella parte dedicata al decremento delle variabili non ci sono i valori di limite, nella realtà del funzionamento sia la prima che la seconda imprecisione non hanno effetti di malfunzionamento in quanto i pulsanti più e meno funzioneranno solo al contrario e decrementando il menu una volta arrivati a 0 non potrai più andare oltre essendo le condizioni tutte impostate per verificare che i valori delle variabili principaleX siano compresi tra 0 e valore massimo che ciascuna può assumere.

Il passaggio appena descritto è complesso e se non ti è chiaro non esitare a commentare l’articolo cercherò di approfondire l’argomento.

tornando allo sketch:

linea 240: verifichi la condizione di pressione sul pulsante esc;

linea 243: imposta il valore di tempo_btn a millis() come visto per la linea 193;

linee 244-245: verifica il valore assunto dalla variabile mode se è a 0 allora imposta a 0 il valore della variabile principale;

linee 247-257: esegui la stessa operazione vista per la linea 244 per le variabili principaleX. questo passaggio determina l’azzeramento del menu principale alla pressione del pulsante esc riportandoti alla voce principale corrispondente secondo la modalità in cui ti trovi;

linea 259: reimposta a LOW il valore di set in modo che rieseguendo il loop() successivo rientri nell’if della linea 180;

linea 262: controlla lo stato del pulsante option e lo fa oltre che nel tempo di debounce solo se la modalità ( mode ) è compresa tra 0 e 5, in pratica option risponde solo se il valore di mode è nel range definito;

linee 265-269: reimposta a 0 il valore delle variabili principaleX;

linea 270: assegna il valore millis() alla variabile tempo_btn come già visto alla linea 193;

linea 271: incrementa il valore della variabile mode questo ti consente di cambiare tra le 5 modalità definite premendo il pulsante option;

linee 272-273: controlla che il valore di mode non superi 4 ( mode == 5 ) azzerando il valore di mode. Questo passaggio è più facile se lo leggi in questo modo: incremento mode e verifico il suo valore, se mode valeva 3 alla linea 270 alla 271 diventa 4 alla 272 la condizione non è verificata, al passaggio successivo e pressione del pulsante option il valore di mode alla linea 270 è 4, alla linea 271 diventa 5 e la condizione è verificata per cui prima di eseguire qualsiasi altra operazione la resetta a 0;

Per questo articolo penso che tu abbia abbastanza da leggere e sperimentare, considera che fino a questo punto hai visto un modo di realizzare un sistema di navigazione tra menu e definizione della modalità, ne esistono molti altri più complessi o più semplici, puoi sperimentare per trovare quello che ti piace di più. Alla fiine dovrai sempre aver impostato i valori delle variabili:

  • principale
  • principale1
  • principale2
  • principale3
  • principale4
  • mode

Buon divertimento !!!

 

 

 

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/triggert-trigger-multiuso-terza-parte.html

4 comments

2 pings

Skip to comment form

    • Alessio on 28 Ago 2012 at 17:14
    • Reply

    Ciao sono Alessio se a qualcuno interessa ho modificato il triggerT per il comando infrarosso nikon usando il pin 13 come uscita con in serie una resistenza da 100 ohm, mentre per il segnale microfonico ho usato il semplice schema usato su photoduino con un lm386 e funziona benissimo togliendo la resistenza da 4700 ohm del TriggerT originale. Allego lo sketch modificato (va usata la libreria nikonIrControl.h)

    // *-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-*
    // | |
    // | -_-TriggerT by Travis9011 -_- |
    // | |
    // | ©2012 http://www.snapadventure.it – Alessandro Travi |
    // | |
    // *-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-o-*

    #include //Libreria per LCD
    #include //libreria ir nikon

    #define ENTER 11 //Pin a cui e’ collegato il tasto Enter
    #define ESC 10 //Pin a cui e’ collegato il tasto Esc
    #define BACKLIGHT 9
    #define MENO 8 //Pin a cui e’ collegato il tasto Meno
    #define OPTION 1
    #define PIU 0 //Pin a cui e’ collegato il tasto Piu

    boolean piu_set = LOW, meno_set = LOW, option_set = LOW;
    unsigned int n_piu, n_meno;
    byte i = 0;
    int NScatti=300;
    int NScattiSetting;
    unsigned int principale = 0, principale1=0, principale2=0, principale3=0, principale4=0, mode=0;
    boolean piu = LOW, meno = LOW, enter, esc, option;//Variabili associate ai quattro pulsanti nella modalita’ scorrimento pagine
    boolean piu0 = LOW, meno0 = LOW, enter0;
    boolean set = LOW;//Entra nella modalita’ settaggio
    boolean set0 = LOW;

    boolean setenter = LOW;//Entra nella modalita’ settaggio
    long tempo_btn = 0, debounce = 190; //Tempo tra due letture successive di un bottone (300 ms)

    unsigned long contaimpulsopiu =0;
    unsigned long contaimpulsomeno =0;

    unsigned long currentTime;
    unsigned long loopTime;

    /*=========== Variabili Macchina Fotografica =========================================================================================================*/

    int shutter_on = 200;//tempo di pressione per attivare la cam, da settare intorno i 100 e 300
    int lampo = 100;
    long otturatore = 0; //posa B
    long attesa = 0, attesas = 0, attesal = 0, attesaPIR = 0;
    float shutter_off = 4000; // tempo di attesa intervallo
    float shutter_off_setting=0;
    long shutter_offL = 0;
    long shutter_off_settingL=0;

    int light =0;
    int passaggio=0;
    int wakeup = 300; //tempo per il fuoco
    int wakewait = 200; //tempo risveglio / scatto
    int CameraIrPin = 13; //led ir per lo scatto

    int flash = 16;//uscita flash
    int LDR = 5; //analogico
    int SUONO = 4; //analogico
    int EXT = 3; //analogico
    int EXT_DIGIT = 17; //digitale
    int letturaLDR = 0;
    int letturaSuono = 0;
    int letturaSuonoimp = 0;
    int sensSuono = 100, sensSuonosetting = 3;
    int sensLDR = 60, sensLDRsetting = 3;
    int sensLDRLaser = 25, sensLDRLasersetting = 3;
    int sogliaLDR = 0;
    int sogliaSuono = 0;
    int setsensorLuce = 0,setsensorSuono = 0,setsensorLaser = 0;
    int setmod = 0, setmodL = 0, setmodPIR = 0;

    /*SIMBOLI*/

    byte symbolstop[8] = {
    B00000,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B00000,
    };
    byte symbolplay[8] = {
    B00000,
    B10000,
    B11000,
    B11100,
    B11000,
    B10000,
    B00000,
    };

    byte symbolnormal[8] = {
    B00000,
    B01110,
    B11111,
    B11111,
    B11111,
    B01110,
    B00000,
    };

    byte symbolmod[8] = {
    B00000,
    B00100,
    B01110,
    B11111,
    B01110,
    B00100,
    B00000,
    };

    byte symbolsens[8] = {
    B00000,
    B01110,
    B01110,
    B01110,
    B01110,
    B01110,
    B00000,
    };

    byte symbolsensno[8] = {
    B00000,
    B01110,
    B01010,
    B01010,
    B01010,
    B01110,
    B00000,
    };

    //Display LCD
    LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

    void setup()
    {
    currentTime = millis();
    loopTime = currentTime;
    pinMode(BACKLIGHT, OUTPUT);
    digitalWrite(BACKLIGHT, HIGH);
    lcd.begin(8, 2);

    pinMode(ENTER, INPUT);
    pinMode(ESC, INPUT);
    pinMode(PIU, INPUT);
    pinMode(MENO, INPUT);
    pinMode(OPTION, INPUT);
    pinMode(SUONO,INPUT);
    pinMode(CameraIrPin, OUTPUT);

    pinMode(flash, OUTPUT);

    NScattiSetting=NScatti;
    lcd.createChar(1, symbolstop);
    lcd.createChar(2, symbolplay);
    lcd.createChar(3, symbolmod);
    lcd.createChar(4, symbolnormal);
    lcd.createChar(5, symbolsens);
    lcd.createChar(6, symbolsensno);

    lcd.setCursor(0,0);
    lcd.print(“Nikon ir”);
    lcd.setCursor(0,1);
    lcd.print(“Trigger “);
    delay(3000);
    lcd.setCursor(0,0);
    lcd.print(” Mod by “);
    lcd.setCursor(0,1);
    lcd.print(” Alex “);
    delay(2000);
    lcd.clear();

    }

    void loop(){

    shutter_off_setting=shutter_off;
    backlight();
    //LETTURA PULSANTI
    if(set == LOW)
    {
    piu = digitalRead(PIU);
    meno = digitalRead(MENO);
    option = digitalRead(OPTION);
    }
    enter = digitalRead(ENTER);
    esc = digitalRead(ESC);

    //Se premo PIU incremento di uno il contatore pagine
    if(meno == HIGH && millis() – tempo_btn > debounce)
    {

    tempo_btn = millis();
    if(principale >= 0 && principale = 0 && principale1 = 0 && principale2 = 0 && principale3 = 0 && principale4 debounce)
    {

    tempo_btn = millis();
    if(principale > 0 && principale 0 && principale1 0 && principale2 0 && principale3 0 && principale4 debounce) //Quando premo “esc” torno alla schermata HOME
    {

    tempo_btn = millis();
    if(mode==0){
    principale = 0;}

    else if(mode==1){
    principale1 = 0;}

    else if(mode==2){
    principale2 = 0;}

    else if(mode==3){
    principale3 = 0;}

    else if(mode==4){
    principale4 = 0;}

    set = LOW;
    }

    if(option == HIGH && millis() – tempo_btn > debounce && mode >= 0 && mode debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    NScatti=NScattiSetting;
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    digitalWrite(BACKLIGHT, LOW);
    if(NScatti!=0 && otturatore == 0){

    NScatti–; //decrementa numero scatti mancante
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(“Next:”);

    lcd.setCursor(0,1);
    lcd.print(“Fine:”);
    lcd.print(NScatti);

    delay(wakewait); //Prepara per lo scatto
    scatto();

    shutter_off_setting=shutter_off_setting-1000;
    while (shutter_off_setting > 0){
    lcd.setCursor(5,0);
    shutter_off_settingL=shutter_off_setting;
    lcd.print(shutter_off_settingL/1000);
    lcd.print(“\””);
    lcd.print(” “);
    shutter_off_setting = shutter_off_setting-500;
    delay(500);

    }

    }

    else if(NScatti!=0 && otturatore != 0){

    NScatti–; //decrementa numero scatti mancante
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(“Next:”);

    lcd.setCursor(0,1);
    lcd.print(“Fine:”);
    lcd.print(NScatti);

    delay(wakewait); //Prepara per lo scatto
    lcd.setCursor(8,0);
    lcd.print(“B”);
    pinMode(CameraIrPin, OUTPUT); //Scatta
    delay(otturatore+500); //tempo otturatore aperto

    shutter_off_setting=shutter_off_setting-500;
    while (shutter_off_setting > 0){
    lcd.setCursor(5,0);
    shutter_off_settingL=shutter_off_setting;
    lcd.print(shutter_off_settingL/1000);
    lcd.print(“\””);
    lcd.print(” “);
    shutter_off_setting = shutter_off_setting-500;
    delay(500);

    }

    }

    else if(NScatti==0){
    digitalWrite(BACKLIGHT, HIGH);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(“Finito! “);
    lcd.setCursor(0,1);
    lcd.print(“Stop! “);
    delay(4000);

    set = !set;
    }
    }

    break;

    case 1:

    lcd.setCursor(0,0);
    lcd.print(“Set Int “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;

    shutter_off=shutter_off+1000;
    }

    if(meno_set == HIGH && millis() – tempo_btn > debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;
    meno_set = !meno_set;
    if( shutter_off > 0 )
    shutter_off=shutter_off-1000;
    }
    }
    lcd.setCursor(0,1); //Scrivo il numero di scatti
    if(shutter_off debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;

    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;

    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    NScattiSetting++;

    contaimpulsopiu++;

    if (contaimpulsopiu>10) {

    NScattiSetting=NScattiSetting+10;

    }

    }
    else if(piu_set == LOW){ contaimpulsopiu=0;}

    if(meno_set == HIGH && millis() – tempo_btn > debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;

    meno_set = !meno_set;
    if( NScattiSetting > 0 )
    {
    NScattiSetting–;
    contaimpulsomeno++;

    if (contaimpulsomeno>10) {
    NScattiSetting=NScattiSetting-10;
    if(NScattiSetting debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;

    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    otturatore=otturatore+1000;
    contaimpulsopiu++;
    if(contaimpulsopiu>15){
    otturatore=otturatore+10000;
    }

    }
    else if(piu_set == LOW){contaimpulsopiu=0;}

    if(meno_set == HIGH && millis() – tempo_btn > debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;
    meno_set = !meno_set;
    if( otturatore > 0 )
    otturatore=otturatore-1000;
    contaimpulsomeno++;
    if(contaimpulsomeno>15){
    otturatore=otturatore-10000;
    }
    }
    else if(meno_set == LOW){contaimpulsomeno=0;}
    }

    lcd.setCursor(0,1);

    if(otturatore!=0 && otturatore=60000){

    conversioneminuti(otturatore);

    }

    if(otturatore == 0) lcd.print(“No”);

    if(set == LOW){
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(4);
    lcd.print(” “);}
    else{
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(3);
    lcd.print(” “);}

    break;
    }//switch
    }//if

    /*——————————-Trigger LUCE—————————*/
    if(mode==1){
    switch (principale1)
    {
    case 0: //Schermata HOME

    option_set = digitalRead(OPTION);
    meno_set = digitalRead(MENO);
    piu_set = digitalRead(PIU);

    // codice per pagina nr. 0 (HOME)
    lcd.setCursor(0,0);
    lcd.print(“Trigger “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {

    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    if(setsensorLuce==0){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(“Calib…”);
    letturaLDR=analogRead(LDR);
    sogliaLDR=letturaLDR+sensLDR;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaLDR=analogRead(LDR);
    if(letturaLDR > sogliaLDR){
    lcd.setCursor(0,0);
    lcd.print(“Soglia “);
    lcd.setCursor(0,1);
    lcd.print(“Luce! “);
    delay(attesa);
    scatto();

    delay(800);

    }}

    }//if sensore Interno

    else if(setsensorLuce!=0){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(“Calib…”);
    letturaLDR=analogRead(EXT);
    sogliaLDR=letturaLDR+sensLDR;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaLDR=analogRead(EXT);
    if(letturaLDR > sogliaLDR){
    lcd.setCursor(0,0);
    lcd.print(“Soglia “);
    lcd.setCursor(0,1);
    lcd.print(“Luce! “);
    delay(attesa);
    scatto();

    delay(1000);

    }}

    }//if sensore ESTERNO

    }
    lcd.setCursor(0,1);
    if(set == LOW){
    passaggio=0;
    lcd.print(“Luce “);

    lcd.write(1);
    lcd.print(” “);}
    else{
    lcd.print(“Luce “);

    lcd.write(2);
    lcd.print(” “);}

    break;

    case 1:

    lcd.setCursor(0,0);
    lcd.print(“Sensore “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    if(setsensorLuce debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;
    meno_set = !meno_set;
    if( setsensorLuce > 0 )
    setsensorLuce–;
    }
    }
    lcd.setCursor(0,1); //Scrivo il numero di scatti
    if(setsensorLuce==0){
    lcd.print(“In”);
    }
    else lcd.print(“Ext”);

    if(set == LOW){
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(4);
    lcd.print(” “);}
    else{
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(3);
    lcd.print(” “);}

    break;

    case 2:

    lcd.setCursor(0,0);
    lcd.print(“Sensib. “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    if(sensLDRsetting debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;
    meno_set = !meno_set;
    if( sensLDRsetting > 0 )
    sensLDRsetting–;
    }
    }
    lcd.setCursor(0,1);
    //lcd.print(sensLDRsetting);

    if(sensLDRsetting==0){sensLDR=350; lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6);}

    else if(sensLDRsetting==1){sensLDR=225; lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6);}
    else if(sensLDRsetting==2){sensLDR=100; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6);}
    else if(sensLDRsetting==3){sensLDR=60; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6);}
    else if(sensLDRsetting==4){sensLDR=30;lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6);}
    else if(sensLDRsetting==5){sensLDR=15; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5);}

    if(set == LOW){

    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(4);
    lcd.print(” “);}
    else{

    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(3);
    lcd.print(” “);}

    break;

    case 3:

    lcd.setCursor(0,0);
    lcd.print(“Delay “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    if (attesa10) {

    attesa=attesa+30;
    if (attesa>1000){attesa=1000;}

    }

    }
    else if(piu_set == LOW){ contaimpulsopiu=0;}

    if(meno_set == HIGH && millis() – tempo_btn > debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;

    meno_set = !meno_set;
    if( attesa > 0 )
    {
    attesa=attesa-10;
    contaimpulsomeno++;

    if (contaimpulsomeno>10) {
    attesa=attesa-30;
    if(attesa debounce) //Premendo “enter” si entra nella sotto-modalita’
    {

    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {

    /*———————-Sensore INT e Modalità Reflex—————–*/
    if(setsensorSuono==0 && setmod==1){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(“Calib…”);
    letturaSuonoimp=analogRead(SUONO);
    letturaSuono = constrain(abs(letturaSuonoimp – 512)-25,0,512);
    sogliaSuono=letturaSuono+sensSuono;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaSuonoimp=analogRead(SUONO);
    letturaSuono = constrain(abs(letturaSuonoimp – 512)-25,0,512);
    if(letturaSuono > sogliaSuono){
    lcd.setCursor(0,0);
    lcd.print(“Soglia “);
    lcd.setCursor(0,1);
    lcd.print(“Suono! “);
    delay(attesas);
    scatto();

    delay(800);

    }}

    }// IF sensore e modalità

    /*———————-Sensore EXT e Modalità Reflex—————–*/
    else if(setsensorSuono==1 && setmod==1){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(“Calib…”);
    letturaSuonoimp=analogRead(EXT);
    letturaSuono = constrain(abs(letturaSuonoimp – 512)-25,0,512);
    sogliaSuono=letturaSuono+sensSuono;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaSuonoimp=analogRead(EXT);
    letturaSuono = constrain(abs(letturaSuonoimp – 512)-25,0,512);
    if(letturaSuono > sogliaSuono){
    lcd.setCursor(0,0);
    lcd.print(“Soglia “);
    lcd.setCursor(0,1);
    lcd.print(“Suono! “);
    delay(attesas);
    scatto();

    delay(800);

    }}

    }// IF sensore e modalità

    /*———————-Sensore INT e Modalità Flash—————–*/
    else if(setsensorSuono==0 && setmod==0){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(“Calib…”);
    letturaSuonoimp=analogRead(SUONO);
    letturaSuono = constrain(abs(letturaSuonoimp – 512)-25,0,512);
    sogliaSuono=letturaSuono+sensSuono;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaSuonoimp=analogRead(SUONO);
    letturaSuono = constrain(abs(letturaSuonoimp – 512)-25,0,512);
    if(letturaSuono > sogliaSuono){
    lcd.setCursor(0,0);
    lcd.print(“Soglia “);
    lcd.setCursor(0,1);
    lcd.print(“Suono! “);
    delay(attesas);
    lampeggio();

    delay(800);

    }}

    }// IF sensore e modalità

    /*———————-Sensore EXT e Modalità Flash—————–*/
    else if(setsensorSuono==1 && setmod==0){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(“Calib…”);
    letturaSuonoimp=analogRead(EXT);
    letturaSuono = constrain(abs(letturaSuonoimp – 512)-25,0,512);
    sogliaSuono=letturaSuono+sensSuono;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaSuonoimp=analogRead(EXT);
    letturaSuono = constrain(abs(letturaSuonoimp – 512)-25,0,512);
    if(letturaSuono > sogliaSuono){
    lcd.setCursor(0,0);
    lcd.print(“Soglia “);
    lcd.setCursor(0,1);
    lcd.print(“Suono! “);
    delay(attesas);
    lampeggio();

    delay(800);

    }}

    }// IF sensore e modalità

    /*———————-Sensore INT e Modalità Mista—————–*/
    else if(setsensorSuono==0 && setmod==2){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(“Calib…”);
    letturaSuonoimp=analogRead(SUONO);
    letturaSuono = constrain(abs(letturaSuonoimp – 512)-25,0,512);
    sogliaSuono=letturaSuono+sensSuono;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaSuonoimp=analogRead(SUONO);
    letturaSuono = constrain(abs(letturaSuonoimp – 512)-25,0,512);
    if(letturaSuono > sogliaSuono){
    lcd.setCursor(0,0);
    lcd.print(“Soglia “);
    lcd.setCursor(0,1);
    lcd.print(“Suono! “);
    delay(attesas);
    misto();

    delay(800);

    }}

    }// IF sensore e modalità

    /*———————-Sensore EXT e Modalità Mista—————–*/
    else if(setsensorSuono==1 && setmod==2){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(“Calib…”);
    letturaSuonoimp=analogRead(EXT);
    letturaSuono = constrain(abs(letturaSuonoimp – 512)-25,0,512);
    sogliaSuono=letturaSuono+sensSuono;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaSuonoimp=analogRead(EXT);
    letturaSuono = constrain(abs(letturaSuonoimp – 512)-25,0,512);
    if(letturaSuono > sogliaSuono){
    lcd.setCursor(0,0);
    lcd.print(“Soglia “);
    lcd.setCursor(0,1);
    lcd.print(“Suono! “);
    delay(attesas);
    misto();

    delay(800);

    }}

    }// IF sensore e modalità

    }

    lcd.setCursor(0,1);
    if(set == LOW){
    passaggio=0;
    lcd.print(“Suono “);

    lcd.write(1);
    lcd.print(” “);}
    else{
    lcd.print(“Suono “);

    lcd.write(2);
    lcd.print(” “);}

    break;

    case 1:

    lcd.setCursor(0,0);
    lcd.print(“Set Mod “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    if(setmod debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;
    meno_set = !meno_set;
    if( setmod > 0 )
    setmod–;
    }
    }
    lcd.setCursor(0,1); //Scrivo il numero di scatti
    if(setmod==0){lcd.print(“Flash “);}
    else if(setmod==1){ lcd.print(“Reflex “);}
    else lcd.print(“Ref+Fl “);

    if(set == LOW){
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(4);
    lcd.print(” “);}
    else{
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(3);
    lcd.print(” “);}

    break;

    case 2:

    lcd.setCursor(0,0);
    lcd.print(“Sensore “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    if(setsensorSuono debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;
    meno_set = !meno_set;
    if( setsensorSuono > 0 )
    setsensorSuono–;
    }
    }
    lcd.setCursor(0,1); //Scrivo il numero di scatti
    if(setsensorSuono==0){
    lcd.print(“In”);
    }
    else lcd.print(“Ext”);

    if(set == LOW){
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(4);
    lcd.print(” “);}
    else{
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(3);
    lcd.print(” “);}

    break;

    case 3:

    lcd.setCursor(0,0);
    lcd.print(“Sensib. “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    if(sensSuonosetting debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;
    meno_set = !meno_set;
    if( sensSuonosetting > 0 )
    sensSuonosetting–;
    }
    }
    lcd.setCursor(0,1);

    if(sensSuonosetting==0){sensSuono=350; lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6);}

    else if(sensSuonosetting==1){sensSuono=220; lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6);}
    else if(sensSuonosetting==2){sensSuono=150; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6);}
    else if(sensSuonosetting==3){sensSuono=100; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6);}
    else if(sensSuonosetting==4){sensSuono=50; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6);}
    else if(sensSuonosetting==5){sensSuono=15; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5);}

    if(set == LOW){
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(4);
    lcd.print(” “);}
    else{
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(3);
    lcd.print(” “);}

    break;

    case 4:

    lcd.setCursor(0,0);
    lcd.print(“Delay “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    if (attesas10) {

    attesas=attesas+30;
    if (attesas>1000){attesas=1000;}

    }

    }
    else if(piu_set == LOW){ contaimpulsopiu=0;}

    if(meno_set == HIGH && millis() – tempo_btn > debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;

    meno_set = !meno_set;
    if( attesas > 0 )
    {
    attesas=attesas-10;
    contaimpulsomeno++;

    if (contaimpulsomeno>10) {
    attesas=attesas-30;
    if(attesas debounce) //Premendo “enter” si entra nella sotto-modalita’
    {

    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    /*——Mod Laser Sensore interno e scatto flash———*/
    if(setmodL==0 && setsensorLaser==0){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(“Calib…”);
    letturaLDR=analogRead(LDR);
    sogliaLDR=letturaLDR-sensLDRLaser;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaLDR=analogRead(LDR);
    if(letturaLDR < sogliaLDR){
    lcd.setCursor(0,0);
    lcd.print("Barriera ");
    lcd.setCursor(0,1);
    lcd.print("Fermata! ");
    delay(attesal);
    lampeggio();

    delay(800);

    }}
    }
    /*——Mod Laser Sensore interno e scatto Reflex———*/
    if(setmodL==1 && setsensorLaser==0){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Calib…");
    letturaLDR=analogRead(LDR);
    sogliaLDR=letturaLDR-sensLDRLaser;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaLDR=analogRead(LDR);
    if(letturaLDR < sogliaLDR){
    lcd.setCursor(0,0);
    lcd.print("Barriera ");
    lcd.setCursor(0,1);
    lcd.print("Fermata! ");
    delay(attesal);
    scatto();

    delay(800);

    }}
    }

    /*——Mod Laser Sensore esterno e scatto flash———*/
    if(setmodL==0 && setsensorLaser==1){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Calib…");
    letturaLDR=analogRead(EXT);
    sogliaLDR=letturaLDR-sensLDRLaser;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaLDR=analogRead(EXT);
    if(letturaLDR < sogliaLDR){
    lcd.setCursor(0,0);
    lcd.print("Barriera ");
    lcd.setCursor(0,1);
    lcd.print("Fermata! ");
    delay(attesal);
    lampeggio();

    delay(800);

    }}
    }
    /*——Mod Laser Sensore esterno e scatto Reflex———*/
    if(setmodL==1 && setsensorLaser==1){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Calib…");
    letturaLDR=analogRead(EXT);
    sogliaLDR=letturaLDR-sensLDRLaser;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaLDR=analogRead(EXT);
    if(letturaLDR < sogliaLDR){
    lcd.setCursor(0,0);
    lcd.print("Barriera ");
    lcd.setCursor(0,1);
    lcd.print("Fermata! ");
    delay(attesal);
    scatto();

    delay(800);

    }}
    }

    /*——Mod Laser Sensore interno e scatto Misto———*/
    if(setmodL==1 && setsensorLaser==0){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Calib…");
    letturaLDR=analogRead(LDR);
    sogliaLDR=letturaLDR-sensLDRLaser;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaLDR=analogRead(LDR);
    if(letturaLDR < sogliaLDR){
    lcd.setCursor(0,0);
    lcd.print("Barriera ");
    lcd.setCursor(0,1);
    lcd.print("Fermata! ");
    delay(attesal);
    misto();

    delay(800);

    }}
    }

    /*——Mod Laser Sensore esterno e scatto Misto———*/
    if(setmodL==1 && setsensorLaser==1){
    if(passaggio==0 || option_set == HIGH){
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Calib…");
    letturaLDR=analogRead(EXT);
    sogliaLDR=letturaLDR-sensLDRLaser;
    delay(1500);
    passaggio++;
    }

    else if(passaggio =!0){
    letturaLDR=analogRead(EXT);
    if(letturaLDR debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    if(setmodL debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;
    meno_set = !meno_set;
    if( setmodL > 0 )
    setmodL–;
    }
    }
    lcd.setCursor(0,1); //Scrivo il numero di scatti
    if(setmodL==0){lcd.print(“Flash “);}
    else if(setmodL==1){lcd.print(“Reflex “);}
    else lcd.print(“Ref+Fl”);

    if(set == LOW){
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(4);
    lcd.print(” “);}
    else{
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(3);
    lcd.print(” “);}

    break;

    case 2:

    lcd.setCursor(0,0);
    lcd.print(“Sensore “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    if(setsensorLaser debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;
    meno_set = !meno_set;
    if( setsensorLaser > 0 )
    setsensorLaser–;
    }
    }
    lcd.setCursor(0,1); //Scrivo il numero di scatti
    if(setsensorLaser==0){
    lcd.print(“In”);
    }
    else lcd.print(“Ext”);

    if(set == LOW){
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(4);
    lcd.print(” “);}
    else{
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(3);
    lcd.print(” “);}

    break;

    case 3:

    lcd.setCursor(0,0);
    lcd.print(“Sensib. “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    if(sensLDRLasersetting debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;
    meno_set = !meno_set;
    if( sensLDRLasersetting > 0 )
    sensLDRLasersetting–;
    }
    }
    lcd.setCursor(0,1);

    if(sensLDRLasersetting==0){sensLDRLaser=25; lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6);}

    else if(sensLDRLasersetting==1){sensLDRLaser=20; lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6); lcd.write(6);}
    else if(sensLDRLasersetting==2){sensLDRLaser=15; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6); lcd.write(6);}
    else if(sensLDRLasersetting==3){sensLDRLaser=10; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6); lcd.write(6);}
    else if(sensLDRLasersetting==4){sensLDRLaser=5; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(6);}
    else if(sensLDRLasersetting==5){sensLDRLaser=2; lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5); lcd.write(5);}

    if(set == LOW){
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(4);
    lcd.print(” “);}
    else{
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(3);
    lcd.print(” “);}

    break;

    case 4:

    lcd.setCursor(0,0);
    lcd.print(“Delay “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    if (attesal10) {

    attesal=attesal+30;
    if (attesal>1000){attesal=1000;}

    }

    }
    else if(piu_set == LOW){ contaimpulsopiu=0;}

    if(meno_set == HIGH && millis() – tempo_btn > debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;

    meno_set = !meno_set;
    if( attesal > 0 )
    {
    attesal=attesal-10;
    contaimpulsomeno++;

    if (contaimpulsomeno>10) {
    attesal=attesal-30;
    if(attesal debounce) //Premendo “enter” si entra nella sotto-modalita’
    {

    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    pinMode(EXT_DIGIT, INPUT);
    int valorePIR = digitalRead(EXT_DIGIT);
    /*——Mod Movimento scatto flash———*/
    if(setmodPIR==1){

    if(valorePIR == HIGH){ //was motion detected
    lcd.setCursor(0,0);
    lcd.print(“Mov. “);
    lcd.setCursor(0,1);
    lcd.print(“Rilevato “);
    delay(attesaPIR);
    lampeggio();

    delay(3500);
    }
    }

    /*——Mod Movimento scatto Reflex———*/
    if(setmodPIR==0){

    if(valorePIR == HIGH){ //was motion detected
    lcd.setCursor(0,0);
    lcd.print(“Mov. “);
    lcd.setCursor(0,1);
    lcd.print(“Rilevato “);
    delay(attesaPIR);
    scatto();

    delay(3500);
    }
    }

    /*——Mod Movimento scatto Misto———*/
    if(setmodPIR==2){

    if(valorePIR == HIGH){ //was motion detected
    lcd.setCursor(0,0);
    lcd.print(“Mov. “);
    lcd.setCursor(0,1);
    lcd.print(“Rilevato “);
    delay(attesaPIR);
    misto();

    delay(3500);
    }
    }

    }
    lcd.setCursor(0,1);
    if(set == LOW){
    passaggio=0;
    lcd.print(“PIR “);

    lcd.write(1);
    lcd.print(” “);}
    else{
    lcd.print(“PIR “);

    lcd.write(2);
    lcd.print(” “);}

    break;

    case 1:

    lcd.setCursor(0,0);
    lcd.print(“Set Mod “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    if(setmodPIR debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;
    meno_set = !meno_set;
    if( setmodPIR > 0 )
    setmodPIR–;
    }
    }
    lcd.setCursor(0,1); //Scrivo il numero di scatti
    if(setmodPIR==0){lcd.print(“Reflex “);}
    else if(setmodPIR==1){lcd.print(“Flash “);}
    else lcd.print(“Ref+Fl”);

    if(set == LOW){
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(4);
    lcd.print(” “);}
    else{
    lcd.print(” “);
    lcd.setCursor(7,1);
    lcd.write(3);
    lcd.print(” “);}

    break;

    case 2:

    lcd.setCursor(0,0);
    lcd.print(“Delay “);

    if(enter == HIGH && millis() – tempo_btn > debounce) //Premendo “enter” si entra nella sotto-modalita’
    {
    tempo_btn = millis();
    set = !set;
    }

    if(set == HIGH)
    {
    //Abilita l’ingresso in modalita’ configurazione
    n_piu = 0;
    n_meno = 0;
    //Abilita i tasti “piu” e “meno” in modalita’ incremento/decremento
    piu_set = digitalRead(PIU);
    meno_set = digitalRead(MENO);

    if(piu_set == HIGH && millis() – tempo_btn > debounce) //Incremento “variabile” se premo tasto “piu”
    {
    tempo_btn = millis();
    n_piu++;
    piu_set = !piu_set;
    if (attesaPIR10) {

    attesaPIR=attesaPIR+30;
    if (attesaPIR>1000){attesaPIR=1000;}

    }

    }
    else if(piu_set == LOW){ contaimpulsopiu=0;}

    if(meno_set == HIGH && millis() – tempo_btn > debounce) //Decremento “variabile” se premo tasto “meno”
    {
    tempo_btn = millis();
    n_meno++;

    meno_set = !meno_set;
    if( attesaPIR > 0 )
    {
    attesaPIR=attesaPIR-10;
    contaimpulsomeno++;

    if (contaimpulsomeno>10) {
    attesaPIR=attesaPIR-30;
    if(attesaPIR= (loopTime + 10000)){
    digitalWrite(BACKLIGHT, LOW); // toggles the LED on/off
    loopTime = millis(); // Updates loopTime
    }

    if(enter == HIGH || esc == HIGH || option == HIGH || piu == HIGH || meno == HIGH || option_set == HIGH || piu_set == HIGH || meno_set == HIGH){loopTime=millis(); digitalWrite(BACKLIGHT, HIGH);}

    }

    void scatto(){
    cameraSnap(CameraIrPin);
    delay(shutter_on); //Attendi fine scatto

    }

    void lampeggio(){
    digitalWrite(flash, HIGH); //Scatta
    delay(lampo); //Attendi fine scatto
    digitalWrite(flash, LOW); //Stop scatto
    }

    void misto(){
    cameraSnap(CameraIrPin);
    digitalWrite(flash, HIGH); //Scatta
    delay(shutter_on); //Attendi fine scatto
    digitalWrite(flash, LOW); //Stop scatto

    }

    1. Grande Alessio,
      la mia idea di collaborazione è proprio questa, chi vuole può dare una mano.

      Alla fine della presentazione del progetto ho in mente di pubblicare degli accorgimenti
      al codice, con l’approvazione dell’autore, e fare degli articoli dedicati anche alle
      modifiche che chi vuole può inviare per contribuire.

      Mauro

  1. Hi there! Someone in my Facebook group shared this site
    with us so I came to check it out. I’m definitely loving the information. I’m bookmarking and will be tweeting this to my followers!
    Exceptional blog and brilliant design.

    1. thank you!
      I’m glad to read your comment.
      I continue to write motivated!

  1. […] Prima Parte […]

  2. […] TriggerT: Trigger multiuso – terza parte […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.