Совместимость nRF24l01+ и 0,96 OLED 128х64 на уровне драйверов
- Войдите на сайт для отправки комментариев
Втр, 02/04/2019 - 12:37
Доброго дня!
Достаточно долго присутствую здесь в качестве молчаливого читателя, но вот нужда заставила развязаться :)
Возникла проблема совместимости 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
Прошу прощения, эта строке раскомментирована, само-собой
не перепутал ли SDA и SCL на икранчеге?
пропробуй delay вставь, напечатает чонить?
17myOLED.begin(SSD1306_128X64);18Serial<<"Стартанул дисплей \n";// До этого места выполнение на доходитdelay(1000);
SCL/SDA на местах. Паузы не влияют. OLED_i2c просто вешает МК при инициализации, а Адафрутовская либа отправляет в ребут при попытке записи в буфер экранчика. Такое ощущение, что они не могут поделить какой-то ресурс с RF24.cpp
Автор, а что это за 4 и 5 в строке 7 ?
Если это ОЛЕД с I2C подключением, то никаких пинов 4 и 5 там использовать нельзя, пины должны быть только хардварные SDA b SCL, на Уно-Нано это A4 и A5 и никакие другие.
Такое ощущение, что они не могут поделить какой-то ресурс с RF24.cpp
вот прямо сейчас на столе лежат две поделки с использованием NRF24 и OLED I2C. Полностью стандартные библиотеки - все работает из коробки, никаких конфликтов
И да, опытным путем установлено, что для завешивания ардуины экран с рацией даже не должны быть физически к ней подключены. Достаточно нескольких строк на Си :)
Спасибо, точно! Поправлю и доложу о результате
UPD. Виснет в том-же месте
Какие библы каких версий пользуете в своем проекте?
Как вариант, поеду сейчас за другим экземпляром ардуины
И да, опытным путем установлено, что для завешивания ардуины экран с рацией даже не должны быть физически к ней подключены. Достаточно нескольких строк на Си :)
В таком случае я бы для уверенности выкинул шаблон из первой строчки и переписал все операторы принт без "<<".
Автор, а что это за 4 и 5 в строке 7 ?
Если это ОЛЕД с I2C подключением, то никаких пинов 4 и 5 там использовать нельзя, пины должны быть только хардварные SDA b SCL, на Уно-Нано это A4 и A5 и никакие другие.
Однозначно в этом была проблема! Спасибо огромное. Я со временем научусь таких глупых ляпов избегать, обещаю :)
Заодно прозвонил еще раз всю цепь, выкинул адаптор рации, коротый выдавал 2,83 вместо положенных 3,3. Это решило проблему ребутов окончательно.