Официальный сайт компании Arduino по адресу arduino.cc
Совместимость 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 вставь, напечатает чонить?
17
myOLED.begin(SSD1306_128X64);
18
Serial
<<
"Стартанул дисплей \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. Это решило проблему ребутов окончательно.