Bonjour à tous.
Je suis bloqué! Voila pas mal d'heures (séparé en plusieurs jours) que je passe sur un petit projet. Malheureusement je suis bloqué à un endroit. Le pire c’est que j’avais prévu que je serais peut être bloqué a cet endroit. Mais en ayant compris le concept, je pensais que j’aurais pu m’en sortir seul mais ce n’est pas le cas.
Pour simplifier: une partie de mon projet consiste à recevoir des informations via un module NRF24L01 (piloté par la librarie RF24) et afficher les informations reçu sur un ecran OLED (controleur SSD1306).
Jusqu'a là en théorie, il n'y a rien d'impossible, loin de là.
Le module radio et l'ecran OLED sont pilotés tous les deux en SPI.
Donc voici les pin SPI de l'arduino (Certaines pins sont donc utilisé par les deux modules)
10 (SS),
11 (MOSI),
12 (MISO),
13 (SCK)
Le RF24 utilise:
CE 6
CS 7
MOSI 11
MISO 12
SCK 13
L’ecran OLED:
RESET 8
DC 9CS 10
MOSI 11
CLK 13
Sur ma plaque d’essais, j’ai donc branché les deux modules comme ci dessus.
J’ai d’abord fait un prototype très très simple qui utilise seulement le RF24 pour m’assurer que le montage etait bon. Ensuite j’ai fais la même chose pour l’ecran OLED.
Conclusion: Les deux modules fonctionnent bien quand ils sont utilisé séparément.
Et comme vous vous en doutez, quand j’essaye de piloter les deux dans le même programme, ca ne fonctionne pas.
J’ai essayé d’enlever le plus de code possible pour comprendre a partie de quel endroit l’ecran cesse de fonctionner. Voici le code:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_DC 9
#define OLED_CS 10
#define OLED_CLK 13
#define OLED_MOSI 11
#define OLED_RESET 8
RF24 radio(6,7);
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
const uint64_t pipe = 0xF0F0F0F0D2LL;
void setup() {
Serial.begin(57600);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC);
radio.begin();
radio.setRetries(15,15);
radio.openReadingPipe(1,pipe);
}
void loop() {
oledWrite();
}
void oledWrite(){
display.clearDisplay();
// text display tests
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Hello, world!");
display.display();
}
Comme vous pouvez le voir, j’ai effacer une grosse partie du code. Il n’y a plus rien dans le loop quasiment.
C’est dès que je mets ces 3 commandes là:
radio.begin();
radio.setRetries(15,15);
radio.openReadingPipe(1,pipe);
que l’écran arrête de fonctionner (en fait dès que je fais radio.begin()) en fait.
D’après ma compréhension, théoriquement les pins CS des modules devraient changer d’état à chaque fois qu’une commande est envoyé au module pour indiquer au SPI à qui parler non?
J’ai regarder un peu le code source mais j’avoue être perdu
Est ce que quelqu’un aurait un conseil ou une idée pour me débloquer peut être?
merci beaucoup!