problema libreria e ide

Ciao ragazzi… sto usando la libreria MenuBackend per creare un menu su un display lcd i2c con keypad…

Sto impazzendo, l’ide mi da degli errori relativi alla libreria MenuBackend che non riesco ne a capire, tantomeno a risolvere… Questi errori, con una versione precedente dell’ide non li ho, ma in compenso purtroppo, la versione precedente non mi carica le altre librerie necessarie al progetto, tipo:

Adafruit_RGBLCDShield.h
utility/Adafruit_MCP23017.h
DMXSerial.h

Vi prego, mi serve il vostro aiuto…

Ecco gli errori che mi da l’ide:

Arduino:1.8.4 (Mac OS X), Scheda:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

ATTENZIONE: La categoria '' della libreria EEPROM non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria SPI non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria SoftwareSerial non è valida. La imposto a 'Uncategorized'
ATTENZIONE: La categoria '' della libreria Wire non è valida. La imposto a 'Uncategorized'
Attenzione: platform.txt del core 'Arduino AVR Boards' contiene la stringa deprecata recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{build.path}/{archive_file}" "{object_file}" convertita automaticamente in recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}". Verifica la disponibilità di un aggiornamento di questo core.
Prova_DMX_parrocchia_menu:37: error: 'menuUseEvent' was not declared in this scope
 MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent);
                                ^
Prova_DMX_parrocchia_menu:37: error: 'menuChangeEvent' was not declared in this scope
 MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent);
                                             ^
exit status 1
'menuUseEvent' was not declared in this scope
Trovata libreria non valida in /Users/mattia/Desktop/Arduino.app/Contents/Java/libraries/Adafruit_Python_CharLCD-master: /Users/mattia/Desktop/Arduino.app/Contents/Java/libraries/Adafruit_Python_CharLCD-master

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

ecco invece il codice che sto scrivendo:

#include <MenuBackend.h>
#include <DMXSerial.h>            //libreria aggiuntiva necessaria per comunicazione DMX
#include <Wire.h>
#include <Adafruit_RGBLCDShield.h>
#include <utility/Adafruit_MCP23017.h>


// varibili necessarie al programma
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
int DelayFadeON;                
int DelayON;
int DelayFadeOFF;
int DelayOFF;
int brightness;
int Display = 0;
int progMode = 52;
int progState;
int cond;


//variabili modificabili dall'utente o installatore:
int TempoFadeON   = 3;            //tempo in secondi impiegato per il fade ON delle luci.
int TempoON       = 5;            //tempo in secondi durante il quale le luci rimangono accese.
int TempoFadeOFF  = 3;            //tempo in secondi impiegato per il fade OFF.
int TempoOFF      = 0;            //tempo in secondi durante il quale le luci rimangono spente.



//this controls the menu backend and the event generation
MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent);
  //beneath is list of menu items needed to build the menu
  MenuItem settings = MenuItem("Settings");
    MenuItem pin = MenuItem("Pin");
    MenuItem debug = MenuItem("Debug");
  MenuItem options = MenuItem("Options");
    MenuItem setDelay = MenuItem("Delay",'D');
      MenuItem d100 = MenuItem("100 ms");
      MenuItem d200 = MenuItem("200 ms");
      MenuItem d300 = MenuItem("300 ms");
      MenuItem d400 = MenuItem("400 ms");




// inizio programma //////////////////////////////////////////////////////////////////////


void menuSetup()
{
  Serial.println("Setting up menu...");
  //add the file menu to the menu root
  menu.getRoot().add(settings); 
    //setup the settings menu item
    settings.addRight(pin);
      //we want looping both up and down
      pin.addBefore(debug);
      pin.addAfter(debug);
      debug.addAfter(pin);
      //we want a left movement to pint to settings from anywhere
      debug.addLeft(settings);
      pin.addLeft(settings);
  settings.addBefore(options);
  settings.addAfter(options);
    options.addRight(setDelay);
      setDelay.addLeft(options);
      setDelay.addRight(d100);
        d100.addBefore(d100); //loop to d400 
        d100.addAfter(d200);
        d200.addAfter(d300);
        d300.addAfter(d400);
        d400.addAfter(d100); //loop back to d100
        //we want left to always be bak to delay
        d100.addLeft(setDelay);
        d200.addLeft(setDelay);
        d300.addLeft(setDelay);
        d400.addLeft(setDelay);
  options.addAfter(options);
}





void setup() {
  lcd.begin(16, 2);
  DMXSerial.init(DMXController);
  pinMode(progMode, INPUT_PULLUP);
  
  // conversione in millisecondi dei tempi impostati dall'utente o installatore
  TempoFadeON = TempoFadeON*1000;
  TempoON = TempoON*1000;
  TempoFadeOFF = TempoFadeOFF*1000;
  TempoOFF = TempoOFF*1000;

  menuSetup();
  
  lcd.println("***** ITT ******");
  delay(800);
  lcd.setCursor(0,0);
  lcd.println("Light Control    ");
  lcd.setCursor(0,1);
  lcd.println("Cycle Rev 1.0    ");
  delay(800);

  uint8_t buttons = lcd.readButtons();
  if (buttons && BUTTON_SELECT) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Settaggio valori");
    cond = 1;
    delay(800);
    }
    else {cond = 2;}
  /*progState = digitalRead(progMode);
  if (progState == LOW) {
    cond = 1;
  }
  else {cond = 2;}*/
}





void menuUseEvent(MenuUseEvent used)
{
  Serial.print("Menu use ");
  Serial.println(used.item.getName());
  if (used.item == setDelay) //comparison agains a known item
  {
    Serial.println("menuUseEvent found Dealy (D)");
  }
}




void menuChangeEvent(MenuChangeEvent changed)
{
  Serial.print("Menu change ");
  Serial.print(changed.from.getName());
  Serial.print(" ");
  Serial.println(changed.to.getName());
}






void settaggio(){
  
  uint8_t buttons = lcd.readButtons();
  if (buttons) {
    lcd.clear();
    lcd.setCursor(0,0);
    if (buttons & BUTTON_UP) {
      //lcd.print("UP");
      menu.moveUp();
    }
    if (buttons & BUTTON_DOWN) {
      menu.moveDown();
      //lcd.print("DOWN");
    }
    if (buttons & BUTTON_LEFT) {
      menu.moveLeft();
      //lcd.print("LEFT");
    }
    if (buttons & BUTTON_RIGHT) {
      menu.moveRight();
      //lcd.print("RIGHT");
    }
    if (buttons & BUTTON_SELECT) {
      menu.use();
      //lcd.print("SELECT");
    }
  }
}




void programma(){
  DelayFadeON = TempoFadeON/220;
  DelayON = TempoON;
  DelayFadeOFF = TempoFadeOFF/220;

  // fade on
  for (int i=0; i<=220; i++){
  if (i==1){}
  brightness = i;
  DMXSerial.write(3, i);
  lcd.setBacklight(i);
  delay(DelayFadeON);
  }

  // aspetta con le luci accese
  if (brightness == 220){
    delay(DelayON);
  }

  // tempo fade off
  for (int i=220; i>=0; i--){
  if (i==220){}
  brightness = i; 
  DMXSerial.write(3, i);
  delay(DelayFadeOFF);
  }

  if (brightness == 0){
    delay(DelayOFF);
  }
}




void loop() {
 if(cond == 1){
  settaggio();
 }
 if(cond == 2){
  programma();
 }
}

Potresti provare con la versione 1.8.5 dell’ ide in modalità portable.

Io sto usando la 1.8.4 ma adesso provero’ la 1.8.5

Mai sentita questa modalita’ portable…

La si ottiene creando una cartella di nome portable all'interno della stessa cartella dove scompatti l' ide.

Allora... nada... versione 1.8.5 e non credo di poter utilizzare la versione portable, in quanto uso osx e non windows, e di fatto sposto un unico file/cartella per l'ide di arduino che contiene gia' tutto... in osx funziona cosi'...

qualche libreria funzionante per fare un menu'???

Se ben ricordo la modalità portable "funziona" anche in osx Uno dei moderatori italiani è un utilizzatore di "mele morsicate" e potrebbe essere molto più ferrato in materia.

matt-korban: Allora... nada... versione 1.8.5 e non credo di poter utilizzare la versione portable, in quanto uso osx e non windows, e di fatto sposto un unico file/cartella per l'ide di arduino che contiene gia' tutto... in osx funziona cosi'...

Non è esatto ... ... il .app è la cartella di Arduino dove c'è quello che installi, ma poi cose aggiuntive, se non configuri una installazione "sandboxed" (portable) vanno a finire nelle varie cartelle tra cui qulla che definisci come "sketchbook" e la solita ~/library/.

Se vuoi fare un installazione completamente isolata, scarica l'IDE, rinomina il .app così che sia univoco (io ne ho una decina ciscuno con versioni e configurazioni diverse), fai click con il desto, "Show Pakage Contents" e crei la cartella "porable" dentro a xxxxxxxxx.app/Contents/Java/.

In pratica ti dovrai trovare questo percorso: xxxxxxxxx.app/Contents/Java/portable/

Lancia il .app e TUTTO ciò che installi (librerie, cores, ecc) rimarrà contenuto in essa senza usare cartelle in altre posizioni.

Guglielmo

Mi ricordavo giusto. Io purtroppo non mac intel "moderni" per poter fare da supporto.

Ok grazie ragazzi! Utili come sempre ;)