несколько устройств на SPI
- Войдите на сайт для отправки комментариев
Вс, 29/12/2019 - 20:38
#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 стоит, но и с ним и без него пишет пишет а потом не пишет)). Возможно накосячил где-то в коде. Заранее спасибо за советы.
Решил дописать в коде в строчке 74
digitalRead (A2);digitalRead (A1);и вывести значения в порт . Пока карточка все записывает на пине A1 логическая 1, (странно ведь несколькими строчками ранее я подавал туды 0) а как перестает писать там 0, а на пине A2 всегда 1
Возьмите нестоковую библиотеку... SDFat, вроде, в тренде.
Возьмите нестоковую библиотеку... SDFat, вроде, в тренде.
а чем стоковая хуже (забыл добавить, свободных пинов в проэкте больше не остается только только для подключения модуля) поэтому программный SPI не вариант
Возьмите нестоковую библиотеку... SDFat, вроде, в тренде.
а чем стоковая хуже (забыл добавить, свободных пинов в проэкте больше не остается только только для подключения модуля) поэтому программный SPI не вариант
А это недостаточная причина?
Возьмите нестоковую библиотеку... SDFat, вроде, в тренде.
а чем стоковая хуже (забыл добавить, свободных пинов в проэкте больше не остается только только для подключения модуля) поэтому программный SPI не вариант
А это недостаточная причина?
отдельно сд работает прекрасно (может я вас не так понял?)