несколько устройств на SPI

Савелий
Offline
Зарегистрирован: 26.10.2019

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <SD.h>
const int chipSelect = A1;
RF24 radio(A0,A2); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги

byte address[][6] = {"1Node","2Node","3Node","4Node","5Node","6Node"};  //возможные номера труб
File d;
void setup(){
  pinMode (A1,OUTPUT);
  pinMode (A2,OUTPUT);
  digitalWrite (A1,1);
    digitalWrite (A2,1);
  Serial.begin(9600); //открываем порт для связи с ПК

  digitalWrite (A2,0);
  radio.begin(); //активировать модуль
  radio.setAutoAck(1);         //режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0,15);     //(время между попыткой достучаться, число попыток)
  radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);     //размер пакета, в байтах

  radio.openReadingPipe(1,address[0]);      //хотим слушать трубу 0
  radio.setChannel(0x60);  //выбираем канал (в котором нет шумов!)

  radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  //должна быть одинакова на приёмнике и передатчике!
  //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
  
  radio.powerUp(); //начать работу
  radio.startListening();  //начинаем слушать эфир, мы приёмный модуль
  digitalWrite (A2,1);
    digitalWrite (A1,0);
   Serial.print("Initializing SD card...");

  // see if the card is present and can be initialized:
  if (!SD.begin(A1)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    while (1);
  }

  d.println ("testing");
  d.flush (); 
   delay (100);
    digitalWrite (A1,1);
  d.println ("testing");
  d.flush (); 
    delay (100);
  Serial.println("card initialized.");
}

void loop() {
    byte pipeNo=0;
    byte gotByte [32];
      File d = SD.open("12a.txt", FILE_WRITE);
    delay (1000);    
digitalWrite (A2,0);
    while( radio.available()){    // слушаем эфир со всех труб
      radio.read( &gotByte, sizeof(gotByte) );         // чиатем входящий сигнал

pipeNo=1;
   
   }
      digitalWrite (A2,1);
         digitalWrite (A1,0);
         d.println("Fvvvv");
         d.flush ();
   if (pipeNo==1){
    for (int f=0;f<32;f++) {
     Serial.print("Recieved: "); d.println(gotByte [f]);
d.flush ();
    }
       
   pipeNo=0;

   }
d.flush ();
      digitalWrite (A1,1);
}

Здравствуйте! Есть NRF24L01+ и SD module, оба на SPI. Радиомодуль работает отлично, но сд не очень. Дело в том что некоторое время все идет прекрасно. А потом просто перестаёт писать на сд а именно через два-три 32 байтовых приема данных. выходы SS разные. Резистор на MISO стоит, но и с ним и без него пишет пишет а потом не пишет)). Возможно накосячил где-то  в коде. Заранее спасибо за советы.

Савелий
Offline
Зарегистрирован: 26.10.2019

Решил дописать в коде в строчке 74

   digitalRead (A2); digitalRead (A1);

и вывести значения в порт . Пока карточка все записывает на пине A1 логическая 1, (странно ведь несколькими строчками ранее я подавал туды 0) а как перестает писать там 0, а на пине A2 всегда 1

sadman41
Offline
Зарегистрирован: 19.10.2016

Возьмите нестоковую библиотеку... SDFat, вроде, в тренде.

Савелий
Offline
Зарегистрирован: 26.10.2019

sadman41 пишет:

Возьмите нестоковую библиотеку... SDFat, вроде, в тренде.

 

а чем стоковая хуже (забыл добавить, свободных пинов в проэкте больше не остается только только для подключения модуля) поэтому программный SPI не вариант

sadman41
Offline
Зарегистрирован: 19.10.2016

Савелий пишет:

sadman41 пишет:

Возьмите нестоковую библиотеку... SDFat, вроде, в тренде.

 

а чем стоковая хуже (забыл добавить, свободных пинов в проэкте больше не остается только только для подключения модуля) поэтому программный SPI не вариант

А это недостаточная причина?

Савелий пишет:
Радиомодуль работает отлично, но сд не очень. Дело в том что некоторое время все идет прекрасно. А потом просто перестаёт писать на сд 

Савелий
Offline
Зарегистрирован: 26.10.2019

sadman41 пишет:

Савелий пишет:

sadman41 пишет:

Возьмите нестоковую библиотеку... SDFat, вроде, в тренде.

 

а чем стоковая хуже (забыл добавить, свободных пинов в проэкте больше не остается только только для подключения модуля) поэтому программный SPI не вариант

А это недостаточная причина?

Савелий пишет:
Радиомодуль работает отлично, но сд не очень. Дело в том что некоторое время все идет прекрасно. А потом просто перестаёт писать на сд 

отдельно сд работает прекрасно (может я вас не так понял?)

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Савелий пишет:
может я вас не так понял?
Да, не так. Ты сюда поспорить пришёл или проблему решить? Если второе, делай, что сказали, и отпишись, что получилось.