[RISOLTO]keypad i2c (e non solo) prima si ora no

Salve gente,

sfortunatamente ho perso tutte le mie librerie, con non poca difficoltà, perche non ricordavo dove le avevo scaricate, sono riuscito a trovarle, ma una di queste Keypad_i2c mi da il seguente errore:

Keypad/Keypad_I2C.cpp.o: In function `Keypad_I2C::begin(char*)':
/usr/share/arduino/libraries/Keypad/Keypad_I2C.cpp:35: multiple definition of `Keypad_I2C::pin_read(unsigned char)'
Keypad_I2C/Keypad_I2C.cpp.o:/usr/share/arduino/libraries/Keypad_I2C/Keypad_I2C.cpp:35: first defined here
/usr/lib/gcc/avr/4.7.2/../../../avr/bin/ld: Disabling relaxation: it will not work with multiple definitions
Keypad/Keypad_I2C.cpp.o: In function `Keypad_I2C::begin(char*)':
/usr/share/arduino/libraries/Keypad/Keypad_I2C.cpp:35: multiple definition of `Keypad_I2C::pin_write(unsigned char, unsigned char)'
Keypad_I2C/Keypad_I2C.cpp.o:/usr/share/arduino/libraries/Keypad_I2C/Keypad_I2C.cpp:35: first defined here
Keypad/Keypad_I2C.cpp.o: In function `Keypad_I2C::begin(char*)':
/usr/share/arduino/libraries/Keypad/Keypad_I2C.cpp:35: multiple definition of `Keypad_I2C::pinState_set()'
Keypad_I2C/Keypad_I2C.cpp.o:/usr/share/arduino/libraries/Keypad_I2C/Keypad_I2C.cpp:35: first defined here
Keypad/Keypad_I2C.cpp.o: In function `Keypad_I2C::begin(char*)':
/usr/share/arduino/libraries/Keypad/Keypad_I2C.cpp:35: multiple definition of `Keypad_I2C::begin(int)'
Keypad_I2C/Keypad_I2C.cpp.o:/usr/share/arduino/libraries/Keypad_I2C/Keypad_I2C.cpp:35: first defined here
Keypad/Keypad_I2C.cpp.o: In function `Keypad_I2C::begin(char*)':
/usr/share/arduino/libraries/Keypad/Keypad_I2C.cpp:35: multiple definition of `Keypad_I2C::begin(unsigned char)'
Keypad_I2C/Keypad_I2C.cpp.o:/usr/share/arduino/libraries/Keypad_I2C/Keypad_I2C.cpp:35: first defined here
Keypad/Keypad_I2C.cpp.o: In function `Keypad_I2C::begin(char*)':
/usr/share/arduino/libraries/Keypad/Keypad_I2C.cpp:35: multiple definition of `Keypad_I2C::begin()'
Keypad_I2C/Keypad_I2C.cpp.o:/usr/share/arduino/libraries/Keypad_I2C/Keypad_I2C.cpp:35: first defined here
Keypad/Keypad_I2C.cpp.o: In function `Keypad_I2C::begin(char*)':
/usr/share/arduino/libraries/Keypad/Keypad_I2C.cpp:35: multiple definition of `Keypad_I2C::begin(char*)'
Keypad_I2C/Keypad_I2C.cpp.o:/usr/share/arduino/libraries/Keypad_I2C/Keypad_I2C.cpp:35: first defined here
collect2: error: ld returned 1 exit status

lo sketch:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <Keypad_I2C.h> 
#include <Keypad.h> 
#include <Wire.h> 

LiquidCrystal_I2C lcd(0x20,16,2); 

#define I2CADDR 0x24

const byte ROWS = 4;
const byte COLS = 4; 

char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {7, 6, 5, 4};
byte colPins[COLS] = {3, 2, 1, 0}; 

Keypad_I2C customKeypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS, I2CADDR); 


void setup()
{
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
  customKeypad.begin( );
  Serial.begin(9600); 
}

void loop()
{
    char customKey = customKeypad.getKey(); 

  if (customKey != NO_KEY){
  lcd.print(customKey);
  }

}

prima mi funzionava ed ora no…evidentemente non è la stessa che avevo prima, cosa posso fare ?

GRAZIE!!!

Prima di tutto, da dove l’hai presa questa lib?
Poi, vedo che stai compilando con una versione di avr-gcc presente sul tuo sistema, non con quella originale di Arduino. Potrebbe essere anche questo il problema, se esso non contiene le patch di Atmel, potrebbe risultare incompatibile con l’ambiente Arduino.
Togli la toolchain che hai sul tuo sistema e riprova.

prima mi funzionava ed ora no.....evidentemente non è la stessa che avevo prima, cosa posso fare ?

L'unica cosa che mi viene in mente é cercare quella giusta.
Ciao Uwe

leo72:
Prima di tutto, da dove l'hai presa questa lib?

non ho capito molto bene cosa dovrei fare riguardo alla toolchain.....ma potrei provare ad installare il pacchetto originale arduino senza utilizzare quello presente sul sistema.

uwefed:
L'unica cosa che mi viene in mente é cercare quella giusta.
Ciao Uwe

ne trovo solo due e sono quasi sicuro che una di queste è quella giusta...... ma è il quasi che mi preoccupa :grin:

nessuno mi sa aiutare ?

ho provato anche con il software scaricato dal sito di arduino e con altre 5-6 librerie trovate in giro ma niente........addirittura non funziona nemmeno con gli esempi che sono dentro ad ogni pacchetto delle librerie.....stesso errore

:roll_eyes:

Scusa, ma se si legge l’errore (uno dei tanti) :

Keypad/Keypad_I2C.cpp.o: In function `Keypad_I2C::begin(char*)':
/usr/share/arduino/libraries/Keypad/Keypad_I2C.cpp:35: multiple definition of `Keypad_I2C::pin_write(unsigned char, unsigned char)'
Keypad_I2C/Keypad_I2C.cpp.o:/usr/share/arduino/libraries/Keypad_I2C/Keypad_I2C.cpp:35: first defined here

si vede che la stessa funzione Keypad_I2C::pin_write è definita sia qui :
/usr/share/arduino/libraries/Keypad/Keypad_I2C.cpp

che qui :
/usr/share/arduino/libraries/Keypad_I2C/Keypad_I2C.cpp

… sicuro che le due lib Keypad e Keypad_I2C possano convivere assieme ??? Perché sembra contengano le stesse cose … :roll_eyes:

Guglielmo

Guglielmo GRAZIEEEEEEEEEEEEEEEEEEE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

mi è bastato rimuovere dalla directory /Keypad i file :

Keypad_I2C.cpp
Keypad_I2C.h

e non ricevo piu l'errore.......maledizione non sono un genio ma se avessi prestato piu attenzione al messaggio di errore ci potrei essere arrivato da solo.......anche solo intepretare con calma il "multiple definition"

Ma il panico e non so cos'altro mi ha mandato in paranoia........scusate e grazieeeeeee !!!!!!!!!!

Bé ... meno male che abbiamo risolto :slight_smile:

Mi raccomando, verifica che tutto funzioni ... :wink: Eventualmente ... noi siamo sempre qui :grin:

Guglielmo

tronicman:
non ho capito molto bene cosa dovrei fare riguardo alla toolchain.....ma potrei provare ad installare il pacchetto originale arduino senza utilizzare quello presente sul sistema.

Stai compilando con la toolchain presente sul tuo sistema e non con quella di Arduino. Alcuni problemi "strani" vengono fuori per questo motivo, tipo errori con PROGMEM od altro. Ti suggerivo quindi di disinstallarla, quando l'IDE non vede toolchain sul computer usa la sua. E' più vecchia ma spesso più compatibile con il software scritto solo per Arduino (il 99% della gente usa la toolchain integrata).

leo72:

tronicman:
non ho capito molto bene cosa dovrei fare riguardo alla toolchain.....ma potrei provare ad installare il pacchetto originale arduino senza utilizzare quello presente sul sistema.

Stai compilando con la toolchain presente sul tuo sistema e non con quella di Arduino. Alcuni problemi "strani" vengono fuori per questo motivo, tipo errori con PROGMEM od altro. Ti suggerivo quindi di disinstallarla, quando l'IDE non vede toolchain sul computer usa la sua. E' più vecchia ma spesso più compatibile con il software scritto solo per Arduino (il 99% della gente usa la toolchain integrata).

:frowning: scusa ma non ho capito il come ?? ho provato a fare una ricerca tra la lista dei pacchetti installati sulla mia Linux Mint ma non trovo niente come toolchain....... pessimo niubbo :grin:

…continuando a caricare lo sketch completo (con le librerie che avevo precendetemente SALVATO, quindi prima questa andava sicuro al 100%) ricevo questo errore:

/usr/share/arduino/libraries/GSMSHIELD/HWSerial.cpp: In member function ‘size_t HWSerial::print(const __FlashStringHelper*)’:
/usr/share/arduino/libraries/GSMSHIELD/HWSerial.cpp:55:9: error: ‘prog_char’ does not name a type
/usr/share/arduino/libraries/GSMSHIELD/HWSerial.cpp:58:23: error: ‘p’ was not declared in this scope

in questa porzione di codice:

size_t HWSerial::print(const __FlashStringHelper *ifsh)
{
  const prog_char *p = (const prog_char *)ifsh;
  size_t n = 0;
  while (1) {
    unsigned char c = pgm_read_byte(p++);
    if (c == 0) break;
    n += write(c);
  }
  return n;
}

è una libreria per l’utilizzo dalla shield GSM

Mmm … sicuro di avere all’inizio ? :

#include <avr/pgmspace.h>

Guglielmo

ho provato ad includerlo ma non cambia :roll_eyes:

Non vorrei che fosse un problema della toolchain che stai usando che NON sembra essere quella standard. Nei tuoi precedente errori riporti :

/usr/lib/gcc/avr/4.7.2/../../../avr/bin/ld

ovvero stai usando la 4.7.2 mentre Arduino, di base, se lo scarichi e lo usi così come è usa 4.3.2, non solo, non va certo a cercare "ld" in "/usr/lib/gcc/avr/4.7.2/../../../avr/bin/", ma la cerca all'interno della cartella di Arduino.

Quindi ... cosa stai usando ??? Come hai installato Arduino ??? Cosa hai fatto dopo ???

Guglielmo

E' giusto, Guglielmo. Quell'errore deriva proprio dall'uso di una toolchain troppo aggiornata, non compatibile con il codice Arduinico scritto per il vecchio compilatore avr-gcc 4.3.5.

@tronicman:
controlla col gestore di pacchetti se hai i pacchetti avr-gcc, binutils-avr e avr-libc sul tuo sistema.
Se sì, controlla la versione di avr-gcc: se è la 4.7.2, rimuovili perché avrai problemi a compilare il codice di Arduino.
Può essere che questi pacchetti siano dipendenze di altri, principalmente potrebbe capitare che tu abbia installato il pacchetto Arduino e che questo se li sia tirati dietro. Se così fosse, togli anche il pacchetto Arduino e scaricati l'IDE di Arduino da questo sito, che contiene anche la toolchain 4.3.5

RISOLTO !!!

ho dovuto disinstallare avr-gcc e ovviamente la disinstallazione ha impattato anche atri pacchetti e quindi sul IDE installato dal sistema…risultato uso l’IDE scaricato dal sito e non ho piu nessun tipo di errore :grin: :grin: :grin:

Grazie a tutti …ho imparato qualcosa di nuovo

Ottimo ... magari correggi il titolo del tuo primo post e metti davanti [RISOLTO] ... così si capisce :wink:

Guglielmo