несколько устройств на 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 не вариант
А это недостаточная причина?
отдельно сд работает прекрасно (может я вас не так понял?)