Совместимость nRF24l01+ и 0,96 OLED 128х64 на уровне драйверов

Rumata
Offline
Зарегистрирован: 29.03.2019

Доброго дня!

Достаточно долго присутствую здесь в качестве молчаливого читателя, но вот нужда заставила развязаться :)

Возникла проблема совместимости nRF24L01+ и экранчика 0,96 OLED 128х64. 

По отдельности все работает замечательно, а инициализация обоих устройств вешает ардуину.

Питание радио и экрана отдельным блоком на 1А на макетке. Ардуина питается отдельно. Земля общая.

Библиотеки экрана пользовал Adafruit_SSD1306 и ту, что в скетче от  Rinky-Dink

template <typename T> inline Print & operator << (Print &s, T n) { s.print(n); return s; } 
#include <SPI.h>
#include "RF24.h"
#include <OLED_I2C.h>

RF24  radio(9,10);
OLED  myOLED(4, 5);
extern uint8_t SmallFont[];
const uint64_t clientPipe = 0xAABBCCDD03;
uint8_t cmd;


void setup() {
  Serial.begin(115200);
  Serial << "Стартанула консоль \n";            
  
 // myOLED.begin(SSD1306_128X64); 
  Serial << "Стартанул дисплей \n";           // До этого места выполнение на доходит
  
  radio.begin();
  Serial << "Стартанула рация \n";
  
  radio.setPALevel(RF24_PA_LOW);            
  radio.setDataRate(RF24_1MBPS);
  radio.setCRCLength(RF24_CRC_8);
  radio.setAutoAck(1);
  radio.setRetries(10,15);                  
  radio.setChannel(115);  
  radio.openReadingPipe(0, clientPipe);
  radio.openWritingPipe (clientPipe);
  radio.startListening();
  } //setup


void loop() 
{
    if (radio.available())
    {
    radio.read(&cmd, sizeof(cmd));  //получаем 1 байт от другой ардуины
    radio.stopListening();            
    radio.write (&cmd, sizeof(cmd)); //от нечего делать возвращаем обратно
    radio.startListening();
    Serial << uint8_t(cmd) << '\n';
    } 
} // loop

 

 

Rumata
Offline
Зарегистрирован: 29.03.2019

Rumata пишет:

 

 // myOLED.begin(SSD1306_128X64); 

 

 

Прошу прощения, эта строке раскомментирована, само-собой

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

не перепутал ли SDA и SCL на икранчеге?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

пропробуй delay вставь, напечатает чонить? 

17 myOLED.begin(SSD1306_128X64);

18

 

Serial << "Стартанул дисплей \n";           // До этого места выполнение на доходит  

delay(1000);

 

 

 

Rumata
Offline
Зарегистрирован: 29.03.2019

SCL/SDA на местах. Паузы не влияют. OLED_i2c просто вешает МК при инициализации, а Адафрутовская либа отправляет в ребут при попытке записи в буфер экранчика. Такое ощущение, что они не могут поделить какой-то ресурс с RF24.cpp

b707
Offline
Зарегистрирован: 26.05.2017

Автор, а что это за 4 и 5 в строке 7 ?

OLED  myOLED(4, 5);

Если это ОЛЕД с I2C подключением, то никаких пинов 4 и 5 там использовать нельзя, пины должны быть только  хардварные SDA b SCL, на Уно-Нано это A4 и A5 и никакие другие.

b707
Offline
Зарегистрирован: 26.05.2017

Rumata пишет:

Такое ощущение, что они не могут поделить какой-то ресурс с RF24.cpp

вот прямо сейчас на столе лежат две поделки с использованием NRF24 и OLED I2C. Полностью стандартные библиотеки - все работает из коробки, никаких конфликтов

Rumata
Offline
Зарегистрирован: 29.03.2019

И да, опытным путем установлено, что для завешивания ардуины экран с рацией даже не должны быть физически к ней подключены. Достаточно нескольких строк на Си :)

Rumata
Offline
Зарегистрирован: 29.03.2019

Спасибо, точно! Поправлю и доложу о результате

UPD. Виснет в том-же месте

Какие библы каких версий пользуете в своем проекте? 

Как вариант, поеду сейчас за другим экземпляром ардуины

 

 

b707
Offline
Зарегистрирован: 26.05.2017

Rumata пишет:

И да, опытным путем установлено, что для завешивания ардуины экран с рацией даже не должны быть физически к ней подключены. Достаточно нескольких строк на Си :)

В таком случае я бы для уверенности выкинул шаблон из первой строчки и переписал все операторы принт без "<<".

Rumata
Offline
Зарегистрирован: 29.03.2019

b707 пишет:

Автор, а что это за 4 и 5 в строке 7 ?

OLED  myOLED(4, 5);

Если это ОЛЕД с I2C подключением, то никаких пинов 4 и 5 там использовать нельзя, пины должны быть только  хардварные SDA b SCL, на Уно-Нано это A4 и A5 и никакие другие.

 

Однозначно в этом была проблема! Спасибо огромное. Я со временем научусь таких глупых ляпов избегать, обещаю :)

Заодно прозвонил еще раз всю цепь, выкинул адаптор рации, коротый выдавал 2,83 вместо положенных 3,3. Это решило проблему ребутов окончательно.