Problema comunicazione SPI

Ciao a tutti,
Ho un problema nella comunicazione SPI di due componenti per arduino: un modulo LoRa ed un adattatore SD per arduino.

In pratica due arduino comunicano tramite i LoRa mentre uno dei due memorizza anche dei dati su una SD

La SD singolarmente funziona quindi non è rotta
Il modulo LoRa ha come CS il pin 10 mentre la SD ha come CS il 7, entrambi sono collegati al MOSI MISO e SCK di arduino uno

Questo è il codice che uso, il modulo LoRa funziona mentre non riesco a scrivere dati sulla SD

Se serve metto anche il codice delle librerie “LoraCom” e “Tempo”

#include "LoraCom.h"
#include "Tempo.h"
#include <SD.h>
#include <SPI.h>
//caricare com3
LoraCom sender(0xF3,20,433E6,10,9,5);
SPISettings settings(2000000, MSBFIRST, SPI_MODE1); 

String mess;

void setup() {
  pinMode(A0,INPUT);
  Serial.begin(9600);
  
  if (!SD.begin(7)) {
       while (1);
  }
  sender.iniz(); //uno va impostato false a l'altro true    
}
void loop() {
  SPI.beginTransaction(settings);
  digitalWrite (10, LOW);
  mess=sender.duplexSlave("Rob",0xF4,0x34,500);//sync invertiti
  digitalWrite (10, HIGH);
  SPI.endTransaction();                                         //tempo invio, corrisponde al tempo ricevo master
  if(mess!=NULL)Serial.println(mess+card());
}


String card(){
   SPI.beginTransaction(settings);
  digitalWrite(10,LOW);    // SS is pin 10
  String dataString = "";
  dataString += String(analogRead(A0));
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
  }
  digitalWrite(10, HIGH); 
  SPI.endTransaction();
  return dataString;
}

Qualcuno sa come aiutarmi?

I pin SS (o CS come vuoi chiamarli) NON vanno gestiti a mano, ma sono le ripettive librerie che li mettono LOW quando usano il bus e li rimettono subito ad HIGH quando non lo usano.

L'unica cosa eventualmente dal fare, all'avvio del programma, è mettere i due pin di SS come OUTPUT e metterli HIGH, da li in poi ci DEVONO pensare le librerie e NON tu a mano ... ::slight_smile:

Guglielmo

Grazie mille, ho modificato il codice nel seguente modo, adesso scrive sulla sd, il modulo LoRa riceve i dati ma non riesce ad inviarli, sapete che problema può essere? Se serve metto il codice della libreria LoraCom e Tempo

#include "LoraCom.h"
#include "Tempo.h"
#include <SD.h>
#include <SPI.h>

LoraCom sender(0xF3,20,433E6,10,9,5);

String mess;

void setup() {
 pinMode(10,OUTPUT);
 pinMode(7,OUTPUT);
 digitalWrite(10,HIGH);
 digitalWrite(7,HIGH);
 Serial.begin(9600);
 
 if (!SD.begin(7)) {
   Serial.print("error");
     while (1);
 }
 sender.iniz(); //uno va impostato false a l'altro true    
}
void loop() {
 mess=sender.duplexSlave("Rob",0xF4,0x34,500);//sync invertiti                                     
 if(mess!=NULL)Serial.println(mess);
 card();
}


void card(){
 File dataFile = SD.open("datalog.txt", FILE_WRITE);
 if (dataFile) {
   dataFile.println("come");
   dataFile.close();
 }
}