RFID et STRIP LED

Bonjour à tous,

Matériel:

  • Arduino Wemos D1
  • Lecteur RFID RC522
  • [strip led WS2811](http://WS2811 Cordon RVB Ful)

Séparément, J'arrive a faire fonctionner le lecteur en lisant différent badge, et à utiliser mon strip led en allumant la led que je veux d'une couleur donnée.

Par contre, impossible de faire fonctionner les 2 ensembles dans le même problème.
Le lecteur RFID ne detecte plus rien par contre quand je commente l'initialisation du strip cela fonctionne.

D mes lectures sur internet, j'ai un problème de SPI car la librairie Neopixel utilise SPI, si j'ai bien compris.

Par contre, je ne trouve pas de solution, si quelqu'une a une piste, je suis preneur. Merci

#include <SPI.h>
#include <MFRC522.h>
#include <Adafruit_NeoPixel.h>

// +---------------------------------------+
// |              D E F I N E              |
// +---------------------------------------+
#define RFID_SDA D2
#define RFID_RST D1

#define LED_PIN D6
#define LED_NB 7

// +---------------------------------------+
// |          D E C L A R A T I O N        |
// +---------------------------------------+
MFRC522 rfid(RFID_SDA, RFID_RST);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_NB, LED_PIN, NEO_GRB + NEO_KHZ800);


// +---------------------------------------+
// |           V A R I A B L E S           |
// +---------------------------------------+
String UID;

String Elem1 = "04 50 59 EA"; 
String Elem2 = "04 4C 59 EA";


// +---------------------------------------+
// |             P R O G R A M M E         |
// +---------------------------------------+
void setup()
{
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();

  strip.begin();
  strip.show();
} // setup()


void loop()
{
  if (!rfid.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards
  if (!rfid.PICC_ReadCardSerial()) {
    return;
  }

  UID = "";

  for (byte i = 0; i < 4; i++)
  {
    UID.concat(String(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "));
    UID.concat(String(rfid.uid.uidByte[i], HEX));
  }
  UID.toUpperCase();

  if (UID.substring(1) == Elem1)
  {
    strip.setPixelColor(0, 255,0,0);
  } else if (UID.substring(1) == Elem2)
  {
    strip.setPixelColor(1, 255,0,0);
  } else
  {
    Serial.println(UID.substring(1));
  }
  delay(1000);
} // loop()

Quelqu'un aurait des pistes ?

D mes lectures sur internet, j'ai un problème de SPI car la librairie Neopixel utilise SPI, si j'ai bien compris.

Non, pas de SPI pour le LED strip, par contre pour le RFID oui.

Si je résume sur la broche D6 il y a pour l'instant le fil MISO du lecteur + le fil DATA du LED strip.
Ce partage est impossible.

Choisis donc une autre pin que D5 D6 D7 D2 pour le LED strip.

RFID_SDA aurait avantage à être nommée RFID_SS (chip select), même si la D2 est effectivement la broche SDA en I2C.
Son rôle ici est de servir de chip select pour le bus SPI lecteur. Tu aurais pu tout aussi bien choisir D8 qui est la pin SS standard.

Bonjour hbachetti,

J'aurais du préciser que j'ai une Wemos d1 R2 :slight_smile:

Sauf si je me trompe le D6 est dispo pour le in data du strip LED et il n'y a pas de partage d'info entre e fil MISO du lecteur + le fil DATA du LED strip ?

merci pour le conseil de nommage du PIN. je le renomme et le met en 8.

hbachetti,

J'ai déplacé le RFDI_SS en D8 et le LED_PIN en D4, maintenant cela fonctionne (youpi), mais j'aimerais comprendre pourquoi ?

Tu as une idée ?

La raison est la même : D6 = MISO.