SD-карта и модуль Lora arduino uno
Общие сведения. При работе над двумя модулями по отдельности они работали отлично.
Проблема: в прилагаемом коде мы пытались их интегрировать, но Лора не получала никаких данных, если мы не закомментировали части функции SDC. Есть ли решение?
Вот где возникает проблема:
Serial.print("Data received: ");
Serial.print(received);
if(received=="ANEMO"){
Сколько бы мы ни кормили его ИСТИННЫМИ данными от другой Лоры с этими кодами, он просто показывает пустое и ложное.
Пожалуйста, помогите этому бедному ягненку. Это для нашего школьного проекта. Надеюсь, вы сможете уделить мне немного своего времени. Заранее большое спасибо.
для контактов CS: Лора: контакт 10, SD: контакт 5
другие контакты SPI соответствуют стандартным контактам.
PS: в коде мы закомментировали некоторые строки в функции SDC, основываясь на наших наблюдениях:
myFile = SD.open("HG.txt", FILE_WRITE);
myFile.close();
Эти 2 строки заставляют нашу Лору не отображать данные, которые она получает в (переменной получения строки).
Спасибо, добрый сэр/мэм, еще раз надеюсь, что вы можете мне помочь.
Вот полный код:
#include <SPI.h>
#include <SD.h>
#include <RH_RF95.h>
#define RFM95_CS 10
#define RFM95_RST 9
#define RFM95_INT 2
#define RF95_FREQ 868.0
RH_RF95 rf95(RFM95_CS, RFM95_INT);
unsigned long millisecs;
int cnt;
float valu;
String jh;
int code=1;
String received;
File myFile;
void setup(){
Serial.begin(115200);
if (!SD.begin(5)) {
Serial.println("Card failed, or not present");
while (1);
}
else{
Serial.println("card initialized.");
}
delay(100);
pinMode(RFM95_RST, OUTPUT);
digitalWrite(RFM95_RST, HIGH);
while (!Serial);
Serial.println("Arduino LoRa RX Test!");
digitalWrite(RFM95_RST, LOW);
delay(10);
digitalWrite(RFM95_RST, HIGH);
delay(10);
while (!rf95.init()) {
Serial.println("LoRa radio init failed");
while (1);
}
Serial.println("LoRa radio init OK!");
if (!rf95.setFrequency(RF95_FREQ)) {
Serial.println("setFrequency failed");
while (1);
}
Serial.print("Set Freq to: "); Serial.println(RF95_FREQ);
rf95.setTxPower(23, false);
}
void lorA(){
while(code==1){
if (rf95.waitAvailableTimeout(1000)){
Serial.println("dayun ");
uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
if (rf95.recv(buf, &len)){
cnt++;
Serial.print("Data number: ");
Serial.println(cnt);
received=(char*)buf;
Serial.print("Data received: ");
Serial.print(received);
if(received=="ANEMO"){
uint8_t data[] = "And hello back to you";
rf95.send(data, sizeof(data));
rf95.waitPacketSent();
Serial.println("Sent a reply");
code=0;
}
}
else{
Serial.println("Receive failed");
}
}
}
}
void SDC(){
while(code==0){
Serial.println("SDC");
// Файл dataFile = SD.open("HG.txt", FILE_WRITE);
// Строка dataString="Ганс";
// если (файл данных) {
// dataFile.println(dataString);
// файл данных.close();
// Serial.println("закрыто");
// Serial.println(dataString);
code=1;
// }
// еще {
// Serial.println("ошибка открытия datalog.txt");
// }
}
}
void loop(){
Serial.println("loop");
lorA();
Serial.println("mid");
SDC();
}
@Hans Gonzaga, 👍1
Обсуждение1 ответ
Всю вашу проблему можно решить с помощью простого трюка... Просто следуйте ему...
- Использовать библиотеку Sdfat вместо SD.
- просто следуйте таблице данных SPI.
следуйте приведенному ниже коду... он работает как с LORA, так и с SD
... #include <SdFat.h> #include <SPI.h> #include <RHReliableDatagram.h> #include <RH_RF95.h> СДФат сд; SD-файл мой файл; # определить чипселект 4 # определить RFM95_CS 10 // # определить RFM95_RST 9 # определить RFM95_INT 2 // Одиночный экземпляр радиодрайвера RH_RF95 rf95(RFM95_CS,RFM95_INT); //драйвер RH_RF95(5, 2); // Rocket Scream Mini Ultra Pro с RFM95W // Класс для управления доставкой и получением сообщений с использованием объявленного выше драйвера Менеджер RHReliableDatagram (rf95, 2); недействительная установка () { Серийный.начать(9600); while (!Serial) {} // ждем Леонардо delay(100); // Инициализируем SdFat или выводим подробное сообщение об ошибке и останавливаемся // Использовать половинную скорость, как в родной библиотеке. // изменить на SPI_FULL_SPEED для большей производительности. pinMode (RFM95_CS, ВЫХОД); цифровая запись (RFM95_CS, ВЫСОКИЙ); цифровая запись (4, НИЗКИЙ); если (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt(); /* /* * //Открываем файл и пишем... * // открываем файл для записи в конце, как библиотека Native SD if (!myFile.open("mrinmoy.txt", O_RDWR | O_CREAT | O_AT_END)) { sd.errorHalt("Ошибка открытия test.txt для записи"); } // если файл открылся нормально пишем в него: Serial.print("Запись в test.txt..."); myFile.println("тестирование 1, 2, 3."); // закрываем файл: мойФайл.закрыть(); Serial.println("Готово."); */ /* // открываем файл для чтения.... если (!myFile.open("mrinmoy.txt", O_READ)) { sd.errorHalt("Ошибка открытия test.txt для чтения"); } Serial.println("mrinmoy.txt:"); // читаем из файла, пока в нем больше ничего нет: внутренние данные; в то время как ((данные = myFile.read()) >= 0) Serial.write(data); // закрываем файл: мойФайл.закрыть(); */ // ручной сброс цифровая запись (RFM95_RST, НИЗКИЙ); задержка (10); цифровая запись (RFM95_RST, ВЫСОКИЙ); задержка (10); цифровая запись (RFM95_CS, НИЗКИЙ); цифровая запись (4, ВЫСОКИЙ); в то время как (!manager.init()) { Serial.println("Ошибка инициализации радио LoRa"); пока (1); } Serial.println("Инициализация радио LoRa в порядке!"); // цифровая запись (RFM95_CS, LOW); } пустой цикл () { uint8_t data[] = "Привет. Это узел 1."; // unsigned char sd_data[50]; // Не помещайте это в стек: // uint8_t buf[RH_RF95_MAX_MESSAGE_LEN]; uint8_t buf[50]; // после настройки ничего не происходит //LoRa.setPins(LoRa_CS, LoRa_RST, DI0); цифровая запись (4, ВЫСОКИЙ); // удалить SPI SD-карты цифровая запись (RFM95_CS, НИЗКИЙ); // ВЫБЕРИТЕ (низкий) LoRa SPI SPI.начать(); // Отправляем сообщение manager_client если (manager.sendtoWait((uint8_t*)данные,sizeof(данные),1)) { Serial.print("успешно отправлено: "); Серийный.println(1); } еще { Serial.println("Ошибка отправки"); } // получатель .... // Теперь ждем ответа от сервера uint8_t len = размер (buf); uint8_t из; если (manager.recvfromAckTimeout(buf, &len, 2000, &from)) { Serial.print("Получен ответ от: 0x"); Serial.print(от, HEX); Серийный.print(": "); Serial.println((char*)buf); } еще { } // digitalWrite(4, LOW); SPI.конец(); цифровая запись (4, НИЗКИЙ); // удалить SPI SD-карты цифровая запись (RFM95_CS, ВЫСОКИЙ); // ВЫБЕРИТЕ (низкий) LoRa SPI SPI.начать(); если (!myFile.open("mrinmoy.txt", O_READ)) { sd.errorHalt("Ошибка открытия test.txt для чтения"); } Serial.println("mrinmoy.txt:"); чар ч; строка ул; интервал я=0; uint8_t sd_data[50]; в то время как (myFile.available()>0) { ch= мой файл.read(); стр+=ч; } Строка ул2=строка; Серийный.println(строка2); Serial.println(str2.length()); мойФайл.закрыть(); SPI.конец(); delay(500); }
используйте этот прием... ваша система будет работать идеально...
- Как использовать get_properties для получения RSSI в RF24?
- Декодировать радиочастотные удаленные сигналы с помощью ESP32 или node MCU?
- Можно ли передавать радиосигнал дешевым передатчиком 433 МГц в виде строк и принимать его с помощью RTL-SDR?
- Зашифрованная радиосвязь Arduino
- Как исправить задержку курсора мыши на голосовой и двигательной головной мыши в беспроводных настройках?
- Что это за модуль NRF24L01?
- RF Keyfob простой код кнопки
- В чем разница между вариантами RF (wifi, xbee, NRF24L01)
что означает "ИСТИННЫЕ данные"? .... в вашем коде много операторов печати, но я не вижу упоминания о печатных данных в вашем сообщении., @jsotola
Сэр, извините. Позвольте мне уточнить, под TRUE я имел в виду условие «if(received==" ANEMO")». Если вы заметили в полном коде, если условие выполнено, код должен напечатать «Отправлен ответ», но в нашем случае этого не произошло, и мы подозреваем, что на это влияет код SD-карты. Мы пришли к этой идее, когда пытались закомментировать некоторую строку функции SDC (функции для SD-карты), в частности, «myFile = SD.open("HG.txt", FILE_WRITE)». После того, как мы прокомментировали это, Lora снова начала работать правильно, так что, когда она получает ANEMO в сериале, она отображает Sent., @Hans Gonzaga
большинство модулей SD нарушают работу шины SPI, и другие устройства SPI не работают с ними., @Juraj
Черт, сэр/мэм... Это будет огромной проблемой. Неужели нет обходных путей решения проблемы? В любом случае спасибо, сэр/мэм., @Hans Gonzaga