на дефолтовом примере: c:\Program Files (x86)\Arduino\libraries\Adafruit_SSD1306\examples\ssd1306_128x64_i2c\ssd1306_128x64_i2c.ino
несколько штук снизу шевилились и раз даже весь экран ровным засветился ... ща сколько разных примеров не перебираю - всё одна картинка .. статична. Меняется ли "картинка" после перезапуска чт- то не пойму .. помоему одинаковая
А он точно I2C? Чёт не похоже, ног слишком много, похоже что на SPI залочен, там чёт выпаивать надо, ищите, у меня был нормальный с 4 ногами, он точно на IIC лотится, или адрес по IIC определился?
А этот пример попробуйте
// OLED_I2C_Graph_Demo
// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
// web: http://www.RinkyDinkElectronics.com/
//
// A quick demo of how to use my OLED_I2C library.
//
// To use the hardware I2C (TWI) interface of the Arduino you must connect
// the pins as follows:
//
// Arduino Uno/2009:
// ----------------------
// Display: SDA pin -> Arduino Analog 4 or the dedicated SDA pin
// SCL pin -> Arduino Analog 5 or the dedicated SCL pin
//
// Arduino Leonardo:
// ----------------------
// Display: SDA pin -> Arduino Digital 2 or the dedicated SDA pin
// SCL pin -> Arduino Digital 3 or the dedicated SCL pin
//
// Arduino Mega:
// ----------------------
// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA pin
// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL pin
//
// Arduino Due:
// ----------------------
// Display: SDA pin -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin
// SCL pin -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin
//
// The internal pull-up resistors will be activated when using the
// hardware I2C interfaces.
//
// You can connect the OLED display to any available pin but if you use
// any other than what is described above the library will fall back to
// a software-based, TWI-like protocol which will require exclusive access
// to the pins used, and you will also have to use appropriate, external
// pull-up resistors on the data and clock signals.
//
#include <OLED_I2C.h>
OLED myOLED(SDA, SCL, 8);
extern uint8_t SmallFont[];
extern uint8_t logo[];
extern uint8_t The_End[];
extern uint8_t pacman1[];
extern uint8_t pacman2[];
extern uint8_t pacman3[];
extern uint8_t pill[];
float y;
uint8_t* bm;
int pacy;
void setup()
{
myOLED.begin();
myOLED.setFont(SmallFont);
randomSeed(analogRead(7));
}
void loop()
{
myOLED.clrScr();
myOLED.drawBitmap(0, 16, logo, 128, 36);
myOLED.update();
delay(3000);
myOLED.clrScr();
myOLED.print("OLED_I2C", CENTER, 0);
myOLED.print("DEMO", CENTER, 28);
myOLED.drawRect(50, 26, 78, 36);
for (int i=0; i<6; i++)
{
myOLED.drawLine(79, 26+(i*2), 105-(i*3), 26+(i*2));
myOLED.drawLine(22+(i*3), 36-(i*2), 50, 36-(i*2));
}
myOLED.print("(C)2015 by", CENTER, 48);
myOLED.print("Henning Karlsen", CENTER, 56);
myOLED.update();
delay(5000);
myOLED.clrScr();
for (int i=0; i<64; i+=2)
{
myOLED.drawLine(0, i, 127, 63-i);
myOLED.update();
}
for (int i=127; i>=0; i-=2)
{
myOLED.drawLine(i, 0, 127-i, 63);
myOLED.update();
}
delay(2000);
myOLED.clrScr();
myOLED.drawRect(0, 0, 127, 63);
for (int i=0; i<64; i+=4)
{
myOLED.drawLine(0, i, i*2, 63);
myOLED.update();
}
for (int i=0; i<64; i+=4)
{
myOLED.drawLine(127, 63-i, 127-(i*2), 0);
myOLED.update();
}
delay(2000);
myOLED.clrScr();
for (int i=0; i<10; i++)
{
myOLED.drawRoundRect(i*3, i*3, 127-(i*3), 63-(i*3));
myOLED.update();
}
delay(2000);
myOLED.clrScr();
for (int i=0; i<25; i++)
{
myOLED.drawCircle(64, 32, i*3);
myOLED.update();
}
delay(2000);
myOLED.clrScr();
myOLED.drawRect(0, 0, 127, 63);
myOLED.drawLine(0, 31, 127, 31);
myOLED.drawLine(63, 0, 63, 63);
for (int c=0; c<4; c++)
{
for (int i=0; i<128; i++)
{
y=i*0.04974188368183839294232518690191;
myOLED.invPixel(i, (sin(y)*28)+31);
myOLED.update();
delay(10);
}
}
delay(2000);
for (int pc=0; pc<3; pc++)
{
pacy=random(0, 44);
for (int i=-20; i<132; i++)
{
myOLED.clrScr();
for (int p=6; p>((i+20)/20); p--)
myOLED.drawBitmap(p*20-8, pacy+7, pill, 5, 5);
switch(((i+20)/3) % 4)
{
case 0: bm=pacman1;
break;
case 1: bm=pacman2;
break;
case 2: bm=pacman3;
break;
case 3: bm=pacman2;
break;
}
myOLED.drawBitmap(i, pacy, bm, 20, 20);
myOLED.update();
delay(10);
}
}
for (int i=0; i<41; i++)
{
myOLED.clrScr();
myOLED.drawBitmap(22, i-24, The_End, 84, 24);
myOLED.update();
delay(50);
}
myOLED.print("Runtime (ms):", CENTER, 48);
myOLED.printNumI(millis(), CENTER, 56);
myOLED.update();
for (int i=0; i<5; i++)
{
myOLED.invert(true);
delay(1000);
myOLED.invert(false);
delay(1000);
}
}
Не будем дожидаться товарища топикстартера, по интерфейсу его дивайс такой:
То есть SPI, не знаю где товарищ его достал но штука редкая и желанная (кадров на 120 в секунду способна при оптимизации)
И подключать понятно используя соотв. библиотеки
P.S. "OLED LCD". Дичайший лингвистический штамп родом из китайских онлайн торговых площадок, взаимоисключающие параграфы. Это как "двухтактный электроскутер"
То есть SPI, не знаю где товарищ его достал но штука редкая и желанная (кадров на 120 в секунду способна при оптимизации)
Нахрена ж их аж 120. И от того что в него загрузить картинку 120 раз его кадровая развертка не ускорится до 120Гц. Так что 3Д с активными очками тоже не получится ;)
Ценность девайса в другом, в отличии от i2c собрата, из этого можна вычитывать изображение. Что обеспечивает возможность без шума и пыли прорисовывать отдельновзятый пиксель.
На али их валом, но пошти в 2 раза дороже i2c-шных.
Непонял с чего Вы это решили и какой в этом смысл? Глаз не успеет увидеть, экран не успеет отрисовать. Часики перерисовывать 2 раза в сек. чтоб мигало в секундном ритме, графики всякий просто удобней строить если можно выводить точку поверх вычитаного с экрана(но в общем то и без этого можна).
... не знаю нужны ли мне эти 120fps? возможно конечно я поторопился но что есть - то есть :) на счёт редкости не знаю, он был взят по описанию как I2C , а оказался вот такой .. а т.к знаток я ещё тот :) а ютуб наполнен подключениеми именно I2C экранов .. то руководствуясь этими табличками перепаял перемычки и подключил. Было 4SPI
адрес 0x3C .. поймал сканером. И вот в результате имеем звёздное небо .. :) возможно это и красиво :) но хотлось бы более приземленной картинки :)
Попробуйте код и библиотеку, что выше, 100% рабочая
:( попробовал
C:\Windows\Temp\ccZ1PUBx.ltrans0.ltrans.o: In function `main':
ccZ1PUBx.ltrans0.o:(.text.startup+0x256): undefined reference to `logo'
ccZ1PUBx.ltrans0.o:(.text.startup+0x258): undefined reference to `logo'
ccZ1PUBx.ltrans0.o:(.text.startup+0x746): undefined reference to `pacman2'
ccZ1PUBx.ltrans0.o:(.text.startup+0x74a): undefined reference to `pacman2'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7b2): undefined reference to `pill'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7b4): undefined reference to `pill'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7ee): undefined reference to `pacman1'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7f0): undefined reference to `pacman1'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7fc): undefined reference to `pacman3'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7fe): undefined reference to `pacman3'
ccZ1PUBx.ltrans0.o:(.text.startup+0x868): undefined reference to `The_End'
ccZ1PUBx.ltrans0.o:(.text.startup+0x86a): undefined reference to `The_End'
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.
если ткнуть "-" в RST - экран гаснет и больше не загорается. но если после этого нажать ресет .. то изображение появляется но его с каждым новым кадром кособенит. когда может ровно стартануть, а когда сразу криво начинается. т.е. цифры по экрану гуляют сами по себе в скетче просто прибавляется цифра. Если ресетить просто так - звездное небо не пропадает
да что ж это за напасть! :( ... черт же дёрнул меня снова обновится. Ну как же ж ... новая версия :)
изображение опять "перекосило" ... хотя до обновления на этой же НАНе точно было нормально., т.к я новый экран проверял как раз эти скетчем. Подумал вначале, что с самим экраном что-то - ан нет, в УНО оказался залит этот же скетч - он кажет номально.
Подскажите, что произошло и можно ли это както исправить
ПС. Вобще по грамотному обновлятся не потому что выщла новая версия а потому что затребовался функционал отсутствующий в старой. Такое простое правило спасает от весёлых приключений.
А чё, красиво!
Точки шевелятся или статичны?
на дефолтовом примере: c:\Program Files (x86)\Arduino\libraries\Adafruit_SSD1306\examples\ssd1306_128x64_i2c\ssd1306_128x64_i2c.ino
несколько штук снизу шевилились и раз даже весь экран ровным засветился ... ща сколько разных примеров не перебираю - всё одна картинка .. статична. Меняется ли "картинка" после перезапуска чт- то не пойму .. помоему одинаковая
...дата и клок точно не перепутаны? Знаю банально и тупое, но спрошу, чтобы откинуть)
Аппаратное i2c в атмегах - data в А4, clock в А5
...дата и клок точно не перепутаны? Знаю банально и тупое, но спрошу, чтобы откинуть)
Аппаратное i2c в атмегах - data в А4, clock в А5
Нипахоже ниразу. Тогда бы адресовать экран не выходило бы и никогда не менялось бы.
А он точно I2C? Чёт не похоже, ног слишком много, похоже что на SPI залочен, там чёт выпаивать надо, ищите, у меня был нормальный с 4 ногами, он точно на IIC лотится, или адрес по IIC определился?
кстати да, автор, дай пожалуйста фото ног читабельное, потом пойдёт конкретика
Попробуйте код и библиотеку, что выше, 100% рабочая
На картинке oled SPI, а в скетче SDA
На картинке oled SPI, а в скетче SDA
Внатуре ))). Ну то мелочи ;) Питани правильно подано, и даже не 220. )))))
ТС, не расстраивайтесь. Вспомните первый закон Скотта:
«Неважно, что что-то идёт неправильно. Возможно, это хорошо выглядит…».
Не будем дожидаться товарища топикстартера, по интерфейсу его дивайс такой:
То есть SPI, не знаю где товарищ его достал но штука редкая и желанная (кадров на 120 в секунду способна при оптимизации)
И подключать понятно используя соотв. библиотеки
Первый попавшийся гайд по SPI OLED
P.S. "OLED LCD". Дичайший лингвистический штамп родом из китайских онлайн торговых площадок, взаимоисключающие параграфы. Это как "двухтактный электроскутер"
То есть SPI, не знаю где товарищ его достал но штука редкая и желанная (кадров на 120 в секунду способна при оптимизации)
Нахрена ж их аж 120. И от того что в него загрузить картинку 120 раз его кадровая развертка не ускорится до 120Гц. Так что 3Д с активными очками тоже не получится ;)
Ценность девайса в другом, в отличии от i2c собрата, из этого можна вычитывать изображение. Что обеспечивает возможность без шума и пыли прорисовывать отдельновзятый пиксель.
На али их валом, но пошти в 2 раза дороже i2c-шных.
...в этом и красота, часики и графики всяческие топят сотни кадров в секунду, в зависимости от обьёма перерисовки
Непонял с чего Вы это решили и какой в этом смысл? Глаз не успеет увидеть, экран не успеет отрисовать. Часики перерисовывать 2 раза в сек. чтоб мигало в секундном ритме, графики всякий просто удобней строить если можно выводить точку поверх вычитаного с экрана(но в общем то и без этого можна).
Да, экранчик такой как на фото BRUTUS
... не знаю нужны ли мне эти 120fps? возможно конечно я поторопился но что есть - то есть :) на счёт редкости не знаю, он был взят по описанию как I2C , а оказался вот такой .. а т.к знаток я ещё тот :) а ютуб наполнен подключениеми именно I2C экранов .. то руководствуясь этими табличками перепаял перемычки и подключил. Было 4SPI
адрес 0x3C .. поймал сканером. И вот в результате имеем звёздное небо .. :) возможно это и красиво :) но хотлось бы более приземленной картинки :)
Ну так теперь есть кино?
P.S. СПС за табличку по интерфейсам, возможно переделаю свой на spi
P.P.S. Скорость имеет значение в анимации, топорная прокрутка и переходы не особо эстетичное дело
Попробуйте код и библиотеку, что выше, 100% рабочая
:( попробовал
C:\Windows\Temp\ccZ1PUBx.ltrans0.ltrans.o: In function `main':
ccZ1PUBx.ltrans0.o:(.text.startup+0x256): undefined reference to `logo'
ccZ1PUBx.ltrans0.o:(.text.startup+0x258): undefined reference to `logo'
ccZ1PUBx.ltrans0.o:(.text.startup+0x746): undefined reference to `pacman2'
ccZ1PUBx.ltrans0.o:(.text.startup+0x74a): undefined reference to `pacman2'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7b2): undefined reference to `pill'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7b4): undefined reference to `pill'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7ee): undefined reference to `pacman1'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7f0): undefined reference to `pacman1'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7fc): undefined reference to `pacman3'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7fe): undefined reference to `pacman3'
ccZ1PUBx.ltrans0.o:(.text.startup+0x868): undefined reference to `The_End'
ccZ1PUBx.ltrans0.o:(.text.startup+0x86a): undefined reference to `The_End'
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.
если ткнуть "-" в RST - экран гаснет и больше не загорается. но если после этого нажать ресет .. то изображение появляется но его с каждым новым кадром кособенит. когда может ровно стартануть, а когда сразу криво начинается. т.е. цифры по экрану гуляют сами по себе в скетче просто прибавляется цифра. Если ресетить просто так - звездное небо не пропадает
пришел чисто I2C экранчик .. он работает как надо ... а этот видимо надо пробовать возвращать на 4spi ... может хоть там заработает
....и что характерно айтуси дешевле и проще в работе)
....и что характерно айтуси дешевле и проще в работе)
и медленнее чем SPI...
да что ж это за напасть! :( ... черт же дёрнул меня снова обновится. Ну как же ж ... новая версия :)
изображение опять "перекосило" ... хотя до обновления на этой же НАНе точно было нормально., т.к я новый экран проверял как раз эти скетчем. Подумал вначале, что с самим экраном что-то - ан нет, в УНО оказался залит этот же скетч - он кажет номально.
Подскажите, что произошло и можно ли это както исправить
Что обновляли то на новую версию?
ПС. Вобще по грамотному обновлятся не потому что выщла новая версия а потому что затребовался функционал отсутствующий в старой. Такое простое правило спасает от весёлых приключений.
Что обновляли то на новую версию?
arduino-1.6.8-windows.exe на arduino-1.8.0-windows.exe
а ларчик просто открывался :))
в файле ...\libraries\Adafruit_SSD1306\Adafruit_SSD1306.h надо было раскомментировать свой экранчик .. по умолчанию стоял 128_32
#define SSD1306_128_64
// #define SSD1306_128_32
// #define SSD1306_96_16