nrf24l01 et sd card

bonjour j aimerai faire fonctionner un nrf24l01 et pourvoir enregistrer des données sur une sd card.
si quelqu'un pouvait m 'aider a régler mon problème.

modif_horloge.ino (4.96 KB)

postez le code directement dans le forum avec les balises de code et expliquez quel est votre problème... (et lisez comment utiliser le forum)

Bonjour,

la sd et le nrf24l01 fonctionnant tout deux en SPI, tu as cabler les MISO/mosi et tout le tralala sur les même pins ? si tel est le cas, utilise des pins différentes si la bibliotheque du nrf24l01 permet de changer les pins spi. (la bibli SD ne le permet pas de mémoire)

bonjour
merci pour vos réponses
la sd et le nrf24l01 fonctionne séparement
les miso/mosi sont sur les meme pins
ce dois etre des erreur de programation du SPI

#include <SPI.h> // Pour la communication via le port SPI
#include <Mirf.h> // Pour la gestion de la communication
#include <nRF24L01.h> // Pour les définitions des registres du nRF24L01
#include <MirfHardwareSpiDriver.h> // Pour la communication SPI

#include <Wire.h>
#include "RTClib.h"

#include <SD.h>

#include "DHT.h" // Librairie des capteurs DHT
#define DHTPIN 6
#define DHTTYPE DHT11

#include "LiquidCrystal.h" // ajout de la librairie

RTC_DS1307 RTC;

File data_DHT; // instance de la classe File
DHT dht(DHTPIN, DHTTYPE);

LiquidCrystal lcd(A1, A2, 5, 4, 3, 2); // liaison 4 bits de données

unsigned long previousTime = 0;
unsigned long cycle = 36;
unsigned int i = 1;
float h, t;

unsigned long temps ;
int seconde;
int seconded;
int secondeu;
int minute;
int minuted;
int minuteu;
int heure;
int heured;
int heureu;
int tempd;
int tempu;
int tempm;

float tempmin = 999;
float tempmax = 0;

int ss = 7; //radio
int ss2 = 10; //sd card

void setup() {

seconde = 0;
seconded = 0;
secondeu = 0;
minute = 0;
heure = 0;
minuted = 0;
minuteu = 0;
heured = 0;
heureu = 0;

Serial.begin(57600);

pinMode(ss, OUTPUT);
pinMode(ss2, OUTPUT);

digitalWrite(ss, HIGH);
digitalWrite(ss2, HIGH);

SPI.begin();
SPI.setBitOrder(MSBFIRST);
SD.begin(10); // démarage du lecteur
dht.begin();
Wire.begin();
RTC.begin();
lcd.begin(16, 2); // utilisation d'un écran 16 colonnes et 2 lignes

digitalWrite(ss, LOW);
Mirf.cePin = 9; // Broche CE sur D9
Mirf.csnPin = 7; // Broche CSN sur D7
Mirf.spi = &MirfHardwareSpi; // On veut utiliser le port SPI hardware
Mirf.init(); // Initialise la bibliothèque

Mirf.channel = 1; // Choix du canal de communication (128 canaux disponibles, de 0 à 127)
Mirf.payload = sizeof(float); // Taille d'un message (maximum 32 octets)
Mirf.config(); // Sauvegarde la configuration dans le module radio

Mirf.setTADDR((byte *) "nrf01"); // Adresse de transmission
Mirf.setRADDR((byte *) "nrf02"); // Adresse de réception
digitalWrite(ss, HIGH);

if (! RTC.isrunning()) {
Serial.println("RTC n est pas en cours de fonctionnement!");
// La ligne suivante fixe la date et l'heure du RTC avec les date et heur de compilation du sketch
RTC.adjust(DateTime(DATE, TIME));
}

digitalWrite(ss2, LOW);
data_DHT = SD.open("Data_DHT.csv", FILE_WRITE); // ouverture du fichier "Data_DHT.csv" en mode ecriture
data_DHT.println("Humidite,Temperature,jour,mois,annee,heure,minute,seconde"); // le titre des colonnes de données
data_DHT.close(); // firmeture du fichier
digitalWrite(ss2, HIGH);

}

void loop() {

float temperature;

digitalWrite(ss, LOW);
if (Mirf.dataReady()) {
Mirf.getData((byte *) &temperature); // Réception du paquet
Serial.println(temperature); // Affiche le message
digitalWrite(ss, HIGH);
}

if (temperature < tempmin)
{ tempmin = temperature;
}

if (temperature > tempmax)
{ tempmax = temperature;
}

Serial.println(tempmax);
Serial.println(tempmin);
Serial.println(heure);
Serial.println(minute);

if (heure > 23 & minute == 59)
{ tempmax = 0;
tempmin = 999;
}

DateTime now = RTC.now();

// Lecture du taux d'humidité
int h = dht.readHumidity();
// Lecture de la température en Celcius
int t = dht.readTemperature();
// Pour lire la température en Fahrenheit
int f = dht.readTemperature(true);

unsigned long currentTime = millis(); // l'utilisation de millis() évite l'utilisation de Delay()

tempm = temperature;

minuted = now.minute() / 10;
minuteu = now.minute() % 10;
minute = now.minute();
heured = now.hour() / 10;
heureu = now.hour() % 10;
heure = now.hour();
tempd = tempm / 10;
tempu = tempm % 10;

lcd.setCursor(2, 0);
lcd.print(":");

lcd.setCursor(13, 1);
lcd.print("ext");
lcd.setCursor(6, 1);
lcd.print("%");
lcd.setCursor(2, 1);
lcd.print("C");

lcd.setCursor(3, 0);
lcd.print (minuted);
lcd.setCursor(4, 0);
lcd.print (minuteu);

lcd.setCursor(0, 0);
lcd.print(heured);
lcd.setCursor(1, 0);
lcd.print(heureu);

lcd.setCursor(11, 0);
lcd.print(now.day(), DEC);
lcd.setCursor(14, 0);
lcd.print(now.month(), DEC);
lcd.setCursor(13, 0);
lcd.print("/");

lcd.setCursor(0, 1);
lcd.print(t);
lcd.setCursor(4, 1);
lcd.print(h);

lcd.setCursor(8, 1);
lcd.print(temperature);
delay(5000);
lcd.clear();

lcd.setCursor(11, 0);
lcd.print(now.day(), DEC);
lcd.setCursor(14, 0);
lcd.print(now.month(), DEC);
lcd.setCursor(13, 0);
lcd.print("/");
lcd.setCursor(0, 0);
lcd.print(heured);
lcd.setCursor(1, 0);
lcd.print(heureu);
lcd.setCursor(2, 0);
lcd.print(":");

lcd.setCursor(3, 0);
lcd.print (minuted);
lcd.setCursor(4, 0);
lcd.print (minuteu);

lcd.setCursor(0, 0);
lcd.print(heured);
lcd.setCursor(1, 0);
lcd.print(heureu);

lcd.setCursor(0, 1);
lcd.print(tempmin);
lcd.setCursor(4, 1);
lcd.print("min");
lcd.setCursor(9, 1);
lcd.print(tempmax);
lcd.setCursor(13, 1);
lcd.print("max");
delay(5000);
lcd.clear();

if (currentTime - previousTime > cycle)
{ digitalWrite(ss2, LOW);
previousTime = currentTime;

data_DHT = SD.open("Data_DHT.csv", FILE_WRITE); // ouverture du fichier
data_DHT.print(h);
data_DHT.print(",");
data_DHT.print(t); // la lecture des données fournie par le capteur puis leurs écriture dans le fichier
data_DHT.print(",");
data_DHT.print (now.day());
data_DHT.print(",");
data_DHT.print (now.month());
data_DHT.print(",");
data_DHT.print (now.year());
data_DHT.print(",");
data_DHT.print ( now.hour());
data_DHT.print(",");
data_DHT.print ( now.minute());
data_DHT.print(",");
data_DHT.println ( now.second());
data_DHT.close(); // fermeture du fichier
i++;
digitalWrite(ss2, HIGH);
}

}

Bonsoir

sans présentation du code entre les balises appropriées il n'y aura pas grand monde pour s'y'piquer le yoeux

Plusieurs messages importants sont épinglés en tête de forum, à lire impérativement en arrivant içi