arduino mega et i2C

Bonjour,

Je me permets de poster ce message suite à des erreurs de compilation avec mon arduino mega. Je souhaite faire une liaison I2C entre l’arduino et les capteurs maxbotix. J’utilise la librairie SoftI2Cmaster.h. Cela fonctionne avec l’arduino uno, le problème est que je n’ai pas assez de pin, voilà pourquoi je dois utiliser la mega.

Voici mon bout de code :

#include <SoftI2CMaster.h>     
#define SCL_PIN 21           
#define SCL_PORT PORTC 
#define SDA_PIN 20             
#define SDA_PORT PORTD
#define I2C_TIMEOUT 100

Voici l’erreur

Arduino : 1.6.0 (Windows 7), Carte : "Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

In file included from /Arduino/hardware/tools/avr/avr/include/avr/io.h:99:0,
                 from C:\Users\bou\Documents\Arduino\libraries\SoftI2CMaster-master/SoftI2CMaster.h:55,
                 from sketch_mega.ino:57:
C:\Users\bou\Documents\Arduino\libraries\SoftI2CMaster-master/SoftI2CMaster.h: In function 'void i2c_wait_scl_high()':
C:\Users\bou\Documents\Arduino\libraries\SoftI2CMaster-master/SoftI2CMaster.h:170:31: error: 'SCL_PORT' was not declared in this scope
 #define SCL_IN  (_SFR_IO_ADDR(SCL_PORT) - 2)
                               ^
C:\Users\bou\Documents\Arduino\libraries\SoftI2CMaster-master/SoftI2CMaster.h:208:23: note: in expansion of macro 'SCL_IN'
      : : [SCLIN] "I" (SCL_IN), [SCLPIN] "I" (SCL_PIN));
                       ^
In file included from sketch_mega.ino:57:0:
C:\Users\bou\Documents\Arduino\libraries\SoftI2CMaster-master/SoftI2CMaster.h:208:46: error: 'SCL_PIN' was not declared in this scope
      : : [SCLIN] "I" (SCL_IN), [SCLPIN] "I" (SCL_PIN));
                                              ^
In file included from /Arduino/hardware/tools/avr/avr/include/avr/io.h:99:0,
                 from C:\Users\bou\Documents\Arduino\libraries\SoftI2CMaster-master/SoftI2CMaster.h:55,
                 from sketch_mega.ino:57:
C:\Users\bou\Documents\Arduino\libraries\SoftI2CMaster-master/SoftI2CMaster.h: In function 'boolean i2c_init()':
C:\Users\bou\Documents\Arduino\libraries\SoftI2CMaster-master/SoftI2CMaster.h:166:38: error: 'SCL_PORT' was not declared in this scope
 #define SCL_DDR        (_SFR_IO_ADDR(SCL_PORT) - 1)

Je n’ai pas pu mettre tout le message d’erreur car il était trop long… J’espère que vous arriverez quand même à voir mon problème

Bonjour

1) lire le fichier SoftI2CMaster.h

/* In order to use the library, you need to define SDA_PIN, SCL_PIN, 
 * SDA_PORT and SCL_PORT before including this file.  
...

Ca doit être le mot before qui t'a échappé :D

2) si j'ai bien compris cette lib te permet d'émuler le protocole I2C sur n'importe quelle pin de l'arduino. C'est-à-dire qu'elle est utile si tu veux utiliser d'autres pin que celles sur lesquelles l'I2C est disponible en natif arduino. Et là tu mets SDA/SCL sur 20 et 21. Du coup je ne vois pas trop l'intérêt d'utiliser cette librairie.

merci de ta réponse,

Voilà ce qui est marqué dans les commentaire du programme

Below, I define the SCL and SDA pins by their ATMEGA pins I have included links to common mappings below.
    UNO:  http://arduino.cc/en/Hacking/PinMapping168
    NANO: (matches UNO but has fewer pins)
    MEGA 2560: http://arduino.cc/en/Hacking/PinMapping2560
The current data matches the setup for the Arduino Uno -- they may need to be changed if the hardware changes.
You can also switch the I2C interface
to any of the tristate pins that you want (not just the SDA or SCL pins).

Du coup je ne comprend pas trop comment faire fonctionner le bus I2C sur la mega. Quand je veux utiliser cette librairie mais mettre d'autre pin ça ne fonctionne pas non plus:(