NRF24L01 et SSD1306 sur Nano

J'ai actuellement un projet très basique : j'utilise un module NRF24L01 (SPI) et un écran SSD1306 (SDA/SCL). Mon montage est la somme des deux schémas suivants :

  • Presque tout fonctionne bien : l'affichage à l'écran ( même un bitmap ) et l'envois d'un message.
    ( je reçois le message intègre sur un autre montage )
  • Cependant lorsque je reçois le message de l'autre montage, j'ai un message vide
    ( radio.available() fonctionne bien, c'est vraiment le buffer qui est vide ) .
  • Ce n'est pas tout, le problème disparait si et seulement si j'enlève la ligne
    ````display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);```
    Quand je n'initialise pas l'écran, je reçois bien le message de l'autre montage.

Je pense qu'il s'agit d'un conflit de librairies j'ai tenté de les mettre à jour, j'ai installé une variante de la librairie RF24, sans résultat. Ci-dessous mon script :

#include <Wire.h>
#include <SPI.h>
#include <RF24.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <avr/pgmspace.h>
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
#define OLED_ADDR   0x3C
#include <String.h>

Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT);

RF24 radio(6, 7); // CE, CSN
const byte addressExtra[6] = "00001";
const byte addressIntra[6] = "00002";
unsigned long currentMillis;
unsigned long prevMillis;
unsigned long timeout = 1000;
String strSerial; // entree utilisateur
String strCommand; // entree utilisateur
String strDownData; // entree utilisateur

#define bitmap_height   128
#define bitmap_width    64



void setup() {
  
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.println(">>SERVER SIDE<<");
  display.display();

  
  Serial.begin(9600);while (!Serial) delay(10);
  Serial.setTimeout(10);
  for(int i = 0; i <= 20; i++){Serial.println();}
  Serial.println("+-----------[ SERVER SIDE ]---------------+");
   delay(100);
  display.println("[+] Starting radio");
 
  display.display();
   delay(100);
  if (radio.begin()) {
    Serial.println("[+] RADIO   : OK");
    display.println("[+] Success !");
    }else {
      display.println("[!] Error ");
      Serial.println("[-] RADIO   : ERROR");}
    display.display();
  radio.openWritingPipe(addressExtra);
  radio.openReadingPipe(0, addressIntra);
  radio.setPALevel(RF24_PA_HIGH);
  radio.stopListening();



 
}

String send( char * charCommand ){

    Serial.print("[SEND]:[");
    Serial.print(charCommand );
    Serial.print("]");
  
   
    // mode emetteur
    radio.write(&charCommand, sizeof(charCommand)); Serial.print("-->[SNT]");
    // attente de réponse
    
    radio.startListening(); Serial.print("-->[ME]");
    prevMillis = millis();
    
    while (!radio.available() && (millis()-prevMillis)<timeout) {};

    
    if (radio.available())
    {
      Serial.print("-->[REP] : [");
          
          char downData[255] = "";
          radio.read(&downData, sizeof(downData));
           strDownData = String(downData);
          Serial.println( strDownData + "]");
          radio.stopListening();
          return strDownData;

     } else {
      Serial.print("-->[T.O]");
      
      radio.stopListening(); 
      return "";
     }
     


   
    
    
}
void loop() {
   if(Serial.available()){
    
    // lecture de l'entrée du port serial
    strCommand = Serial.readString();
    // convertion en char
    char charCommand[strCommand.length()+1];
    strCommand.toCharArray(charCommand, strCommand.length());

    //protocole
    send(charCommand);
    
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.