Pages: 1 [2]   Go Down
Author Topic: Aiuto funzionamento programma per gestione luci tramite menu(codice già scritto)  (Read 1399 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 58
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Siamo poco sincronizzati smiley ...
bene mi fa piacere allora il problema è più semplice basta che modifichi il codice per i pulsanti analogici ... se scopiazzi un pò ... io ci sono riuscito ed ero incapace (non che ora sia tanto meglio).
ciao

ahah, allora adesso do un occhiata al tuo programmino, poi ti dico se sono in grado o meno smiley-lol
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 104
Posts: 6607
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

L'errore che mi esce è questo


In file included from programmaLED.ino:28:
C:\Users\matteociocca\Downloads\arduino-1.0.3-windows\arduino-1.0.3\libraries\Button/Button.h:23:22: error: WProgram.h: No such file or directory

Questo errore esce quando una libreria non è aggiornata per essere usata con le versioni dell'IDE dalla 1.0 in poi.
Dovresti cercare una libreria aggiornata.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Jr. Member
**
Karma: 0
Posts: 58
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

L'errore che mi esce è questo


In file included from programmaLED.ino:28:
C:\Users\matteociocca\Downloads\arduino-1.0.3-windows\arduino-1.0.3\libraries\Button/Button.h:23:22: error: WProgram.h: No such file or directory

Questo errore esce quando una libreria non è aggiornata per essere usata con le versioni dell'IDE dalla 1.0 in poi.
Dovresti cercare una libreria aggiornata.
Grazie, quindi dovrei trovare una libreria Button da poter usare con la IDE 1.0 .
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 104
Posts: 6607
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Esatto. --> https://github.com/tigoe/Button

Un'altra cosa.
Ti conviene inserire le librerie che scarichi all'interno della cartella libraries dove ci sono gli sketch (di solito la cartella Arduino) e non in quella dell'IDE.
In questo modo cambiando IDE hai le librerie aggiuntive sempre disponibili.
« Last Edit: January 29, 2013, 09:49:13 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Mechmate #70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Paolo,
temo che il problema non sia solo di librerie ... ha provato a compilarlo con una vecchia versione dell'IDE e va, io ho provato sul mio con libreria aggiornate e riporta numerosi altri errori oltre quello segnalato.

Matteo,
io passaggio da pulsanti digitali ad analogici è stato il mio primo approccio con Arduino totalmente a digiuno di programmazione ... se guardi uno degli esempi di MENWIZ vedi anche da cosa sono partito
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 58
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Paolo,
temo che il problema non sia solo di librerie ... ha provato a compilarlo con una vecchia versione dell'IDE e va, io ho provato sul mio con libreria aggiornate e riporta numerosi altri errori oltre quello segnalato.

Matteo,
io passaggio da pulsanti digitali ad analogici è stato il mio primo approccio con Arduino totalmente a digiuno di programmazione ... se guardi uno degli esempi di MENWIZ vedi anche da cosa sono partito

Volevo utilizzare anchio MENWIZ per creare il menu, ma poi ho trovato il programma già pronto, adesso stavo dando un occhiata allora per trasformarli in numeri faccio in fretta posso fare anche così no?
Code:
void readButtons()

// ++++ Control 4 buttons ++++
{
  lastButtonPressed = buttonPressed;

 // Analog values representing the pushbutton value are depending on the resitor value used.
 
  buttonValue = analogRead(buttonPin); //analog value to simulate the pushed buttons
   
  switch (buttonValue){
case 50:
buttonPressed=0;
case 200:
buttonPressed=1;
case 400:
buttonPressed=2;
case 600:
buttonPressed=3;
}

}
Solo che poi non so come utilizzarlo per bene nel programma.
Di programma ne ho anche un altro, che mi sembra un po meglio perchè al posto di tutti gli if utilizza uno switch che richiama funzioni..
Tu che dici?
Logged

Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Mechmate #70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Con case 50, case 200, case 400 ecc. si intende il valore delle resistenze ? se si considera che io con lo stesso shield ho valori diversi.
Se vuoi controllare i valori usa la funzione serial.println
Code:
/*
  Analog values representing the pushbutton value are depending on the resitor value used.
   Test the values first with the serial.monitor
   */
  buttonValue = analogRead(buttonPin); //analog value to simulate the pushed buttons
  Serial.println(buttonValue );
...
e poi controlla col monitor seriale che valori vengono fuori ... calcola che io ho messo un intervallo perchè il valore putrebbe oscillare un minimo. però vedi te.
se hai messo i pin che ti ho dato per LCD e lo attacchi e flashi il codice dovrebbe funzionare. così puoi controllare i valori dei pulsanti coll monitor seriale
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 58
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Con case 50, case 200, case 400 ecc. si intende il valore delle resistenze ? se si considera che io con lo stesso shield ho valori diversi.
Se vuoi controllare i valori usa la funzione serial.println
Code:
/*
  Analog values representing the pushbutton value are depending on the resitor value used.
   Test the values first with the serial.monitor
   */
  buttonValue = analogRead(buttonPin); //analog value to simulate the pushed buttons
  Serial.println(buttonValue );
...
e poi controlla col monitor seriale che valori vengono fuori ... calcola che io ho messo un intervallo perchè il valore putrebbe oscillare un minimo. però vedi te.
se hai messo i pin che ti ho dato per LCD e lo attacchi e flashi il codice dovrebbe funzionare. così puoi controllare i valori dei pulsanti coll monitor seriale

Sisi intendo i valori delle resistenze, li ho guardati dall'esempio della mia shield.
Comunque sto pensando di relaizzarmi io una piccola board con 4 pulsantini, in questo modo evito il problema, e posso mettere dobe preferisco i pilsanti.
Purtroppo sto aspettando ancora l'arduino, sto solo preparando il codice per poi essere pronto quando mi arriva.
Volevo chiederti, RTC a che pin lo collego?
Code:
// set the RTC's I2C address
#define DS1307_I2C_ADDRESS 0x68
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 104
Posts: 6607
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gli RTC vanno collegati al Bus I2C, quindi ai piedini SDA e SCD della UNO R3 oppure ai pin A4 e A5 (che sono collegati agli stessi pin del micro)
Un utente ha fatto un'ottimo schema per i collegamenti --> http://arduino.cc/forum/index.php/topic,145531.0.html
Naturalmente utilizzando l'RTC non potrai usare gli ingressi analogici A4 e A5.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti  smiley
Mi sono scritto solo per rispondere a questo topic dato che il mio primo progetto con Arduino è essenzialmente lo stesso di Matteo.
Un Arduino DuemilaNove, un modulo TinyRTC, un Keypad+LCD 16x2 stile quello DFRobot ed un sensore di temperatura subacqueo il tutto per gestire due driver per luci LED via PWM.

Anche io sono partito dal codice del Typhon Controller ma l'ho presto abbandonato.
Alla fine ho usato la libreria phi_prompt per i Menù mentre per il calcolo del valore PWM mi sono basato sul codice di dangerduino/krusduino.

In previsione ho l'acquisto di un modulo Bluetooth o ethernet...
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il codice.
Ovviamente serviranno le librerie che si vedono incluse all'inizio.
Sulla RTClib mi sembra di aver dovuto fare qualche modifica, mentre sulla phi_prompt ho sicuramento tradotto YES e NO in SI e NO e modificato il valore alla riga 419 del file phi_interfaces.cpp da 10 ad 80, ma non è detto che serva...)
Occorrerà reimpostare i valori dei pulsanti analogici rispetto a quelli rilevati dal proprio dispositivo, i miei sono 70,220,460,625,950
Poi c'è la parte per rilevare la temperatura, che comprende le librerie OneWire e DallasTemperature quindi da non includere per chi non usa il sensore di temperatura così come tutte le parti di codice interessate.

Ho qualche dubbio su come ho gestito il debug su monitor seriale, non ho capito se fosse meglio chiudere il codice in degli #ifdef...

Questo è il mio primo progetto con Arduino e mi piacerebbe ricevere suggerimenti da qualcuno più esperto su come potrei migliorare il mio codice! smiley

Code:
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
#include <stdio.h>
#include <avr/pgmspace.h>
#include <phi_interfaces.h>
#include <phi_prompt.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
#include <EEPROMVar.h>

//Phi-2 shield LCD pin setting
#define LCD_RS 8
#define LCD_EN 9
#define LCD_D4 4
#define LCD_D5 5
#define LCD_D6 6
#define LCD_D7 7

#define SS 15  //Sector size
#define lcd_rows 2
#define lcd_columns 16
#define analog_buttons_per_column 5 // Each analog pin has five buttons with resistors.
#define analog_buttons_per_row 1 // There are two analog pins in use.

const bool DEBUG = false;

RTC_DS1307 RTC;
OneWire ourWire(2);//2 = pin temperatura
DallasTemperature tempSensor(&ourWire);

const int ledPinBlue = 3;   // select the pin for the LED
const int ledPinWhite = 11;

/******************************************************************/
//                               PHI LIBRARY
/*****************************************************************/

// This is an analog keypad.
char analog_mapping[] = {
  'R','U','D','L','B'};
byte analog_pins[] = {
  0}; // The pin numbers are analog pin numbers.
int values[]={
  70,220,460,625,900};//(70,220,460,625,950_OK)

phi_analog_keypads analog_keypad(analog_mapping, analog_pins, values, analog_buttons_per_row, analog_buttons_per_column);

// This serial keypad is for debugging.
phi_serial_keypads debug_keypad(&Serial,57600);

// The following sets up function keys for phi_prompt library
char up_keys[]={
  "U"};
char down_keys[]={
  "D"};
char left_keys[]={
  "L"};
char right_keys[]={
  "R"};
char enter_keys[]={
  "B"};
char escape_keys[]={
  "A"};
char * function_keys[]={
  up_keys,down_keys,left_keys,right_keys,enter_keys,escape_keys};

// The following adds all available keypads as inputs for phi_prompt library
multiple_button_input * keypads[]={
  &analog_keypad, &debug_keypad,0};
LiquidCrystal lcd(LCD_RS,LCD_EN,LCD_D4,LCD_D5,LCD_D6,LCD_D7); // Create the lcd object


/**************************************************************************/
//                                KRUSDUINO
/**************************************************************************/
byte bled[96] = {
  1, 1, 1, 1, 1, 1, 1, 1,  //0 - 1
  1, 1, 1, 1, 1, 1, 1, 1,  //2 - 3
  1, 1, 1, 1, 1, 1, 1, 1,  //4 - 5
  1, 1, 1, 1, 7, 12, 15, 16,  //6 - 7
  18, 19, 20, 21, 22, 23, 24, 25,  //8 - 9
  26, 27, 28, 29, 30, 31, 32, 33,  //10 - 11
  34, 35, 34, 33, 32, 31, 30, 29,  //12 - 13
  28, 27, 26, 25, 24, 23, 22, 21,  //14 - 15
  20, 19, 18, 16, 15, 12, 7, 1,  //16 - 17
  1, 1, 1, 1, 1, 1, 1, 1,  //18 - 19
  1, 1, 1, 1, 1, 1, 1, 1,  //20 - 22
  1, 1, 1, 1, 1, 1, 1, 1    //22 - 23
}; 
byte wled[96] = {
  0, 0, 0, 0, 0, 0, 0, 0,  //0 - 1
  0, 0, 0, 0, 0, 0, 0, 0,  //2 - 3
  0, 0, 0, 0, 0, 0, 0, 0,  //4 - 5
  0, 0, 0, 1, 4, 9, 14, 18,  //6 - 7
  64, 75, 87, 99, 113, 124, 135, 146,  //8 - 9
  157, 168, 177, 184, 190, 194, 198, 200,  //10 - 11
  202, 203, 202, 200, 198, 194, 190, 184,  //12 - 13
  177, 168, 157, 146, 135, 124, 113, 99,  //14 - 15
  87, 75, 64, 18, 14, 9, 4, 1,  //16 - 17
  0, 0, 0, 0, 0, 0, 0, 0,  //18 - 19
  0, 0, 0, 0, 0, 0, 0, 0,  //20 - 22
  0, 0, 0, 0, 0, 0, 0, 0    //22 - 23
};  //White LED array in RAM

const int bkl_pin = 10;
const byte bkl_IdleVal = 2;        //3 PWM value for backlight at idle

byte second, minute, hour, day, month;//, year;
int year;

long previousMillisFive = 5000;//al primo giro scatta subito la funzione
int min_cnt ;
byte bled_out;
byte wled_out;

EEPROMVar<boolean> temp_bool = true;
EEPROMVar<byte> wled_out_man = 0;
EEPROMVar<byte> bled_out_man = 0;


//************************** 
//LED Levels output KRUSDUINO
//*************************
void LED_levels_output(){
  int sector, sstep, t1, t2;

  if (min_cnt>=1440) {
    min_cnt=1;
  }   // 24 hours of minutes
  sector = min_cnt/SS;    // divided by gives sector -- 15 minute
  sstep = min_cnt%SS;     // remainder gives add on to sector value


  t1 =sector;
  if (t1==95) {
    t2=0;
  }
  else {
    t2 = t1+1;
  }
  if (DEBUG) {
    Serial.print(t1);
    Serial.print("__");
    Serial.print(sstep);

  }
  if (sstep==0)
  {
    bled_out = bled[t1];
    wled_out = wled[t1];
  }
  else {
    bled_out = check(&bled[t1], &bled[t2], sstep);
    wled_out = check(&wled[t1], &wled[t2], sstep);
  }

  if(temp_bool){
    analogWrite(ledPinBlue, bled_out);
    analogWrite(ledPinWhite, wled_out);
  }
  else{
    analogWrite(ledPinBlue, bled_out_man);
    analogWrite(ledPinWhite, wled_out_man);
  }

  if (DEBUG) {
    Serial.print(" >W ");
    Serial.print(int(wled_out));
    Serial.print(" -B ");
    Serial.print(int(bled_out));
    Serial.print(" .. ");
    Serial.println(min_cnt);
  }

}

byte check( byte *pt1, byte *pt2, int lstep){
  byte result;
  float fresult;

  if (*pt1==*pt2) {
    result = *pt1;
  }   // No change
  else if (*pt1<*pt2)                //Increasing brightness
  {
    fresult = ((float(*pt2-*pt1)/15.0) * float(lstep))+float(*pt1);
    result = byte(fresult);
  }
  //Decreasing brightness
  else {
    fresult = -((float(*pt1-*pt2)/15.0) * float(lstep))+float(*pt1);
    result = byte(fresult);

  }

  return result;
}

/****TEMP_PRINT**************/
void tempPrint(){
  lcd.setCursor(10, 0);
  lcd.print(tempSensor.getTempCByIndex(0));
  lcd.print((char)223);

}

/*****LIGHT_POWER_PRINT*****/
void lightPrint(){
  lcd.setCursor(0,1);
  lcd.print("                ");//pulisce riga
  lcd.setCursor(0,1);
  lcd.print("Bianco");
  temp_bool ? lcd.print(int(wled_out)) : lcd.print(int(wled_out_man));
  lcd.print(" Blu");
  temp_bool ? lcd.print(int(bled_out)) : lcd.print(int(bled_out_man));

  if(!temp_bool){
    lcd.setCursor(6,0);
    lcd.print("MAN");
  }
}

// format hours, mins into a readable time (24 hr format)
void printHM (byte hr, byte mn){
  if(hr<10)lcd.print("0");
  lcd.print(hr, DEC);
  lcd.print(":");
  if(mn<10)lcd.print("0");
  lcd.print(mn, DEC);
}

void printDMYHM(byte dd, byte mon, int yr, byte hr, byte mn){
  if(dd<10)lcd.print("0");
  lcd.print(dd, DEC);
  lcd.print("/");
  if(mon<10) lcd.print("0");
  lcd.print(mon, DEC);
  lcd.print("/");
  lcd.print(yr, DEC);
  lcd.print(" ");
  if(hr<10)lcd.print("0");
  lcd.print(hr, DEC);
  lcd.print(":");
  if(mn<10)lcd.print("0");
  lcd.print(mn, DEC);
}

void setDate(int y,byte mon, byte d, byte h,byte m) {
  RTC.adjust(DateTime(y, mon, d, h, m, 0));//è giusto impostare al secondo 0
}

void getDate(byte *second,byte *minute,byte *hour,byte *day,byte *month,int *year) {
  DateTime now = RTC.now();
  *second     = now.second();
  *minute     = now.minute();
  *hour       = now.hour();
  *day        = now.day();
  *month      = now.month();
  *year       = now.year();
}

/******************************************/
//              START of SETUP
/******************************************/

void setup() {
  if (DEBUG) Serial.begin(57600);
  Wire.begin();//serve per l'RTC
  RTC.begin();

  /*****TEMP_SETUP***********/
  tempSensor.begin();

  /*****PHI + LCD_SETUP************/
  pinMode(bkl_pin, OUTPUT);
  digitalWrite(bkl_pin, HIGH);   
  lcd.begin(lcd_columns, lcd_rows);
  init_phi_prompt(&lcd,keypads,function_keys, lcd_columns, lcd_rows, '~');
  lcd.clear();
  lcd.print("SETUP");
  delay(2000);

  /******ADDITIONAL_SETUP************/
  //eeprom_clear();
  //RTC.adjust(DateTime(__DATE__, __TIME__));

  lcd.clear();
  analogWrite(bkl_pin,bkl_IdleVal);
}

/******************************************/
//             START of MAINLOOP
/******************************************/
void loop() {

  unsigned long currentMillis = millis();
  if (currentMillis - previousMillisFive > 5000) {
    previousMillisFive = currentMillis;

    tempSensor.requestTemperatures();
    getDate(&second, &minute, &hour, &day, &month, &year);

    min_cnt = hour * 60 + minute;
    LED_levels_output();
    lcd.setCursor(0,0);
    printHM(hour, minute);
    lightPrint();
    tempPrint();
  }

  int temp = wait_on_escape(50); // Use phi_keypads object to access the keypad
  if (temp!=0) {top_menu();}
}
//**********************************************
//**********END of MAINLOOP*********************
//**********************************************

« Last Edit: April 10, 2013, 11:55:24 am by Giova__ » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
//****MENUS
PROGMEM prog_char esci[]="Esci";

PROGMEM prog_char top_menu_item00[]="Modalita'";
PROGMEM prog_char top_menu_item01[]="Impostazioni";
PROGMEM const char *top_menu_items[] = {
  top_menu_item00, top_menu_item01, esci};

PROGMEM prog_char sub_menu_modalita_item00[]="Temporizzato";
PROGMEM prog_char sub_menu_modalita_item01[]="Manuale";
PROGMEM const char *sub_menu_modalita_items[] = {
  sub_menu_modalita_item00, sub_menu_modalita_item01, esci};

PROGMEM prog_char sub_menu_impostazioni_item00[]="Imposta Ora";
PROGMEM const char *sub_menu_impostazioni_items[] = {
  sub_menu_impostazioni_item00, esci};

int global_style = 0;

void top_menu()
{
  int menu_pointer_1 = 0; // This stores the menu choice the user made.
  phi_prompt_struct myMenu; // This structure stores the main menu.

  // Initialize the top menu
  myMenu.ptr.list=(char**)&top_menu_items; // Assign the list to the pointer
  myMenu.low.i=0; // Default item highlighted on the list
  myMenu.high.i=2; // Last item of the list is size of the list - 1.
  myMenu.width=lcd_columns-((global_style&phi_prompt_arrow_dot)!=0)-((global_style&phi_prompt_scroll_bar)!=0); // Auto fit the size of the list to the screen. Length in characters of the longest list item.
  myMenu.step.c_arr[0]=lcd_rows-1; // rows to auto fit entire screen
  myMenu.step.c_arr[1]=1; // one col list
  myMenu.step.c_arr[2]=0; // y for additional feature such as an index
  myMenu.step.c_arr[3]=lcd_columns-4-((global_style&phi_prompt_index_list)!=0); // x for additional feature such as an index
  myMenu.col=0; // Display menu at column 0
  myMenu.row=1; // Display menu at row 1
  myMenu.option=global_style;

  while(1)
  {
    lcd.clear();
    center_text("Menu");

    myMenu.option=global_style;
    myMenu.width=lcd_columns-((global_style&phi_prompt_arrow_dot)!=0)-((global_style&phi_prompt_scroll_bar)!=0);
    myMenu.step.c_arr[3]=lcd_columns-4-((global_style&phi_prompt_index_list)!=0);
    select_list(&myMenu);
    menu_pointer_1=myMenu.low.i;
    switch (menu_pointer_1)
    {
    case 0://MODALITA
      sub_menu_modalita();
      lcd.clear();
      return;
      break;
    case 1://IMPOSTAZIONI
      sub_menu_impostazioni();
      lcd.clear();
      return;
      break;
    case 2://ESCI
      lcd.clear();
      return;
      break;

    default:
      break;
    }
  }
}

void sub_menu_modalita(){
  int menu_pointer_1=0;
  phi_prompt_struct myMenu;

  // Initialize the top menu
  myMenu.ptr.list=(char**)&sub_menu_modalita_items;
  myMenu.low.i=0;
  myMenu.high.i=2;
  myMenu.width=lcd_columns-((global_style&phi_prompt_arrow_dot)!=0)-((global_style&phi_prompt_scroll_bar)!=0);
  myMenu.step.c_arr[0]=lcd_rows-1;
  myMenu.step.c_arr[1]=1;
  myMenu.step.c_arr[2]=0;
  myMenu.step.c_arr[3]=lcd_columns-4;
  myMenu.col=0;
  myMenu.row=1;
  myMenu.option=global_style;

  while(1)
  {
    lcd.clear();
    center_text("Modalita'");

    myMenu.option=global_style;
    myMenu.width=lcd_columns-((global_style&phi_prompt_arrow_dot)!=0)-((global_style&phi_prompt_scroll_bar)!=0);

    select_list(&myMenu);
    menu_pointer_1=myMenu.low.i;
    switch (menu_pointer_1)
    {
    case 0://TEMPORIZZATO
      if(!temp_bool) temp_bool = yn_dialog("Temporizzare?");
      LED_levels_output();
      return;
      break;

    case 1://MANUALE
      if(temp_bool) temp_bool = yn_dialog("Modo Manuale?")?false:true;
      LED_levels_output();
      manual();
      lcd.clear();
      return;
      break;

    case 2:
      lcd.clear();
      return;
      break;

    default:
      break;
    }
  }
}

void manual(){
  int x = 3;//posizione iniziale cursore 5
  int buttonPressed;
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("  Bianco  Blu");
  lcd.cursor();
  do{
    LED_levels_output();
    lcd.setCursor(3,1);
    if (wled_out_man < 100) lcd.print("0");
    if (wled_out_man < 10) lcd.print("0");
    lcd.print(wled_out_man);
    lcd.setCursor(10,1);
    if (bled_out_man < 100) lcd.print("0");
    if (bled_out_man < 10) lcd.print("0");
    lcd.print(bled_out_man);
    lcd.setCursor(x,1);

    buttonPressed = wait_on_escape(50);

    if(buttonPressed == 4){//KEYPAD_RIGHT MOVE CURSOR RIGHT
      if(x == 3 || x == 4 || x == 10 || x == 11) x = x + 1;
      else if(x == 5) x = x + 5;
    }
    else if(buttonPressed == 3){//MOVE CURSOR LEFT
      if(x == 4 || x == 5 || x == 11 || x == 12) x = x - 1;
      else if(x == 10) x = x - 5;
    }
    else if(buttonPressed==1){//UP
      if(x == 3){//centinaia white UP
        if (wled_out_man > 155) wled_out_man = 255;
        else wled_out_man = wled_out_man + 100;
      }
      else if(x == 4){//decine white UP
        if (wled_out_man > 245) wled_out_man = 255;
        else wled_out_man = wled_out_man + 10;
      }
      else if(x == 5){//unità white UP
        if (wled_out_man > 254) wled_out_man = 255;
        else wled_out_man++;
      }
      else if(x == 10){//centinaia blu UP
        if (bled_out_man > 155) bled_out_man = 255;
        else bled_out_man = bled_out_man + 100;
      }
      else if(x == 11){//decine blu UP
        if (bled_out_man > 245) bled_out_man = 255;
        else bled_out_man = bled_out_man + 10;
      }
      else if(x == 12){//unità blu UP
        if (bled_out_man > 254) bled_out_man = 255;
        else bled_out_man++;
      }
    }
    else if(buttonPressed == 2){//DOWN
      if(x == 3){//centinaia white DOWN
        if (wled_out_man < 100) wled_out_man = 0;
        else wled_out_man = wled_out_man - 100;
      }
      else if(x == 4){//decine white DOWN
        if (wled_out_man < 10) wled_out_man = 0;
        else wled_out_man=wled_out_man-10;
      }
      else if(x == 5){//unità white DOWN
        if (wled_out_man < 1) wled_out_man = 0;
        else wled_out_man--;
      }
      else if(x == 10){//centinaia blu DOWN
        if (bled_out_man < 100) bled_out_man = 0;
        else bled_out_man = bled_out_man - 100;
      }
      else if(x == 11){//decine blu DOWN
        if (bled_out_man < 10) bled_out_man = 0;
        else bled_out_man = bled_out_man-10;
      }
      else if(x == 12){//unità blu DOWN
        if (bled_out_man < 1) 0;
        else bled_out_man--;
      }
    }
  }
  while(buttonPressed != 5);

  lcd.noCursor();
  return;
}

void sub_menu_impostazioni(){
  int menu_pointer_1=0;
  phi_prompt_struct myMenu;

  myMenu.ptr.list=(char**)&sub_menu_impostazioni_items;
  myMenu.low.i=0;
  myMenu.high.i=1;
  myMenu.width=lcd_columns-((global_style&phi_prompt_arrow_dot)!=0)-((global_style&phi_prompt_scroll_bar)!=0);
  myMenu.step.c_arr[0]=lcd_rows-1;
  myMenu.step.c_arr[1]=1;
  myMenu.step.c_arr[2]=0;
  myMenu.step.c_arr[3]=lcd_columns-4;
  myMenu.col=0;
  myMenu.row=1;
  myMenu.option=global_style;

  while(1)
  {
    lcd.clear();
    center_text("Impostazioni");

    myMenu.option=global_style;
    myMenu.width=lcd_columns-((global_style&phi_prompt_arrow_dot)!=0)-((global_style&phi_prompt_scroll_bar)!=0);

    select_list(&myMenu);
    menu_pointer_1=myMenu.low.i;
    switch (menu_pointer_1)
    {
    case 0:
      dateSettings();
      break;

    case 1:
      return;
      break;

    default:
      break;
    }
  }
}

void dateSettings(){
  getDate(&second, &minute, &hour, &day, &month, &year);
  int x = 1;//posizione iniziale cursore
  int buttonPressed;
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Imposta data");
  lcd.cursor();
  do{
    lcd.setCursor(0,1);
    printDMYHM(day, month, year, hour, minute);
    lcd.setCursor(x,1);

    buttonPressed = wait_on_escape(50);

    if(buttonPressed == 4){//KEYPAD_RIGHT MOVE CURSOR RIGHT
      if(x == 1 || x == 9 || x == 12) x = x + 3;
      else if(x == 4) x = x + 5;

    }
    else if(buttonPressed == 3){//MOVE CURSOR LEFT
      if(x == 4 || x == 15 || x == 12) x = x - 3;
      else if(x == 9) x = x - 5;
    }
    else if(buttonPressed == 1){//UP
      if(x == 1){//giorno
        if(day > 30)day = 1;
        else day++;
      }
      else if(x == 4){//mese
        if(month>11)month=1;
        else month++;
      }
      else if(x == 9){//anno
        year++;
      }
      else if (x == 12){//ore
        if(hour > 22) hour = 0;
        else hour++;
      }
      else if(x == 15){//minuti
        if (minute > 58) minute = 0;
        else minute++;
      }
    }
    else if(buttonPressed == 2){//DOWN
      if(x == 1){//giorno
        if(day < 2)day = 31;
        else day--;
      }
      else if(x == 4){//mese
        if(month < 2) month =12;
        else month--;
      }
      else if(x == 9){//anno
        year--;
      }
      else if (x == 12){//ora
        if (hour < 1) hour = 23;
        else hour--;
      }
      else if(x == 15){//anno
        if (minute < 1) minute = 59;
        else minute--;
      }
    }
  }
  while(buttonPressed != 5);

  if (buttonPressed == 5){
    setDate(year, month, day, hour, minute);
  }
  lcd.noCursor();
  return;
}
Logged

Pages: 1 [2]   Go Up
Jump to: