[Résolu] Aide réalisation bibliothèque MCP23S17

Bonjour à tous :slight_smile:

Je suis tout nouveau dans la communauté Arduino. Je possède un carte arduino uno rev3 et comme l'indique mon titre je cherche à créer une bibliothèque pour pouvoir utiliser mon port expander de chez Microchip le MCP23S17 pour une liaison SPI.
Voici mon header :

#ifndef MCP23S17_h

#define MCP23S17_h
#include "Arduino.h"
#include <SPI.h>


// Adresse des registres du MCP23S17 pour le fonctionnement avec la BANK0
#define IODIRA		0x00
#define IODIRB		0x01
#define IPOLA		0x02
#define IPOLB		0x03
#define GPINTENA	0x04
#define GPINTENB	0x05
#define DEFVALA		0x06
#define DEFVALB		0x07
#define INTCON1		0x08
#define DINTCON2	0x09
#define IOCON		0x0A
#define GPPUA		0x0C
#define GPPUB		0x0D
#define INTFA		0x0E
#define INTFB		0x0F
#define INTCAPA		0x10
#define INTCAPB		0x11
#define GPIOA		0x12
#define GPIOB		0x13
#define OLATA		0x14
#define OLATB		0x15

#define opr             0b01000001
#define opw             0b01000000

int CS;

  class MCP23S17
  {
    public :
    void writeData(int address, int data);
    int readData(int address);
    void init(int CheapSel, unsigned char dirA, unsigned char dirB);
    
    
    protected :
  };

#endif

et mon .cpp :

#include "MCP23S17.h"
#include "Arduino.h"
#include <SPI.h>

void MCP23S17::writeData(int address, int data)
  {
    digitalWrite(CS,LOW);    //select port expander
    SPI.transfer(opw);       //send write opcode
    SPI.transfer(address);
    SPI.transfer(data);
    digitalWrite(CS,HIGH);   //unselect port expander
  }



void MCP23S17::init(int CheapSel, unsigned char dirA, unsigned char dirB)
  {
    pinMode(CheapSel,OUTPUT);
    digitalWrite(CheapSel,HIGH);
    SPI.begin();
    MCP23S17::writeData(IOCON,0x20);
    MCP23S17::writeData(IOCON+1,0x20);
    MCP23S17::writeData(IODIRA,dirA);
    MCP23S17::writeData(IODIRB,dirB);
    CS=CheapSel;
  }

Quand je compile mon .cpp j'ai l'erreur suivante : "MCP23S17.cpp:8: error: 'SPI' was not declared in this scope".

Je ne comprends pas pourquoi le compilateur me dit que SPI n'est pas déclaré puisque j'ai inclus la biblibothèque SPI.h pour pouvoir utiliser les fonction prédéfinies de cette bibliothèque. Pourriez-vous m'aider à trouver d'ou vient cette erreur s'il vous plait ?

Merci d'avance,
Cordialement,

PS: Je n'ai pas mis la doc technique du composant car je pense que mon problème vient d'une erreur au niveau de la programmation. Si jamais il le faut je l'ajouterai.

Bonjour,
A défaut de pouvoir essayer, regarde ici et compare ce qui ne va pas.

@+

Merci d'avoir pris le temps de me répondre.
Je me suis justement aidé de ce code pour réaliser le mien. J'ai essayé cette bibliothèque mais elle est pleine d'erreurs c'est pour ça que j'ai voulu me faire la mienne.

Bonjour,

Pour inclure une librairie dans celle que vous êtes en train d'écrire, vous avez deux possibilités :

  • soit inclure les fichiers concernés directement dans le dossier de votre librairie, comme ici où la librairie SdFat est placée dans le dossier Arduino/libraries/SFEMP3Shield
  • soit inclure la librairie dans votre code, pour ne pas avoir à copier les fichiers. Dans le cas précédent, si la librairie SdFat ne figurait pas dans le dossier, il aurait fallu écrire :
#include <SdFat.h>
#include <SFEMP3Shield.h>

Bonjour,
Dans MCP23S17.h tu supprimes

//int CS;

Dans MCP23S17.cpp tu mets

int CS;

Dans ce cas ton code compile (si tu as déclaré #include <SPI.h> dans ton programme .ino)
@+
PS : Je n'ai pas vérifié le fonctionnement proprement dit

D'accord merci. Je vais suivre ton conseil ! Merci beaucoup