Проблема NRF24L01
- Войдите на сайт для отправки комментариев
Чт, 31/08/2017 - 18:00
Здравствуйте!
Подскажите пожалуйста!
Использую стандартную библеотеку для nRF24L01 :
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
если дополнительно подключить библиотеку #include <Wire.h>, то данные не передаются!
В чем может быть проблема? SPI конфликтует с I2C?
Arduino Pro mini
Arduino Nano
Скорее всего SPI не при чём, а конфликтуют какие-нибудь библиотеки по таймерам или что-то в этом роде. Но пока Вы не дадите ссылки на те сымае версии библиотек, которые используются и не выложите скетч - ничего сказать нельзя.
Скорее всего SPI не при чём, а конфликтуют какие-нибудь библиотеки по таймерам или что-то в этом роде. Но пока Вы не дадите ссылки на те сымае версии библиотек, которые используются и не выложите скетч - ничего сказать нельзя.
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" #include "printf.h" #include <Wire.h> // если закоментить то все ок, связь есть // Hardware configuration: Set up nRF24L01 radio on SPI bus plus pins 7 & 8 RF24 radio(9, 10); // Для работы с модулем гироскопа MPU-6050 const int MPU_addr = 0x68; // I2C address of the MPU-6050 int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ; // Vars const uint64_t pipes[2] = {"1Node", "2Node"}; byte dataOut[3]; byte dataIn[1]; long sendCount = 0; long sendSuccessCount = 0; long sendErrorCount = 0; int sendRate = 0; long sendRatePrevSuccessCount = 0; #define sendRateDoEach 50 long prevMillis = 0; void setup() { Serial.begin(115200); printf_begin(); // Setup and configure rf radio radio.begin(); //radio.setAutoAck(1); // Ensure autoACK is enabled //radio.enableAckPayload(); // Allow optional ack payloads //radio.setRetries(0, 15); // Smallest time between retries, max no. of retries radio.setChannel(122); radio.openWritingPipe(pipes[0]); // Both radios listen on the same pipes by default, and switch when writing radio.openReadingPipe(1, pipes[1]); radio.startListening(); // Start listening //radio.printDetails(); // Dump the configuration of the rf unit for debugging // MPU-6050 /* Wire.begin(); Wire.beginTransmission(MPU_addr); Wire.write(0x6B); // PWR_MGMT_1 register Wire.write(0); // set to zero (wakes up the MPU-6050) Wire.endTransmission(true); */ pinMode(4, INPUT_PULLUP); } void loop(void) { /* DATA PART */ /* Wire.beginTransmission(MPU_addr); Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) Wire.endTransmission(false); Wire.requestFrom(MPU_addr, 14, true); // request a total of 14 registers AcX = Wire.read() << 8 | Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L) AcY = Wire.read() << 8 | Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L) AcZ = Wire.read() << 8 | Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L) Tmp = Wire.read() << 8 | Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L) GyX = Wire.read() << 8 | Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L) GyY = Wire.read() << 8 | Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L) GyZ = Wire.read() << 8 | Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L) dataOut[0] = 200; dataOut[1] = constrain(map(AcX, 13000, -13000, 0, 180), 0, 180); dataOut[2] = constrain(map(AcY, 13000, -13000, 0, 180), 0, 180); */ dataOut[0] = analogRead(4); dataOut[1] = 300; dataOut[2] = 400; /* RADIO PART */ radio.stopListening(); sendCount++; bool isSend = radio.write(&dataOut, sizeof(dataOut)); if (isSend) { sendSuccessCount++; } else { sendErrorCount++; } if (!(sendCount % sendRateDoEach)) { sendRate = ((float)(sendSuccessCount - sendRatePrevSuccessCount) / sendRateDoEach) * 100; sendRatePrevSuccessCount = sendSuccessCount; } if (isSend) { radio.startListening(); unsigned long started_waiting_at = millis(); bool timeout = false; while (!radio.available() && !timeout ) if (millis() - started_waiting_at > 300) timeout = true; if (!timeout) { while (radio.available()) { radio.read(&dataIn, sizeof(dataIn)); } } else { Serial.println("Failed, response timed out."); } } /* LSD PART */ if (millis() - prevMillis > 500) { Serial.print("Total: "); Serial.print(sendCount); Serial.print(" | Success: "); Serial.print(sendSuccessCount); Serial.print(" | Error: "); Serial.print(sendErrorCount); Serial.print(" | Rate: "); Serial.print(sendRate); Serial.print("%"); Serial.println(); prevMillis = millis(); } }Версии библеотек самые последние, ставил через IDE
Arduino Nano
Я не знаю что такое самые последние Вот на это
Версия IDE 1.8.3
RF24 by tmrh20 1.3.0 - ставил через IDE
Wire by Arduino 1.0.0
Уже попробовал на другой плате arduino, и пробывал скачивать RF24 непосредственно с github, всеравно такой косяк, при подключение #include <Wire.h>
bool isSend = radio.write(&dataOut, sizeof(dataOut));
данные не уходят!
Тоже самое и при подключение например #include <LiquidCrystal_I2C.h>
Переместите #include <Wire.h> в самое начало файла, чтобы это было первой строкой. Всплывала похожая проблема с часами 1307.