Visualizza un messaggio singolo
Vecchio 21-02-2012, 11:18   #23
a.milazzo
Guppy
 
Registrato: May 2002
Città: Roma
Acquariofilo: Marino
N° Acquari: 1
Età : 66
Messaggi: 290
Foto: 1 Albums: 0
Post "Grazie" / "Mi Piace"
Grazie (Dati):
Grazie (Ricev.):
Mi piace (Dati):
Mi piace (Ricev.):
Mentioned: 0 Post(s)
Feedback 0/0%

Annunci Mercatino: 0
Originariamente inviata da billykid591 Visualizza il messaggio
Come avevo anticipato posto il codice del mio programma gestione Plafoniera a LED....è lungo e complesso....però al momento funziona bene. le librerie per la maggioranza le trovate sul sito ufficiale di Arduino alcune invece le ho modificate per adattarle al mio schema....comunque può servire per prendere spunto.


codice:
//Programma di controllo della scheda ARQUARIUM
//per la gestione di una plafoniera dimmerabile per
//effetto alba tramonto in pwm 0 - 5 volt
//canali disponibili 5

//# Include
//# ==================================
#include <LiquidCrystal_I2C.h>
#include <Menu.h>
#include <LCDMenu2_I2C.h>
#include <EEPROM.h>   
#include <DS1307.h>
#include <Wire.h>
#include <WProgram.h>
#include <EEPROMVar.h>
//# Define
//# ==================================
#define _LCD_rows       4          // numero di righe del display alfanumerico
#define _LCD_cols       20         // numero di colonne del display

#define _BUTTON_up      2          
#define _BUTTON_down    4          
#define _BUTTON_enter   7  
#define _BUTTON_left    14
#define _BUTTON_right   15

#define _BUTTON_prestat 0

#define _BUTTON_press_time  500     //250


#define OPEN_PLAFO      8         // ingresso dell'interruttore per spegnimento plafo quando sollevata
#define ONE_LED         9         // primo canale LED pwm warm nel dolce
#define TWO_LED         10        // secondo canale LED pwm  cool nel dolce
#define THREE_LED       11        // terzo canale LED pwm red nel dolce
#define FOUR_LED        3         // quarto canale LED pwm
#define FIVE_LED        5         // quinto canale LED pwm
#define LCD_LIGHT       6        // uscita per backlight del display
#define TEMP_INPUT		16		  // ingresso per sensore temperatura

//# Definizioni variabili EEPROM
EEPROMVar<int> EpromOneStartHour = 9;           // ora accensione canale uno
EEPROMVar<int> EpromOneStartMinute = 5;         // minuto accensione canale uno
EEPROMVar<int> EpromOneStopHour = 20;            // ora spegnimento canale uno
EEPROMVar<int> EpromOneStopMinute = 55;           // minuto spegnimento canale uno
EEPROMVar<int> EpromOneMax = 100;               // massima luminosità canale uno
EEPROMVar<int> EpromOneFadeDuration = 60;       // tempo in minuti alba tramonto canale uno
EEPROMVar<int> EpromTwoStartHour = 9;           
EEPROMVar<int> EpromTwoStartMinute = 10;         
EEPROMVar<int> EpromTwoStopHour = 21;            
EEPROMVar<int> EpromTwoStopMinute = 50;      
EEPROMVar<int> EpromTwoMax = 100;               
EEPROMVar<int> EpromTwoFadeDuration = 60;    
EEPROMVar<int> EpromThreeStartHour = 9;           
EEPROMVar<int> EpromThreeStartMinute = 0;         
EEPROMVar<int> EpromThreeStopHour = 21;            
EEPROMVar<int> EpromThreeStopMinute = 0;      
EEPROMVar<int> EpromThreeMax = 100;               
EEPROMVar<int> EpromThreeFadeDuration = 60;     
EEPROMVar<int> EpromTimeLcd= 100;              // tempo massimo retroilluminazione LCD
EEPROMVar<int> EpromMaxOpenPlafo = 100;        // luminosità massima con plafo aperta

// Le variabili sottoelencate possono essere usate se si ha bisogno di
// controllare più di tre canali
//EEPROMVar<int> EpromFourStartHour = 9;          
//EEPROMVar<int> EpromFourStartMinute = 5;         
//EEPROMVar<int> EpromFourStopHour = 20;          
//EEPROMVar<int> EpromFourStopMinute = 55;         
//EEPROMVar<int> EpromFourMax = 100;               
//EEPROMVar<int> EpromFourFadeDuration = 60;      
//EEPROMVar<int> EpromFiveStartHour = 9;           
//EEPROMVar<int> EpromFiveStartMinute = 10;         
//EEPROMVar<int> EpromFiveStopHour = 21;            
//EEPROMVar<int> EpromFiveStopMinute = 50;      
//EEPROMVar<int> EpromFiveMax = 100;               
//EEPROMVar<int> EpromFiveFadeDuration = 60;    

// variabili di tempo da collegare a quelle in memoria EEPROM
int oneStartHour;
int oneStopHour;
int oneStartMinute;
int oneStopMinute;
int twoStartHour;
int twoStopHour;
int twoStartMinute;
int twoStopMinute;
int threeStartHour;
int threeStopHour;
int threeStartMinute;
int threeStopMinute;
int oneMinFade;
int twoMinFade;
int threeMinFade;
//int fourStartHour;
//int fourStopHour;
//int fourStartMinute;
//int fourStopMinute;
//int fiveStartHour;
//int fiveStopHour;
//int fiveStartMinute;
//int fiveStopMinute;
//int sixStartHour;
//int sixStopHour;
//int sixStartMinute;
//int sixStopMinute;
//int fourMinFade;
//int fiveMinFade;
//int sixMinFade;


//# Variabili di tempo per gestione accensione spegnimento e fading
long oneStartSeconds;                      // Ora accensione canale uno in secondi
long onePhotoPeriod;                    // durata foto periodo canale uno
int oneMax;                            // luminosità massima canale uno
long oneFadeDuration;                   // durata alba tramonto canale uno
long twoStartSeconds;                      // Ora accensione canale due in secondi
long twoPhotoPeriod;                    // durata foto periodo canale due
int twoMax;                            // luminosità massima canale due
long twoFadeDuration;                   // durata alba tramonto canale due
long threeStartSeconds;                    // Ora accensione canale tre in minuti
long threePhotoPeriod;                  // durata foto periodo canale tre
int threeMax;                          // luminosità massima canale tre
long threeFadeDuration;                 // durata alba tramonto canale tre

//le variabili sottostanti possono essere usate se si ha
// bisogno di controllare più di tre canali
//long fourStartSeconds;                     // Ora accensione canale quattro
//long fourPhotoPeriod;                   // durata foto periodo canale quattro
//int fourMax;                           // luminosità massima canale quattro
//long fourFadeDuration;                  // durata alba tramonto canale quattro
//long fiveStartSeconds;                     // Ora accensione canale cinque
//long fivePhotoPeriod;                   // durata foto periodo canale cinque
//int fiveMax;                           // luminosità massima canale cinque
//long fiveFadeDuration;                  // durata alba tramonto canale cinque
//long sixStartSeconds;                      // Ora accensione canale sei
//long sixPhotoPeriod;                    // durata foto periodo canale sei
//int sixMax;                            // luminosità massima canale sei
//long sixFadeDuration;                   // durata alba tramonto canale sei
int max1;								// variabile collegata a oneMax
int max2;								// variabile collegata a twoMax
int max3;								// variabile collegata a threeMax
int ora;                        // variabile ora corrente
int minuti;                     // variabile minuto corrente
int giorno;                     // variabile giorno corrente
int mese;                       // variabile mese corrente
int anno;                       // variabile anno corrente

// variabili controllo LED
long secondCounter = 0;            // contatore che si resetta alla emzzanotte
long oldSecondCounter = 0;         // contatore che si resetta alla mezzanotte
int oneVal;                    // valore corrente luminosità canale uno
int twoVal;                    // valore corrente luminosità canale due
int threeVal;                  // valore corrente luminosità canale tre

// variabili da usare se servono più di tre canali di controllo
//int fourVal;                   // valore corrente luminosità canale quattro
//int fiveVal;                   // valore corrente luminosità canale cinque
//int sixVal;                    // valore corrente luminosità canale sei

int setting = 0;             // variabile di controllo modalità settaggi valori
long tempo_home = 0, back_home = 50000;
long tempo;
long tempo_barra;
int stepper_bar = 2;
int colonna = 0;
boolean on_off_light= false;      // variabile di controllo stato accensione-spegnimento plafo
boolean LCD_time_on= true;
boolean blinker;             // variabile booleana per settare o no il blink sull'LCD
long timeLcd;              // tempo retroilluminazione LCD
int maxOpenPlafo;          // luminosità residua palfoniera aperta
int control_light_stop = 0;
int cursorPosition = 0;
int buttonPress = 0;
float tempC;
int reading;
byte outValOne;					// variabile controllo valore uscita in modalità accensione manuale
byte outValTwo;
byte outValThree;
const byte rowMessage = 2;      // numero della riga del display dove appaiono i valori da modificare
byte firstStepTemp = 40;		// max temperatura primo step abbassamento luminosità LED del 10%
byte secondStepTemp = 45;		// max temperatura secondo step abbassamento luminosità LED del 40%
byte thirdStepTemp = 50;		// max temperatura terzo step spegnimento LED

//# Creazione caratteri personali
//# ==================================
uint8_t arrow_up[8]    = {                  // freccia su
  0x4,0xE,0x15,0x4,0x4,0x4,0x0};      
uint8_t arrow_down[8]  = {                  // freccia giù
  0x0,0x4,0x4,0x4,0x15,0xE,0x4};
//uint8_t light_on[8] = {
//  0x0,0x15,0xA,0x1F,0xA,0x15,0x0};          // plafo accesa
uint8_t punto[8] = {
  0xC,0xC,0x0,0x0,0x0,0x0,0x0};          // punto gradi centigradi
uint8_t one_bar[8] = {
  0x10,0x10,0x10,0x10,0x10,0x10,0x10};      // una barra verticale
uint8_t two_bar[8] = {
  0x18,0x18,0x18,0x18,0x18,0x18,0x18};      // due barre verticali
uint8_t tree_bar[8] = {
  0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C};      // tre barre verticali
uint8_t four_bar[8] = {
  0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E};      // quattro barre verticali
uint8_t five_bar[8] = {
  0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F};      // cinque barre verticali


//# Classes
//# ==================================
LiquidCrystal_I2C lcd(0x20,_LCD_cols,_LCD_rows);  // set the LCD address to 0x20 for a 16 chars and 2 line display
//LiquidCrystal lcd(2,3,4,5,6,7); // Neuste Version, RW wird nicht mehr gebraucht 

Menu top("Root");

// menu, lcd, rows, cols, arrow_up_pos, arrow_down_pos
LCDMenu2 Root(top, lcd , _LCD_rows, _LCD_cols, 0, 1);

//# Buttons
//# ==================================
//UP,DOWN,ENTER,LEFT,RIGHT
int but[5]= {
  _BUTTON_up,_BUTTON_down,_BUTTON_enter,_BUTTON_left,_BUTTON_right};
//Previous States of buttons
boolean pbut[5]={
  _BUTTON_prestat,_BUTTON_prestat,_BUTTON_prestat,_BUTTON_prestat,_BUTTON_prestat};

//# Button Enter
//# ==================================
int button_press_enter = 0;
unsigned long g_button_press_time = millis();

// creazione voci del menu e sottomenu..è possibile sostituirle cone voci proprie
// senza superare il numero massimo di colonne - 1 del dislplay LCD impiegato
char strMenuInit[] = "Menu";
char strMenuDate[] = "Imp. Data/Ora";
char strMenuTime[] = "Imp. Tempi on/off";
char strMenuFade[] = "Imp. Alba/Tramonto";
char strMenuLux[] = "Imp. Luminosita'";
char strMenuManualOn[] = "On/Off Manuale";
char strMenuLcdTime[] = "Imp. Tempo LCD";
char strMenuOpenPlafo[] = "Lum. Plafo aperta";
char strMenuTimeOne[] = "Imp. Tempo Warm";
char strMenuTimeTwo[] = "Imp. Tempo Cool";
char strMenuTimeThree[] = "Imp. Tempo Red";
//char strMenuFadeOne[] = "Imp. Fading Warm";
//char strMenuFadeTwo[] = "Imp. Fading Cool";
//char strMenuFadeThree[] = "Imp. Fading Red";
//char strMenuLuxOne[] = "Imp. Lum. Warm";
//char strMenuLuxTwo[] = "Imp. Lum. Cool";
//char strMenuLuxThree[] = "Imp. Lum. Red";



// voci del menu relative ai canali dal 3 al 6 da utilizzare se servono
//char strMenuTimeFour[] = "";
//char strMenuTimeFive[] = "";
//char strMenuTimeSix[] = "";
//char strMenuFadeFour[] = "";
//char strMenuFadeFive[] = "";
//char strMenuFadeSix[] = "";
//char strMenuLuxFour[] = "";
//char strMenuLuxFive[] = "";
//char strMenuLuxSix[] = "";

//# Menu
//# ==================================
Menu Item1(strMenuInit);
Menu Item12(strMenuDate);
Menu Item13(strMenuTime);
Menu Item14(strMenuFade);
Menu Item15(strMenuLux);
Menu Item16(strMenuManualOn);
Menu Item17(strMenuLcdTime);
Menu Item18(strMenuOpenPlafo);
Menu Item131(strMenuTimeOne);
Menu Item132(strMenuTimeTwo);
Menu Item133(strMenuTimeThree);
//Menu Item134(strMenuTimeFour);
//Menu Item135(strMenuTimeFive);
//Menu Item136(strMenuTimeSix);

//Menu Item141(strMenuFadeOne);
//Menu Item142(strMenuFadeTwo);
//Menu Item143(strMenuFadeThree);
//Menu Item144(strMenuFadeFour);
//Menu Item145(strMenuFadeFive);
//Menu Item146(strMenuFadeSix);

//Menu Item151(strMenuLuxOne);
//Menu Item152(strMenuLuxTwo);
//Menu Item153(strMenuLuxThree);
//Menu Item154(strMenuLuxFour);
//Menu Item155(strMenuLuxFive);
//Menu Item156(strMenuLuxSix);

//# ==================================

//## Menu Init
void menuinit()
{
  top.addChild(Item1);
  Item1.addChild(Item12);
  Item1.addChild(Item13); 
  Item1.addChild(Item14);
  Item1.addChild(Item15); 
  Item1.addChild(Item16);
  Item1.addChild(Item17);
  Item1.addChild(Item18);  
  Item13.addChild(Item131); 
  Item13.addChild(Item132);
  Item13.addChild(Item133);
  //  Item13.addChild(Item134);
  //  Item13.addChild(Item135);
  //  Item13.addChild(Item136);  

  //  Item14.addChild(Item141);
  //  Item14.addChild(Item142);
  //  Item14.addChild(Item143);
  //  Item14.addChild(Item144);
  //  Item14.addChild(Item145);
  //  Item14.addChild(Item146);

  //  Item15.addChild(Item151);
  //  Item15.addChild(Item152);
  //  Item15.addChild(Item153);
  //  Item15.addChild(Item154);
  //  Item15.addChild(Item155);
  //  Item15.addChild(Item156);


  Root.display();
}    

//## Button
void button(int which, char select='z')
{
  if(which == _BUTTON_up || select == 'w') {
    //UP
    switch (setting) {
    case 0:
      Root.goUp();
      //Serial.println("'up'");
      break;
    default:
      selectSet(which);  
      break;
    }
  }
  else if(which == _BUTTON_down || select == 's') {
    //DOWN
    switch (setting) {
    case 0:
      Root.goDown();
      //Serial.println("'down'");
      break;
    default:
      selectSet(which);        
    }
  }
  else if(which == _BUTTON_left || select == 'l') {

    //LEFT
    if (cursorPosition >= 1) {
      cursorPosition--;
    }
    switch (setting) {
    case 0:
      cursorPosition = 0;
      goBack();
      break;
    default:
      selectSet(which);  
      break;
    }  
  }
  else if(which == _BUTTON_right || select == 'r') {
    //RIGHT
    if(cursorPosition < 5){
      cursorPosition++;
    }
    switch (setting) {
    case 0:
      Root.goEnter();
      button_press_enter = 1;
      break;
    default:
      selectSet(which);  
      break;
    }   
  }
  else if(which == _BUTTON_enter || select == 'e') {
    //ENTER
    if (setting != 0) 
    {
      save_data();
      blinker = false;
      print_save_date();
      Root.goEnter();
      setting = 0;
      control_light_stop = 0;
    }  
    set_reset_value();

  }

}

//## Button Check
void buttoncheck()
{
  for (int i=0;i<=4;i++)
  {
    if (digitalRead(but[i])) {          
      if (pbut[i]==0 && (millis()-g_button_press_time) >= _BUTTON_press_time) {                  
        button(but[i]);
        buttonPress = but[i];
        //pbut[i]=1;
        g_button_press_time = millis();
        if(timeLcd < 100){
          analogWrite(LCD_LIGHT,255);
        }  
        tempo_home = millis();
      }
    }
    else {
      pbut[i]=0;
      //buttonPress=0;
      if( millis() - tempo_home > back_home )
      {

        Root.goBack();
        Root.goBack();
        lcd.noBlink();
        set_reset_value();
        setting = 0;
        cursorPosition = 0;
        control_light_stop = 0;
        LCD_time_on = true;
      }
      if(timeLcd < 100){
        if( millis() - tempo_home > (timeLcd * 1000) )
        {
          analogWrite(LCD_LIGHT,20);
		  //tempo_home = millis();
        }
      }  
    }
  }
  //if(Serial.available()) {
  //  char c = Serial.read();
  //  button(-1,c);
  //} 
}

//## Function Check
void funccheck(int button)
{
  int x;
  if(button_press_enter == 1) {
    button_press_enter = 0;

    if(Root.curfuncname == strMenuInit) {
      //Serial.println("Function: Controller LED");
      setting = 0;
      LCD_time_on = false;
    }

    else if(Root.curfuncname == strMenuDate) {          // menu impostazione data e ora generale
      setting = 1;
      //Serial.println("Function: Imp. data ora");
      ora = RTC.get(DS1307_HR, true);
      minuti = RTC.get(DS1307_MIN, true);
      giorno = RTC.get(DS1307_DATE, true);
      mese = RTC.get(DS1307_MTH, true);
      anno = RTC.get(DS1307_YR, true);
      lcd.clear();
      print_text(0,0, strMenuDate);
      cursorPosition= 1;
      print_time_date(2);
      setDateHour(button);
      //      set_month(mese);
      //      set_year(anno);
      //      set_hour(ora);
      //      set_minute(minuti);
      //      set_day(0);
    }

    else if(Root.curfuncname == strMenuTimeOne) {      // menu impostazione tempi accensione canale uno
      Serial.println("Function: Imp. tempi canale uno");
      setting = 2;
      lcd.clear();
      print_text(0,0, strMenuTimeOne);
      printStartStopTime(oneStartHour, oneStartMinute, oneStopHour, oneStopMinute);
      cursorPosition= 1;
      setTimeOne(button);
      //      set_on_light_minute(led_on_minute);
      //      set_off_light_hour(led_off_hour);
      //      set_off_light_minute(led_off_minute);
      //      set_on_light_hour(led_on_hour);
    } 

    else if(Root.curfuncname == strMenuTimeTwo) {      // menu impostazione tempi accensione canale due
      setting = 3;
      lcd.clear();
      print_text(0,0, strMenuTimeTwo);
      printStartStopTime(twoStartHour, twoStartMinute, twoStopHour, twoStopMinute);
      cursorPosition= 1;
      setTimeTwo(button);
    } 

    else if(Root.curfuncname == strMenuTimeThree) {    // menu impostazione tempi accensione canale tre
      setting = 4;
      lcd.clear();
      print_text(0,0, strMenuTimeThree);
      printStartStopTime(threeStartHour, threeStartMinute, threeStopHour, threeStopMinute);
      cursorPosition= 1;
      setTimeThree(button);
    } 

    else if(Root.curfuncname == strMenuFade) {      // menu impostazione alba tramonto
      setting = 5;
      lcd.clear();
      print_text(0,0, strMenuFade);
      print_text(0,1,"Warm   Cool   Red");
      print_text(0,rowMessage,"Min:   Min:   Min:");
      setFadeTime(button, oneMinFade, 4);
      setFadeTime(button, twoMinFade, 11);
      setFadeTime(button, threeMinFade, 18);
//      
//      print_value(4,rowMessage, oneMinFade);
//      print_value(11,rowMessage, twoMinFade);
//      print_value(18,rowMessage, threeMinFade);
      cursorPosition= 1;
      setFade(button);
    }  

    else if(Root.curfuncname == strMenuLux) {         // menu impostazione luminosità LED singoli canali
      setting = 6;
      control_light_stop = 1;
      lcd.clear();
      print_text(0,0,strMenuLux);
      print_text(1,1,"Warm  Cool    Red");
      setMaxLux(button, oneMax, ONE_LED, 1);          // SCRIVE I VALORI DEI CANALI
      setMaxLux(button, twoMax, TWO_LED, 7);
      setMaxLux(button, threeMax, THREE_LED, 14);
      cursorPosition = 1;
      setLux(button);
    }


    else if(Root.curfuncname == strMenuManualOn) {    // menu accensione manuale singoli canali
      setting = 7;
      control_light_stop = 1;
      lcd.clear();
      print_text(0,0,strMenuManualOn);
      print_text(1,1,"Warm  Cool  Red");
	  outValOne = 0;
	  outValTwo = 0;
	  outValThree = 0;
	  manualOn(button, outValOne, ONE_LED, 1);
      manualOn(button, outValTwo, TWO_LED, 7);
      manualOn(button, outValThree, THREE_LED, 14);
	  cursorPosition= 1;
      setManualOn(button);
     /* manual_on_off_cool(on_off_light);
      manual_on_off_red(on_off_light);
      manual_on_off_warm(on_off_light);*/
    }     
    else if(Root.curfuncname == strMenuLcdTime) {       // menu impostazione tempo accesnione backlight dell'LCD
      setting = 8;
      lcd.clear();

      print_text(0,0,strMenuLcdTime);
      print_text(0,rowMessage,"Secondi:");
      setLcdTime(button);

    }  
    else if(Root.curfuncname == strMenuOpenPlafo) {      // menu impostazione luce residua LED a plafo aperta
      setting = 9;
      lcd.clear();
      blinker = true;
      print_text(0,0,strMenuOpenPlafo);
      print_text(0,rowMessage,"Luminosita':");
	  setLuxOpenPlafo(button);
     
    }                  
  }
}


//# Setup
//# ==================================
void setup()
{
  lcd.begin(_LCD_rows,_LCD_cols);
  lcd.createChar(0, arrow_up);
  lcd.createChar(1, arrow_down);  
  //lcd.createChar(2, light_on);
  lcd.createChar(2, punto);
  lcd.createChar(3, one_bar);
  lcd.createChar(4, two_bar);  
  lcd.createChar(5, tree_bar);  
  lcd.createChar(6, four_bar);
  lcd.createChar(7, five_bar);  
  lcd.init();
  //lcd.home();
  analogReference(INTERNAL);
  pinMode(OPEN_PLAFO, INPUT);
  pinMode(ONE_LED, OUTPUT);
  pinMode(TWO_LED, OUTPUT);
  pinMode(THREE_LED, OUTPUT);
  pinMode(FOUR_LED, OUTPUT);
  pinMode(FIVE_LED, OUTPUT);
  pinMode(LCD_LIGHT, OUTPUT);
  pinMode(TEMP_INPUT, INPUT);
  analogWrite(LCD_LIGHT,20);
  set_reset_value();
  tempo = millis();
  menuinit();
  Serial.begin(9600);
}

//# LOOP
//# ==================================
void loop()
{
  buttoncheck();
  funccheck(buttonPress);
  reading = analogRead(TEMP_INPUT);
  tempC = reading / 9.31;
  //tempC = (5.0 * reading * 100.0)/1024.0;
  controlTempLed(byte(tempC));
  Serial.println("Setting:");
  Serial.println(setting);
  Serial.println("Cursor position");
  Serial.println(cursorPosition);
  Serial.println("Button Press");
  Serial.println(buttonPress);
  Serial.println(Root.curfuncname);
  Serial.println("Tempo LCD");
  Serial.println(timeLcd);
  Serial.println("Temperatura");
  Serial.println(tempC);
  //control_led_lights();
  oldSecondCounter = secondCounter;
  secondCounter = (long) RTC.get(DS1307_HR,true) * 3600 + (long) RTC.get(DS1307_MIN,false)* 60 + (long) RTC.get(DS1307_SEC,false);
  // controlla e setta la durata del fading
  if(oneFadeDuration > onePhotoPeriod/2 && onePhotoPeriod > 0) {
    oneFadeDuration = onePhotoPeriod/2;
  }
  if(oneFadeDuration < 1){
    oneFadeDuration = 1;
  }
  if(twoFadeDuration > twoPhotoPeriod/2 && twoPhotoPeriod > 0) {
    twoFadeDuration = twoPhotoPeriod/2;
  }
  if(twoFadeDuration < 1){
    twoFadeDuration = 1;
  }
  if(threeFadeDuration > threePhotoPeriod/2 && threePhotoPeriod > 0) {
    threeFadeDuration = threePhotoPeriod/2;
  }  
  if(threeFadeDuration < 1){
    threeFadeDuration = 1;
  }

  //setta le uscite 
  oneVal = setLed(secondCounter, ONE_LED, oneStartSeconds, onePhotoPeriod, oneFadeDuration, oneMax);
  twoVal = setLed(secondCounter, TWO_LED, twoStartSeconds, twoPhotoPeriod, twoFadeDuration, twoMax);
  threeVal = setLed(secondCounter, THREE_LED, threeStartSeconds, threePhotoPeriod, threeFadeDuration, threeMax);
  if(oneVal > 0 || twoVal > 0 || threeVal > 0)
  { on_off_light= true;}
  else
  { on_off_light= false;}
  Serial.println("Oneval");
  Serial.println(oneVal);
  Serial.println("twoval");
  Serial.println(twoVal);
  Serial.println("threeval");
  Serial.println(threeVal);
  Serial.println(secondCounter);
  Serial.println(oneStartSeconds);
  Serial.println(onePhotoPeriod);
  Serial.println(oneFadeDuration);
  Serial.println("Control light stop");
  Serial.println(control_light_stop);
  offPlafo();
  if (timeLcd == 100){
    analogWrite(LCD_LIGHT,255);
  } 
  if (LCD_time_on == true)
  {
	printTemp(int(tempC));
    print_time_date(3);
  }  
  //delay(500);
}


//Funzione per settare accensione
//e spegnimento dei singoli canali LED
//con gestione effetto alba tramonto
int setLed(long Seconds,      // tempo corrente in secondi
int ledPin,      // numero di pin del canale LED
long start,      // tempo di partenza accensione del canale LED
long period,     // Periodo di accensione del canale LED
long fade,       // durata alba tramonto canale LED
int ledMax      // luminosità massima canale LED
)
{
  // controlla che non si sia in modalità settaggio luminosità,
  // on/off manuale o il coperchio alzato in quel caso esce dalla funzione
int val;
  if (control_light_stop == 0){
    // fade up...ossia gestione alba
    if (Seconds > start || Seconds <= start + fade) {
      val = map(Seconds - start, 0, fade, 0, ledMax * 2.55);
	}
    // fade down...gestione tramonto
    if (Seconds > start + period && Seconds <= start + period + fade) {
      val = map(Seconds - (start + period), 0, fade, ledMax * 2.55, 0);
	}  
    // off or post-midnight run spegnimento o partenza dopo mezzanotte
    if (Seconds <= start || Seconds > start + period + fade) {
      if((start + period + fade)%86400 < start && (start + period + fade)%86400 > Seconds)
      {
        val = map((start + period + fade - Seconds)%86400,0,fade,0,ledMax * 2.55);
	  }
      else {
        val = 0;
	  }
    }

    if (val > ledMax * 2.55) {
      val = ledMax * 2.55;
    }
    if (val < 0) {
      val = 0;
    }
    analogWrite(ledPin, val); // map(val, 0, 100, 0, 255));
    return val;  
 }

}  

//* Funzione print time_date
//* mostra data e ora sul display
void print_time_date(byte row)            
{
  int ora;
  int minuti;
  int secondi;
  int giorno;
  int mese;
  int anno;
  ora = RTC.get(DS1307_HR, true);
  minuti = RTC.get(DS1307_MIN, true);
  secondi = RTC.get(DS1307_SEC, true);
  giorno = RTC.get(DS1307_DATE, true);
  mese = RTC.get(DS1307_MTH, true);
  anno = RTC.get(DS1307_YR, true);
  blinker = false;
  if (giorno < 10 && giorno > 0) {
    print_value(0,row,0);
    print_value(1,row,giorno);
  }    
  else {
    print_value(0,row,giorno);
  }    
  print_text(2,row,"-");
  if (mese < 10 && mese > 0) {
    print_value(3,row,0);
    print_value(4,row,mese);
  }    
  else {
    print_value(3,row,mese);
  }    
  print_text(5,row,"-");
  print_value(6,row,anno);
  if (ora < 10 && ora >= 0) {
    print_text(11,row," ");
    print_value(12,row,ora);
  }  
  else {
    print_value(11,row,ora);
  }  
  print_text(13,row,":");
  if (minuti < 10 && minuti >= 0) {
    print_value(14,row,0);
    print_value(15,row,minuti);
  }  
  else {
    print_value(14,row,minuti);  
  }  

  print_text(16,row,":");
  if (secondi < 10 && secondi >= 0) {
    print_value(17,row,0);
    print_value(18,row,secondi);
  }  
  else {
    print_value(17,row,secondi);  
  }  

}

// funzione di settaggio data e ora corrente
void setDateHour(int button)
{
  print_text(16,rowMessage,"   ");      // rende non visibili i secondi
  switch (cursorPosition) {
  case 0:
  case 1:
    set_day(button);
    break;
  case 2:
    set_month(button);
    break;
  case 3:
    set_year(button);
    break;
  case 4:
    set_hour(button);
    break;
  case 5:
    set_minute(button);
    break;
  default:
    cursorPosition = 5; 
    break; 
  }
}  

//* settaggio giorno 
void set_day(int button)
{
  blinker = true;
  // controlla quale bottone è stato premuto
  if (button == _BUTTON_up) {
    if(giorno >= 1 && giorno < 32){
      giorno++;
    }      
    if(giorno == 32){
      giorno = 1;
    }   
  }   
  if (button == _BUTTON_down) {
    if(giorno > 0 && giorno <= 31){
      giorno--;
    }
    if(giorno == 0){
      giorno = 31;
    }   
  }      
  if (giorno < 10 && giorno > 0) {
    print_value(0,rowMessage,0);
    print_value(1,rowMessage,giorno);
  }
  else {
    print_value(0,rowMessage,giorno);
  }
  print_text(2,rowMessage,"-");
  lcd.setCursor(1,rowMessage);    
}

//* settaggio mese 
void set_month(int button)
{
  blinker = true;
  // controlla quale bottone è stato premuto
  if (button == _BUTTON_up) {
    if(mese >= 1 && mese < 13){
      mese++;
    }      
    if(mese == 13){
      mese = 1;
    }   
  }   
  if (button == _BUTTON_down) {
    if(mese > 0 && mese <= 12){
      mese--;
    }
    if(mese == 0){
      mese = 12;
    }   
  }      
  if (mese < 10 && mese > 0) {
    print_value(3,rowMessage,0);
    print_value(4,rowMessage,mese);
  }
  else {
    print_value(3,rowMessage,mese);
  }
  print_text(5,rowMessage,"-");
  lcd.setCursor(4,rowMessage);    
}

//* settaggio anno 
void set_year(int button)
{
  blinker = true;
  if (button == _BUTTON_up) {
    anno++;
  }   
  if (button == _BUTTON_down) {
    anno--;
  }      
  print_value(6,rowMessage,anno);
  lcd.setCursor(9,rowMessage);    
}

//* settaggio ora  
void set_hour(int button)
{
  blinker = true;
  // controlla quale bottone è stato premuto
  if (button == _BUTTON_up) {
    if(ora >= 0 && ora < 24){
      ora++;
    }      
    if(ora == 24){
      ora = 0;
    }   
  }   
  if (button == _BUTTON_down) {
    if(ora > -1 && ora <= 23){
      ora--;
    }
    if(ora == -1){
      ora = 23;
    }   
  }      
  if (ora < 10 && ora >= 0) {
    print_value(11,rowMessage,0);
    print_value(12,rowMessage,ora);
  }
  else {
    print_value(11,rowMessage,ora);
  }
  print_text(13,rowMessage,":");
  lcd.setCursor(12,rowMessage);    
}

//* settaggio minuti  
void set_minute(int button)
{
  blinker = true;
  // controlla quale bottone premuto
  if (button == _BUTTON_up) {
    if(minuti >= 0 && minuti < 60){
      minuti++;
    }      
    if(minuti == 60){
      minuti = 0;
    }   
  }   
  if (button == _BUTTON_down) {
    if(minuti > -1 && minuti <= 59){
      minuti--;
    }
    if(minuti == -1){
      minuti = 59;
    }   
  }      
  if (minuti < 10 && minuti >= 0) {
    print_value(14,rowMessage,0);
    print_value(15,rowMessage,minuti);
  }
  else {
    print_value(14,rowMessage,minuti);
  }
  lcd.setCursor(15,rowMessage);    
}

// setta accensione e spegnimento canale uno
void setTimeOne(int button)
{
  switch (cursorPosition) {
  case 0:
  case 1:
    setStartHour(button, oneStartHour);
    break;
  case 2:
    setStartMinute(button, oneStartMinute);
    break;
  case 3:
    setStopHour(button, oneStopHour);
    break;
  case 4:
    setStopMinute(button, oneStopMinute);
    break;
  default:
    cursorPosition = 4;
    break;
  }
}  

// setta accensione e spegnimento canale due
void setTimeTwo(int button)
{
  switch (cursorPosition) {
  case 0:
  case 1:
    setStartHour(button, twoStartHour);
    break;
  case 2:
    setStartMinute(button, twoStartMinute);
    break;
  case 3:
    setStopHour(button, twoStopHour);
    break;
  case 4:
    setStopMinute(button, twoStopMinute);
    break;
  default:
    cursorPosition = 4;
    break;
  }
}  

// setta accensione e spegnimento canale tre
void setTimeThree(int button)
{
  switch (cursorPosition) {
  case 0:
  case 1:
    setStartHour(button, threeStartHour);
    break;
  case 2:
    setStartMinute(button, threeStartMinute);
    break;
  case 3:
    setStopHour(button, threeStopHour);
    break;
  case 4:
    setStopMinute(button, threeStopMinute);
    break;
  default:
    cursorPosition = 4;
    break;
  }
}  

//* settaggio ora accensione LED
void setStartHour(int button, int &led_on_hour)
{
  blinker = true;
  if (button == _BUTTON_up) {
    if(led_on_hour >= 0 && led_on_hour < 24){
      led_on_hour++;
    }      
    if(led_on_hour == 24){
      led_on_hour = 0;
    }   
  }   
  if (button == _BUTTON_down) {
    if(led_on_hour > -1 && led_on_hour <= 23){
      led_on_hour--;
    }
    if(led_on_hour == -1){
      led_on_hour = 23;
    }   
  }      
  if (led_on_hour < 10 && led_on_hour >= 0) {
    print_value(4,rowMessage,0);
    print_value(5,rowMessage,led_on_hour);
  }
  else {
    print_value(4,rowMessage,led_on_hour);
  }
  print_text(6,rowMessage,":");
  lcd.setCursor(5,rowMessage);    
}

//* settaggio minuto accensione LED
void setStartMinute(int button, int &led_on_minute)
{
  blinker = true;
  // controlla quale bottone premuto
  if (button == _BUTTON_up) {
    if(led_on_minute >= 0 && led_on_minute < 60){
      led_on_minute++;
    }      
    if(led_on_minute == 60){
      led_on_minute = 0;
    }   
  }   
  if (button == _BUTTON_down) {
    if(led_on_minute > -1 && led_on_minute <= 59){
      led_on_minute--;
    }
    if(led_on_minute == -1){
      led_on_minute = 59;
    }   
  }      
  if (led_on_minute < 10 && led_on_minute >= 0) {
    print_value(7,rowMessage,0);
    print_value(8,rowMessage,led_on_minute);
  }
  else {
    print_value(7,rowMessage,led_on_minute);
  }
  lcd.setCursor(8,rowMessage);    
}

//* settaggio ora spegnimento LED
void setStopHour(int button, int &led_off_hour)
{
  blinker = true;
  if (button == _BUTTON_up) {
    if(led_off_hour >= 0 && led_off_hour < 24){
      led_off_hour++;
    }      
    if(led_off_hour == 24){
      led_off_hour = 0;
    }   
  }   
  if (button == _BUTTON_down) {
    if(led_off_hour > -1 && led_off_hour <= 23){
      led_off_hour--;
    }
    if(led_off_hour == -1){
      led_off_hour = 23;
    }   
  }      
  if (led_off_hour < 10 && led_off_hour >= 0) {
    print_value(14,rowMessage,0);
    print_value(15,rowMessage,led_off_hour);
  }
  else {
    print_value(14,rowMessage,led_off_hour);
  }
  print_text(16,rowMessage,":");
  lcd.setCursor(15,rowMessage);    
}

//* settaggio minuti spegnimento LED
void setStopMinute(int button, int &led_off_minute)
{
  blinker = true;
  // controlla quale bottone premuto
  if (button == _BUTTON_up) {
    if(led_off_minute >= 0 && led_off_minute < 60){
      led_off_minute++;
    }      
    if(led_off_minute == 60){
      led_off_minute = 0;
    }   
  }   
  if (button == _BUTTON_down) {
    if(led_off_minute > -1 && led_off_minute <= 59){
      led_off_minute--;
    }
    if(led_off_minute == -1){
      led_off_minute = 59;
    }   
  }      
  if (led_off_minute < 10 && led_off_minute >= 0) {
    print_value(17,rowMessage,0);
    print_value(18,rowMessage,led_off_minute);
  }
  else {
    print_value(17,rowMessage,led_off_minute);
  }
  lcd.setCursor(18,rowMessage);    
}


void setFade(int button){                // settaggio alba tramonto dei canali
  switch (cursorPosition) {
  case 0:
  case 1:
    setFadeTime(button, oneMinFade, 4);
    break;
  case 2:
    setFadeTime(button, twoMinFade, 11);
    break;
  case 3:
    setFadeTime(button, threeMinFade, 18);
    break;
  default:
    cursorPosition = 3;
    break;
  }       
}



//* settaggio tempo alba/tramonto
void setFadeTime(int button,int &varFade, byte chrPos)
{
  blinker = true;
  // controlla quale bottone premuto
  if (button == _BUTTON_up) {
    if(varFade >= 0 && varFade <= 60){
      varFade++;
    }      
    if(varFade == 61){
      varFade = 0;
    }   
  }   
  if (button == _BUTTON_down) {
    if(varFade > -1 && varFade <= 60){
      varFade--;
    }
    if(varFade == -1){
      varFade = 60;
    }   
  }      
  if (varFade < 10 && varFade >=0){
    print_value(chrPos,rowMessage,0);
    print_value(chrPos+1,rowMessage,varFade);
  }
  else {
    print_value(chrPos,rowMessage,varFade);
  }
  lcd.setCursor(chrPos+1,rowMessage);  
}


void setLux(int button){
  switch (cursorPosition) {
  case 0:
  case 1:
    setMaxLux(button, oneMax, ONE_LED, 1);
    break;
  case 2:
    setMaxLux(button, twoMax, TWO_LED, 7);
    break;
  case 3:
    setMaxLux(button, threeMax, THREE_LED, 14);
  default:
    cursorPosition = 3;
    break;
  }     
}

//* settaggio luminosità massima dei vari canali
void setMaxLux(int button, int &varLux, byte PIN_LED, byte chrPos){
  // controlla quale bottone premuto
  if (button == _BUTTON_up) {
    if(varLux >= 0 && varLux < 100){
      varLux++;
    }      
  }   
  if (button == _BUTTON_down) {
    if(varLux > 0 && varLux <= 100){
      varLux--;
    }
  }      
  int bright = (varLux * 2.55);
  //Serial.println(lux);
  analogWrite(PIN_LED, bright);
  blinker = true;
  if (varLux < 10) {
    lcd.setCursor(chrPos,rowMessage);
    lcd.print(' ');
    lcd.setCursor(chrPos+1,rowMessage);
    lcd.print(' ');
    print_value(chrPos+2,rowMessage,varLux);
  }
  else if (varLux >= 10 && varLux <= 99){
    lcd.setCursor(chrPos,rowMessage);
    lcd.print(' ');
    print_value(chrPos+1,rowMessage,varLux);
  }
  else {
    print_value(chrPos,rowMessage,varLux);
  }  
  lcd.print("%");
}

void setManualOn(int button){		//setta on off manualmente i singoli canali
     switch (cursorPosition) {
         case 0:
         case 1:
           manualOn(button, outValOne, ONE_LED, 1);
           break;
         case 2:
           manualOn(button, outValTwo, TWO_LED, 7);
           break;
         case 3:
           manualOn(button, outValThree, THREE_LED, 14);
         default:
           cursorPosition = 3;
           break;
      }     
}  


//* accensione manuale dei canali
void manualOn(int button, byte &Val, byte PIN_LED, byte chrPos)
{
  
  blinker = true;
  if (button == _BUTTON_up) {
	 Val = 255;
	 //analogWrite(PIN_LED, Val);
  }
  if (button == _BUTTON_down) {
     Val = 0;
	 //analogWrite(PIN_LED, Val);
  }      
  if(Val > 0)
  {
    print_text(chrPos + 1,rowMessage,"On ");
    lcd.setCursor(chrPos,rowMessage);
   
  }
  else
  {
    print_text(chrPos + 1,rowMessage,"Off");
    lcd.setCursor(chrPos,rowMessage);
    
  }  
 analogWrite(PIN_LED, Val);
}

void setLcdTime(int button){			//settaggio del tempo di illuminazione dell'LCD
  blinker = true;
  if (button == _BUTTON_up) {
    if(timeLcd >= 0 && timeLcd <= 90){
      timeLcd = timeLcd + 10;
    }      
  }   
  if (button == _BUTTON_down) {
    if(timeLcd > 10 && timeLcd <= 100){
      timeLcd = timeLcd -10;
    }
  }      
  if (timeLcd <= 90){
    print_value(9,rowMessage,timeLcd);
  }
  else{
    print_text(9,rowMessage,"On");
  }  
}  


void setLuxOpenPlafo(int button){			// settaggio minima luminosità led a plafo aperta
  blinker = true;
  if (button == _BUTTON_up) {
    if(maxOpenPlafo >= 0 && maxOpenPlafo <= 99){
      maxOpenPlafo++;
    }      
  }   
  if (button == _BUTTON_down) {
    if(maxOpenPlafo > 1 && maxOpenPlafo <= 100){
      maxOpenPlafo--;
    }
  } 
  if(maxOpenPlafo > 9 && maxOpenPlafo < 100){
    print_text(12,rowMessage," ");
    print_value(13,rowMessage,maxOpenPlafo);
  }  
  if(maxOpenPlafo < 10){
    print_text(12,rowMessage,"  ");
    print_value(14,rowMessage,maxOpenPlafo);
  }  
}


//* Funzione per la stampa su LCD di valori numerici
void print_value(int col, int row, int value)
{
  lcd.setCursor(col,row);
  lcd.print(value);
  if (blinker == true) {
    lcd.blink();
  }  
  else {
    lcd.noBlink();
  }  
}

//* Funzione per la stampa su LCD di valori testo
void print_text(int col, int row, char* text)
{
  lcd.setCursor(col,row);
  lcd.print(text);
  if (blinker == true) {
    lcd.blink();
  }  
  else {
    lcd.noBlink();
  }  
}

//* Funzione di salvataggio dei dati nella eeprpom relativi a
//  data corrente, ora corrente, orari di accensione e spegnimento
//  della plafo, tempo di alba-tramonto, luminosità singoli canali

void save_data()
{
  if (setting == 1)
  {
    RTC.stop();
    RTC.set(DS1307_MIN,minuti);       //setta i minuti
    RTC.set(DS1307_HR,ora);        //setta l'ora
    RTC.set(DS1307_DATE,giorno);      //setta la data
    RTC.set(DS1307_MTH,mese);        //setta il mese
    RTC.set(DS1307_YR,(anno-2000));        //setta l'anno
    RTC.start();
  }  
  if (setting ==2 || setting == 3 || setting == 4)
  {
    EpromOneStartHour = oneStartHour;
    EpromOneStartMinute = oneStartMinute;
    EpromOneStopHour = oneStopHour;
    EpromOneStopMinute = oneStopMinute;
    EpromTwoStartHour = twoStartHour;
    EpromTwoStartMinute = twoStartMinute;
    EpromTwoStopHour = twoStopHour;
    EpromTwoStopMinute = twoStopMinute;
    EpromThreeStartHour = threeStartHour;
    EpromThreeStartMinute = threeStartMinute;
    EpromThreeStopHour = threeStopHour;
    EpromThreeStopMinute = threeStopMinute;
  }  
  if( setting == 5 )
  {
    EpromOneFadeDuration = oneMinFade;
    EpromTwoFadeDuration = twoMinFade;
    EpromThreeFadeDuration = threeMinFade;
  }  
  if( setting == 6 )
  {
    EpromOneMax = oneMax;
    EpromTwoMax = twoMax;
    EpromThreeMax = threeMax;
  }  
  if( setting == 8 )
  {
    EpromTimeLcd = timeLcd;
  }  
  if( setting == 9 )
  {
    EpromMaxOpenPlafo = maxOpenPlafo;
  }  
}

//* mostra su LCD la scritta dati salvati lampeggiante
void print_save_date()
{
  for (int i=0; i <= 3; i++){
    print_text(0,3,"Dati salvati");
    delay(500);
    print_text(0,3,"            ");
    delay(500);
  } 

}

// funzione di lettura delle memorie all'avvio del programma
// chiamata da setup e ad ogni salvataggio dei dati
// alla prima chiamata controlla se le memorie sono fuori range e
// corregge i dati
void set_reset_value()
{
  oneMax = EpromOneMax;
  twoMax = EpromTwoMax;
  threeMax = EpromThreeMax;
  max1 = oneMax;
  max2 = twoMax;
  max3 = threeMax;
  oneStartHour = EpromOneStartHour; 
  oneStartMinute = EpromOneStartMinute; 
  oneStartSeconds = (long) oneStartHour * 3600 + (long) oneStartMinute* 60;
  twoStartHour = EpromTwoStartHour; 
  twoStartMinute = EpromTwoStartMinute;
  twoStartSeconds = (long) twoStartHour * 3600 + (long) twoStartMinute * 60;
  threeStartHour = EpromThreeStartHour; 
  threeStartMinute = EpromThreeStartMinute; 
  threeStartSeconds = (long) threeStartHour * 3600 + (long) threeStartMinute * 60;
  oneStopHour = EpromOneStopHour; 
  oneStopMinute = EpromOneStopMinute; 
  onePhotoPeriod = ((long) oneStopHour * 3600 + (long) oneStopMinute * 60) - oneStartSeconds;
  twoStopHour = EpromTwoStopHour; 
  twoStopMinute = EpromTwoStopMinute; 
  twoPhotoPeriod = ((long)twoStopHour * 3600 + (long)twoStopMinute * 60) - twoStartSeconds;
  threeStopHour = EpromThreeStopHour; 
  threeStopMinute = EpromThreeStopMinute; 
  threePhotoPeriod = ((long) threeStopHour * 3600 + (long) threeStopMinute * 60) - threeStartSeconds;
  oneMinFade = EpromOneFadeDuration;
  twoMinFade = EpromTwoFadeDuration;
  threeMinFade = EpromThreeFadeDuration;
  oneFadeDuration = (long) oneMinFade * 60;
  twoFadeDuration = (long) twoMinFade * 60;
  threeFadeDuration = (long) threeMinFade * 60;
  timeLcd = EpromTimeLcd;
  maxOpenPlafo = EpromMaxOpenPlafo;
  //  analogWrite(ONE_LED, 0);
  //  analogWrite(TWO_LED, 0);
  //  analogWrite(THREE_LED, 0);
}

void offPlafo()
{
 if (setting != 7){
  if(digitalRead(OPEN_PLAFO)== HIGH){
    if(on_off_light == true) {
      control_light_stop = 1;
      analogWrite(ONE_LED, maxOpenPlafo);
      analogWrite(TWO_LED, maxOpenPlafo);
      analogWrite(THREE_LED, maxOpenPlafo);

    }
  }  
  if(digitalRead(OPEN_PLAFO)== LOW) {
    control_light_stop = 0;
  }  
 }
}


void goBack()
{
  lcd.noBlink();
  Root.goBack();
  setting = 0;
  if(Root.curfuncname == "Root"){
    LCD_time_on = true;
  }  
}  

void goEnter()
{
  lcd.noBlink();
  Root.goEnter();
  setting = 0;
  control_light_stop = 0; 
}


void printStartStopTime(int startHour,
int startMinute,
int stopHour,
int stopMinute
)
{
  print_text(0,rowMessage," On:      Off:");
  if (startHour < 10 && startHour >= 0) {
    print_value(4,rowMessage,0);
    print_value(5,rowMessage,startHour);
  }  
  else {
    print_value(4,rowMessage,startHour);
  }  
  print_text(6,rowMessage,":");
  if (startMinute < 10 && startMinute >= 0) {
    print_value(7,rowMessage,0);
    print_value(8,rowMessage,startMinute);
  }  
  else {
    print_value(7,rowMessage,startMinute);  
  }  
  if (stopHour < 10 && stopHour >= 0) {
    print_text(14,rowMessage," ");
    print_value(15,rowMessage,stopHour);
  }  
  else {
    print_value(14,rowMessage,stopHour);
  }  
  print_text(16,rowMessage,":");
  if (stopMinute < 10 && stopMinute >= 0) {
    print_value(17,rowMessage,0);
    print_value(18,rowMessage,stopMinute);
  }  
  else {
    print_value(17,rowMessage,stopMinute);  
  }  


}


void selectSet(int which)                //funzione di selezioni dei vari settaggi alla pressione dei tasti
{
  switch (setting) {
  case 1:
    if(which == _BUTTON_up || which == _BUTTON_down || which == _BUTTON_right){
      setDateHour(which);
    }   
    else{   
      if (cursorPosition == 0){
        goEnter();
      } 
      else {
        setDateHour(which);
      }   
    }  
    break;
  case 2:
    if(which == _BUTTON_up || which == _BUTTON_down || which == _BUTTON_right){
      setTimeOne(which);
    }   
    else{   
      if (cursorPosition == 0){
        goEnter();
      } 
      else {
        setTimeOne(which);
      }   
    }  
    break;
  case 3:
    if(which == _BUTTON_up || which == _BUTTON_down || which == _BUTTON_right){
      setTimeTwo(which);
    }   
    else{   
      if (cursorPosition == 0){
        goEnter();
      } 
      else {
        setTimeTwo(which);
      }   
    }  
    break;
  case 4:
    if(which == _BUTTON_up || which == _BUTTON_down || which == _BUTTON_right){
      setTimeThree(which);
    }   
    else{   
      if (cursorPosition == 0){
        goEnter();
      } 
      else {
        setTimeThree(which);
      }   
    }  
    break;
  case 5:
    if(which == _BUTTON_up || which == _BUTTON_down || which == _BUTTON_right){
      setFade(which);
    }   
    else{   
      if (cursorPosition == 0){
        goEnter();
      } 
      else {
        setFade(which);
      }   
    }  
    break;
  case 6:
    if(which == _BUTTON_up || which == _BUTTON_down || which == _BUTTON_right){
      setLux(which);
    }   
    else{   
      if (cursorPosition == 0){
        goEnter();
      } 
      else {
        setLux(which);
      }   
    }  
    break;
  case 7:
    if(which == _BUTTON_up || which == _BUTTON_down || which == _BUTTON_right){
      setManualOn(which);
    }   
    else{   
      if (cursorPosition == 0){
        goEnter();
      } 
      else {
        setManualOn(which);
      }   
    }  
    break;
  case 8:
    if(which == _BUTTON_up || which == _BUTTON_down || which == _BUTTON_right){
      setLcdTime(which);
    }   
    else{   
      if (cursorPosition == 0){
        goEnter();
      } 
      else {
        setLcdTime(which);
      }   
    }  
    break;
  case 9:
    if(which == _BUTTON_up || which == _BUTTON_down || which == _BUTTON_right){
      setLuxOpenPlafo(which);
    }   
    else{   
      if (cursorPosition == 0){
        goEnter();
      } 
      else {
        setLuxOpenPlafo(which);
      }   
    }  
    break;
  }

}  

void printTemp(int temp)
{
	print_text(8,0,"Temp.");
	print_value(14, 0, temp);
	lcd.write(2);
	print_text(17,0,"C");
}

void controlTempLed(byte tempC)			
{
	if(tempC < firstStepTemp)
		{oneMax = max1;
		 twoMax = max2;
		 threeMax = max3;
		}
	else if(tempC >= firstStepTemp && tempC < secondStepTemp)
		{oneMax = max1 - (max1/10);
		 twoMax = max2 - (max2/10);
		 threeMax = max3 - (max3/10);
		}

	else if(tempC >= secondStepTemp && tempC < thirdStepTemp)
		{oneMax = max1 - (max1/3);
		 twoMax = max2 - (max2/3);
		 threeMax = max3 - (max3/3);
		}
	else if(tempC >= thirdStepTemp)
		{oneMax = 0;
		 twoMax = 0;
		 threeMax = 0;
		}
}
//void barra_up()
//{
//   if (millis() - tempo_barra >= quoziente_barra) 
//       { 
//         if (stepper_bar == 7)
//         {
//             ++colonna;
//             stepper_bar = 2;
//         }   
//         if (colonna < 20) 
//         {
//           lcd.setCursor(colonna,2);
//           ++stepper_bar;
//           lcd.write(stepper_bar);
//         }  
//         tempo_barra = millis();
//       }  
//}
Si ma la libreria LCDMenu2_i2c.h dove l'hai presa?
__________________
ciao Antonio

L'amore edifica, la scienza gonfia (la Bibbia)
a.milazzo non è in linea   Rispondi quotando
 
Page generated in 0,13660 seconds with 14 queries