Conexión SPI Arduino uno con RF y SD

Hola, me encuentro desarrollando un datalogger en el cual se registraran los datos en una memoria sd (se logra haciendo uso de datalogger shield) pero a su vez, quiero enviar los datos mediante radiofrecuencia a una central que almacene más sensores.

He codificado por separado la comunicacion radiofrecuencia y la memoria sd pero al momento de juntar esos codigos tengo el problema que ambos se conectan con SPI.
Por lo que entiendo se puede realizar la conexión de varios dispositivos pero se debe asignar otros pines de conexion para CSN y CE.
En mi codigo para la entrada CSN de ambos dispositivos se encuentra el pin 10, realice la variación de uno de los pines CSN de 10 a 7 pero no basta con eso e ignoro cual seria los otros cambios.

Espero puedan ayudar, de antemano muchisimas gracias! :smiley:

Cuando presentes un tema, intenta dar toda la información. Digo esto porque no dices que modelo de transmisor de RF usas.
Para mi parece ser un nRF24L01 además por el nombre que has dado para su habilitación y porque es un dispositivo SPI como la SD.

Con el nRF24L01 puedes usar cualquier pin para CE y CSN.
Hay ejemplos con 9,10 y otros con 7,8 pero ya te he dicho, usa los que quieras que no comprometan la SD.

NOTA: Moví tu hilo de Proyectos porque lo tuyo es solo una consulta.
Lee las normas del foro y bienvenido al foro Arduino.

El problema continua, al correr el codigo solo manda una muestra de datos y despues muere.
realice la prueba de ir agregando extracto por extracto (como se muestra en la codificación adjunta), y el programa entra en problema cuando se llega a la apertura del documento de sd para guardar los datos dimensionados. Lo probe sin esta parte del codigo y corre muy bien pero debo guardar los datos en la sd.

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#define CE_PIN 5
#define CSN_PIN 6
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);
float data1[3];

#include "DHT.h"
#include "Adafruit_Sensor.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

#include <SD.h>
#include <Wire.h>
#include <SPI.h>
#include "RTClib.h"
const int chipSelect = 10 ;
File myFile;
#if defined(ARDUINO_ARCH_SAMD) 
#define Serial SerialUSB
#endif
RTC_DS1307 rtc;

//#include "kSeries.h"
//kSeries K_30(2, 3);

void setup()
{

  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(pipe);
  dht.begin();
  Wire.begin();

  Serial.print("iniciando memoria SD...");   //sd
  pinMode(chipSelect, OUTPUT);               //sd
  if (!SD.begin(chipSelect)) {               //sd
    Serial.println("problema en la memoria");  //sd
    return;                                     //sd
  }
  Serial.println("Memoria lista");
  Serial.println("DIA;HORA;TEMP;HR%;CO2");
  myFile = SD.open("data.txt", FILE_WRITE);
  myFile.println("DIA;HORA;TEMP;HR%;CO2");
  myFile.close();



  if (! rtc.begin()) {
    Serial.println("NO SE ENCUENTRA RELOJ");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    rtc.adjust(DateTime(2017, 8, 18, 11, 54, 0));

  }

}

void loop()
{
  data1[0] = dht.readTemperature();
  data1[1] = dht.readHumidity();
  data1[2] =  500;//data1[2] =  K_30.getCO2('p');
  radio.write( data1, sizeof(data1) );

  DateTime now = rtc.now();

  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(";");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.print(";");
  Serial.print( data1[0] );
  Serial.print(";");
  Serial.print(data1[1] );
  Serial.print(";");
  Serial.println(data1[3] );

  myFile = SD.open("data.txt", FILE_WRITE);
  myFile.print(now.year(), DEC);
  myFile.print('/');
  myFile.print(now.month(), DEC);
  myFile.print('/');
  myFile.print(now.day(), DEC);
  myFile.print(";");
  myFile.print(now.hour(), DEC);
  myFile.print(':');
  myFile.print(now.minute(), DEC);
  myFile.print(':');
  myFile.print(now.second(), DEC);
  myFile.print(";");
  myFile.print( data1[0]);
  myFile.print(";");
  myFile.print(data1[1]);
  myFile.print(";");
  myFile.println(data1[3]);
  myFile.close();
  delay(2000);
}

Dispositivos utilizados:
Sensor CO2 K30 el cual fue cambiado a comentario por no tenerlo todavia.
Sensor DHT22
Datashield Data logger v1.0
Arduino Uno
NRF24L01 con antena y amplificador.

Espero sus comentarios :smiley:

No has verificado que el nRF24L01 con antena tiene un gran consumo? Si lo alimentas con el Arduino seguramente tendras problemas. Además usas sensores de CO2 que tiene un filamento que tmb tiene una gran exigencia de corriente.

Intenta alimentar estos elementos con fuentes externas.

Luego un detalle en tu código: el DHT requiere 2 segundos para entregar un valor y al final tienes un delay de 2 segundos lo que lleva todo a 4 segundos por ciclo.