Arduino Pro mini & Arduino Nano

Добрый день. Впервые столкнулся с такой проблемой. Была Arduino Pro mini + энкодер + OLED SSD1306 + кольцо WS2812. Начало скетча:

#include <CtrlEnc.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_NeoPixel.h>

#define SCREEN_WIDTH 128 
#define SCREEN_HEIGHT 64 
#define SCREEN_ADDRESS 0x3c 

#define LED_COUNT 24
#define LED_PIN 7

Adafruit_NeoPixel WS2812B(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

дальше приводить скетч смысла нет. Всё работало.

Подключил вместо Arduino Pro mini - Arduino Nano. Получилось Arduino Nano + энкодер + OLED SSD1306 + кольцо WS2812. Результат - не видит OLED.

void setup() 
{
  Serial.begin(9600);
   if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) 
    { Serial.println(F("SSD1306 allocation failed"));  for(;;); }
...
...
}


В Serial Monitor - SSD1306 allocation failed.
Но стоит закомментировать строку WS2812B - всё снова работает. Но только без функционала WS2812B.

#include <CtrlEnc.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_NeoPixel.h>

#define SCREEN_WIDTH 128 
#define SCREEN_HEIGHT 64 
#define SCREEN_ADDRESS 0x3c 

#define LED_COUNT 24
#define LED_PIN 7

//Adafruit_NeoPixel WS2812B(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

И там и там Atmel ATmega328. Параметры в Arduino IDE одинаковые. Почему так происходит? Искать другую библиотеку для WS2812?

Непропай.

А разве в промини не ATmega168? Точно?

неопиксел совершенно по-разному компилируется в зависимости от частоты процессора. На ПроМини всегда было 8МГц, а на Нано - 16МГц.
Это может иметь важное значение.
Еще вариант: Попробуй собрать не на 800КГц, на на 400, тоже другой блок кода компилируется.

Я смотрел в микроскоп. По моему не наврали. Было написано 328. Завтра ещё раз гляну.

А вот это уже полезный совет в отличии от спирта и огурцов. Завтра на работе попробую.

На трехвольтовых промини 8МГц. Пятивольтовые такие же, как и наны.

И там, и там бывает и то, и другое ))

С чего бы всегда? Вполне себе промини на 16 МГц продаются. И как бэ в основном такие, на 8, как выше указали, трехвольтовые ))

Садман выше уже написал. Я забыл, что на 8 только 3 вольтовые.

Всяко бывает.
Равно как и в Нано.

Судя по всему, запаса оперативки практически нет. Чуть другие опции сборки - и памяти под буфер дисплея уже не хватает.

1 лайк

Так по паспорту у 328 на 3х вольтах 16МГц не гарантируют.

Тогда нужно брать LGBT. Они 16 тянут во всём диапазоне.

Не помогло

Поясните пожалуйста что это?

Бинго! Выкинул всё. Оставил по минимуму. (пример) Всё заработало. Правда взял другую библиотеку. Даааа, ОЗУ, ОЗУ, ОЗУ …

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <iarduino_NeoPixel.h> 

#define SCREEN_WIDTH 128 
#define SCREEN_HEIGHT 64 
#define SCREEN_ADDRESS 0x3c 

#define LED_COUNT 24
#define LED_PIN 7

iarduino_NeoPixel WS2812B(7,24);   

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);


void setup() 
{
  Serial.begin(9600);
  
  if   (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS))   { Serial.println(F("SSD1306 - Error")); }
                                                          else  { Serial.println(F("SSD1306 - ОК")); }
  display.display();
  display.clearDisplay();
  delay(1000);

  WS2812B.begin();

  if(WS2812B.begin()) {Serial.println("WS2812B - Ok");}          //  Инициируем работу со светодиодами и выводим сообщение об успешной инициализации
  else                {Serial.println("WS2812B - Error");}  
  WS2812B.setColor(NeoPixelAll, 255,0,0);              //  Устанавливаем красный цвет для всех светодиодов (все,R,G,B)
  WS2812B.write();                                     //  Записываем
  delay(1000);

}
void loop ()
{

  
}

где в таком случае моя отметка за решение вопроса? :slight_smile:

1 лайк

Без проблем :grin: Где её поставить? :laughing:

думаю сообщение 13