проблема с OLED дисплеем

normchell
Offline
Зарегистрирован: 03.10.2020

проблема с OLED дисплеем 128х64 1.44 дюйма 

подключаю его по I2C SDA к 4 аналогу а SCK к 5

вгружаю на плату uno пример с библиотеки OLED I2C

// OLED_I2C_3D_Cube
// 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 rotate a 3D cube.
// The average FPS (Frames Per Second) will be displayed on the screen.
//
// NOTE: The FPS counter will overflow if left for an extended amount of time.
//
// 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[];

double vectors[8][3] = {{20, 20, 20},{-20, 20, 20},{-20, -20, 20},{20, -20, 20},{20, 20, -20},{-20, 20, -20},{-20, -20, -20},{20, -20, -20}};

double perspective = 100.0f;
int deltaX, deltaY, deltaZ, iter = 0;
long stime, fps = 0, frames = 0;

void setup()
{
  randomSeed(analogRead(0));

  myOLED.begin();
  myOLED.setFont(SmallFont);
}

void loop()
{
  stime = micros();
  myOLED.clrScr();
  drawVectors();
  if (iter == 0)
  {
    deltaX = random(7) - 3;
    deltaY = random(7) - 3;
    deltaZ = random(7) - 3;
    iter   = random(250) + 5;
  }
  rotateX(deltaX);
  rotateY(deltaY);
  rotateZ(deltaZ);
  iter--;
  fps += 1000000 / (micros()-stime);
  frames++;
  myOLED.printNumI(fps / frames, 0, 0, 3);  // Print average FPS on screen
  myOLED.update();
}

int translateX(double x, double z)
{
  return (int)((x + 64) + (z * (x / perspective)));
}

int translateY(double y, double z)
{
  return (int)((y + 32) + (z * (y / perspective)));
}

void rotateX(int angle)
{
  double rad, cosa, sina, Yn, Zn;
 
  rad = angle * PI / 180;
  cosa = cos(rad);
  sina = sin(rad);
  for (int i = 0; i < 8; i++)
  {
    Yn = (vectors[i][1] * cosa) - (vectors[i][2] * sina);
    Zn = (vectors[i][1] * sina) + (vectors[i][2] * cosa);
    vectors[i][1] = Yn;
    vectors[i][2] = Zn;
  }
}

void rotateY(int angle)
{
  double rad, cosa, sina, Xn, Zn;
 
  rad = angle * PI / 180;
  cosa = cos(rad);
  sina = sin(rad);
  for (int i = 0; i < 8; i++)
  {
    Xn = (vectors[i][0] * cosa) - (vectors[i][2] * sina);
    Zn = (vectors[i][0] * sina) + (vectors[i][2] * cosa);
    vectors[i][0] = Xn;
    vectors[i][2] = Zn;
  }
}

void rotateZ(int angle)
{
  double rad, cosa, sina, Xn, Yn;
 
  rad = angle * PI / 180;
  cosa = cos(rad);
  sina = sin(rad);
  for (int i = 0; i < 8; i++)
  {
    Xn = (vectors[i][0] * cosa) - (vectors[i][1] * sina);
    Yn = (vectors[i][0] * sina) + (vectors[i][1] * cosa);
    vectors[i][0] = Xn;
    vectors[i][1] = Yn;
  }
}

void drawVectors()
{
  myOLED.drawLine(translateX(vectors[0][0], vectors[0][2]), translateY(vectors[0][1], vectors[0][2]), translateX(vectors[1][0], vectors[1][2]), translateY(vectors[1][1], vectors[1][2]));
  myOLED.drawLine(translateX(vectors[1][0], vectors[1][2]), translateY(vectors[1][1], vectors[1][2]), translateX(vectors[2][0], vectors[2][2]), translateY(vectors[2][1], vectors[2][2]));
  myOLED.drawLine(translateX(vectors[2][0], vectors[2][2]), translateY(vectors[2][1], vectors[2][2]), translateX(vectors[3][0], vectors[3][2]), translateY(vectors[3][1], vectors[3][2]));
  myOLED.drawLine(translateX(vectors[3][0], vectors[3][2]), translateY(vectors[3][1], vectors[3][2]), translateX(vectors[0][0], vectors[0][2]), translateY(vectors[0][1], vectors[0][2]));
  myOLED.drawLine(translateX(vectors[4][0], vectors[4][2]), translateY(vectors[4][1], vectors[4][2]), translateX(vectors[5][0], vectors[5][2]), translateY(vectors[5][1], vectors[5][2]));
  myOLED.drawLine(translateX(vectors[5][0], vectors[5][2]), translateY(vectors[5][1], vectors[5][2]), translateX(vectors[6][0], vectors[6][2]), translateY(vectors[6][1], vectors[6][2]));
  myOLED.drawLine(translateX(vectors[6][0], vectors[6][2]), translateY(vectors[6][1], vectors[6][2]), translateX(vectors[7][0], vectors[7][2]), translateY(vectors[7][1], vectors[7][2]));
  myOLED.drawLine(translateX(vectors[7][0], vectors[7][2]), translateY(vectors[7][1], vectors[7][2]), translateX(vectors[4][0], vectors[4][2]), translateY(vectors[4][1], vectors[4][2]));
  myOLED.drawLine(translateX(vectors[0][0], vectors[0][2]), translateY(vectors[0][1], vectors[0][2]), translateX(vectors[4][0], vectors[4][2]), translateY(vectors[4][1], vectors[4][2]));
  myOLED.drawLine(translateX(vectors[1][0], vectors[1][2]), translateY(vectors[1][1], vectors[1][2]), translateX(vectors[5][0], vectors[5][2]), translateY(vectors[5][1], vectors[5][2]));
  myOLED.drawLine(translateX(vectors[2][0], vectors[2][2]), translateY(vectors[2][1], vectors[2][2]), translateX(vectors[6][0], vectors[6][2]), translateY(vectors[6][1], vectors[6][2]));
  myOLED.drawLine(translateX(vectors[3][0], vectors[3][2]), translateY(vectors[3][1], vectors[3][2]), translateX(vectors[7][0], vectors[7][2]), translateY(vectors[7][1], vectors[7][2]));
}

в итоге должен быть вращающийся куб

(питание 5 вольт)

normchell
Offline
Зарегистрирован: 03.10.2020

небольшая поправка: дисплей 1.3 дюйма с Китая

Komandir
Онлайн
Зарегистрирован: 18.08.2018

Может начать с более простого примера ?

normchell
Offline
Зарегистрирован: 03.10.2020

я все примеры перепробовал!

никакой не работает правильно

sadman41
Offline
Зарегистрирован: 19.10.2016

Это нормальное развитие событий для того случая, когда со неизвестным дисплеем используют случайный скетч.

normchell
Offline
Зарегистрирован: 03.10.2020

дисплей известен

библиотеки и примеры известные

Komandir
Онлайн
Зарегистрирован: 18.08.2018

сам не сталкивался, но вроде как есть 1306 подобные дисплеи и там что то не так ...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

вы в этой строке уверены? проверяли?
OLED  myOLED(SDA, SCL, 8);

sadman41
Offline
Зарегистрирован: 19.10.2016

Если дисплей известен, библиотеки и примеры тоже, то проблем не может быть по-умолчанию и помогать тут нечем - следует просто выкинуть неисправный модуль и другой заказать.

Впрочем, гугл не так уверен в чипсете дисплея. Надо бы его на перевоспитание устроить сюда - тут каждому новичку всегда всё известно и сомнений никогда не возникает.

 

normchell
Offline
Зарегистрирован: 03.10.2020

можно! но это уже воторой такой дисплей с китая пришёл

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Библиотеку резать надо. Или фруктовую взять.

svm
Offline
Зарегистрирован: 06.11.2016

Я тоже мучал дисплей на 1306. Из четырех библиотек, корректно пошла одна.

http://arduino.ru/forum/proekty/universalnyi-arduino-probnik?page=3#comment-360644 

normchell
Offline
Зарегистрирован: 03.10.2020

можно пожалуйста ссылку на саму библиотеку

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Однако используемая библиотека для дисплея с чипом SSD1306, а на картинке SH1106.
Если ТС не видит разницу, зачем слепошарому вообще дисплей ?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Kakmyc пишет:
Однако используемая библиотека для дисплея с чипом SSD1306, а на картинке SH1106. Если ТС не видит разницу, зачем слепошарому вообще дисплей ?

Дык кто-ж на это смотрит? Екран он и есть екран. Любая библиотека должна поддерживать ;)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016