SSD1306, DIGISparkOLED не работает с teensy3.2

OLED-дисплей не работает с платой teensy3.2, но он отлично работает с Arduino UNO с тем же кодом, что и ниже:

#include <U8glib.h>

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);  // Display which does 
not send AC
int frame=0;
const uint8_t frame1[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 
0x3F, 0xFF, 0xFF, 0x80,
0x30, 0x00, 0x01, 0x80, 0x33, 0xFF, 0x81, 0xC0, 0x33, 0xFF, 0x81, 0xE0, 
0x33, 0xFF, 0x81, 0xE0,
0x33, 0xFF, 0x81, 0xE0, 0x33, 0xFF, 0x81, 0xE0, 0x33, 0xFF, 0x81, 0xE0, 
0x33, 0xFF, 0x81, 0xE0,
0x33, 0xFF, 0x81, 0xE0, 0x33, 0xFF, 0x81, 0xC0, 0x30, 0x00, 0x01, 0x80, 
0x3F, 0xFF, 0xFF, 0x80,
0x3F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,  
 };

const uint8_t frame2[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0F, 0x00, 
0x00, 0x09, 0x80, 0x00,
0x08, 0xE0, 0x00, 0x08, 0x38, 0x00, 0x08, 0x1C, 0x0C, 0x08, 0x0F, 0x06, 
0x08, 0x1C, 0x03, 0x88,
0x70, 0x00, 0xC8, 0xE0, 0x00, 0x79, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x1E, 
0x00, 0x00, 0x79, 0x80,
0x00, 0xC8, 0xE0, 0x03, 0x88, 0x70, 0x06, 0x08, 0x1C, 0x0C, 0x08, 0x0F, 
0x00, 0x08, 0x1C, 0x00,
0x08, 0x38, 0x00, 0x08, 0xE0, 0x00, 0x09, 0xC0, 0x00, 0x0F, 0x00, 0x00, 
0x0C, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 
};

const uint8_t frame3 [] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 
0x00, 0x01, 0x80, 0x00,
0x00, 0x01, 0xC0, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x03, 0xC0, 0x00, 
0x00, 0x03, 0xC0, 0x00,
0x00, 0x03, 0xC0, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x02, 0x40, 0x00, 
0x00, 0x06, 0x40, 0x00,
0x00, 0x06, 0x60, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x06, 0x60, 0x00, 
0x00, 0x04, 0x60, 0x00,
0x00, 0x0C, 0x60, 0x00, 0x00, 0x0C, 0x60, 0x00, 0x07, 0xFC, 0x61, 0xFC, 
0x07, 0xF8, 0x33, 0xFC,
0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 
0x00, 0x00, 0x33, 0x00,
0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x3E, 0x00, 
0x00, 0x00, 0x1E, 0x00,
0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 
0x00, 0x00, 0x1C, 0x00,
0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
};


const uint8_t frame4[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x01, 0xFF, 
0xF8, 0x00, 0x00, 0x07,
0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 
0x80, 0x00, 0x7F, 0xFF,
0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xF0, 
0x01, 0xFF, 0xFF, 0xFE,
0xF8, 0x03, 0xFF, 0xFF, 0xFC, 0x78, 0x03, 0xFF, 0xFF, 0xF8, 0x7C, 0x07, 
0xFF, 0xFF, 0xF0, 0xFC,
0x07, 0xFF, 0xFF, 0xE1, 0xFC, 0x0F, 0xFF, 0xFF, 0xC3, 0xFE, 0x0F, 0xFF, 
0xFF, 0x87, 0xFE, 0x0F,
0xFF, 0xFF, 0x0F, 0xFE, 0x0F, 0xF3, 0xFE, 0x1F, 0xFE, 0x0F, 0xE1, 0xFC, 
0x3F, 0xFE, 0x0F, 0xE0,
0xF8, 0x7F, 0xFE, 0x0F, 0xF0, 0x70, 0xFF, 0xFE, 0x0F, 0xF8, 0x21, 0xFF, 
0xFE, 0x0F, 0xFC, 0x03,
0xFF, 0xFE, 0x07, 0xFE, 0x07, 0xFF, 0xFC, 0x07, 0xFF, 0x0F, 0xFF, 0xFC, 
0x07, 0xFF, 0x9F, 0xFF,
0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xFF, 0xF8, 0x01, 
0xFF, 0xFF, 0xFF, 0xF0,
0x00, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 
0xFF, 0xFF, 0x80, 0x00,
0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFF, 
0xF8, 0x00, 0x00, 0x00,
0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
};
void setup(void) {
}

void loop(void) {
u8g.firstPage();
 do{
  draw();
 }while(u8g.nextPage());
  frame++;
  if(frame == 13)
  frame=0;
  delay(1000);
  }
void draw(){
 if(frame == 0 )
 {  u8g.drawBitmapP(0,0,4,20,frame1);
    u8g.drawBitmapP(103,0,3.5,28, frame2); 
    u8g.setFont(u8g_font_helvR24);
    u8g.setColorIndex(1);
    u8g.drawStr(20,45,"11:45");
    u8g.setFont(u8g_font_helvB12);
    u8g.drawStr(100,60,"AM");
 }
 if(frame == 1 )
 { u8g.setFont(u8g_font_profont22);
   u8g.setColorIndex(1);
   u8g.drawStr(0,20,"Heart Rate");
   u8g.setFont(u8g_font_helvR24);
   u8g.drawStr(25,60,"75"); 
   u8g.setFont(u8g_font_helvB12);
   u8g.drawStr(90,60,"BPM");
 }   
 if(frame == 2 )
 {  u8g.setFont(u8g_font_profont22);
    u8g.setColorIndex(1);
    u8g.drawStr(10,20,"Analysing");
    u8g.drawBitmap(10,30,4,32, frame3);
    u8g.setFont(u8g_font_helvR24);
    u8g.setColorIndex(1);
    u8g.drawStr(50,58,"10");
    u8g.setFont(u8g_font_profont22);
    u8g.drawStr(90,58,"sec");
  } 
   if(frame == 3 )
 {  u8g.setFont(u8g_font_profont22);
    u8g.setColorIndex(1);
    u8g.drawStr(10,20,"Analysing");
    u8g.drawBitmap(10,30,4,32, frame3);
    u8g.setFont(u8g_font_helvR24);
    u8g.setColorIndex(1);
    u8g.drawStr(60,58,"9");
    u8g.setFont(u8g_font_profont22);
    u8g.drawStr(90,58,"sec");
   } 
  if(frame == 4 )
  {  u8g.setFont(u8g_font_profont22);
     u8g.setColorIndex(1);
    u8g.drawStr(10,20,"Analysing");
    u8g.drawBitmap(10,30,4,32, frame3);
    u8g.setFont(u8g_font_helvR24);
    u8g.setColorIndex(1);
    u8g.drawStr(60,58,"8");
    u8g.setFont(u8g_font_profont22);
    u8g.drawStr(90,58,"sec");
  } 
  if(frame == 5 )
  {  u8g.setFont(u8g_font_profont22);
     u8g.setColorIndex(1);
     u8g.drawStr(10,20,"Analysing");
     u8g.drawBitmap(10,30,4,32, frame3);
     u8g.setFont(u8g_font_helvR24);
     u8g.setColorIndex(1);
     u8g.drawStr(60,58,"7");
     u8g.setFont(u8g_font_profont22);
     u8g.drawStr(90,58,"sec");
   } 
   if(frame == 6 )
   {  u8g.setFont(u8g_font_profont22);
      u8g.setColorIndex(1);
      u8g.drawStr(10,20,"Analysing");
      u8g.drawBitmap(10,30,4,32, frame3);
      u8g.setFont(u8g_font_helvR24);
      u8g.setColorIndex(1);
      u8g.drawStr(60,58,"6");
      u8g.setFont(u8g_font_profont22);
      u8g.drawStr(90,58,"sec");
     } 
   if(frame == 7 )
   {  u8g.setFont(u8g_font_profont22);
      u8g.setColorIndex(1);
      u8g.drawStr(10,20,"Analysing");
      u8g.drawBitmap(10,30,4,32, frame3);
      u8g.setFont(u8g_font_helvR24);
      u8g.setColorIndex(1);
      u8g.drawStr(60,58,"5");
      u8g.setFont(u8g_font_profont22);
      u8g.drawStr(90,58,"sec");
     } 
    if(frame == 8 )
    {  u8g.setFont(u8g_font_profont22);
       u8g.setColorIndex(1);
       u8g.drawStr(10,20,"Analysing");
       u8g.drawBitmap(10,30,4,32, frame3);
       u8g.setFont(u8g_font_helvR24);
       u8g.setColorIndex(1);
       u8g.drawStr(60,58,"4");
       u8g.setFont(u8g_font_profont22);
       u8g.drawStr(90,58,"sec");
      } 
     if(frame == 9 )
      {  u8g.setFont(u8g_font_profont22);
         u8g.setColorIndex(1);
         u8g.drawStr(10,20,"Analysing");
         u8g.drawBitmap(10,30,4,32, frame3);
         u8g.setFont(u8g_font_helvR24);
         u8g.setColorIndex(1);
         u8g.drawStr(60,58,"3");
         u8g.setFont(u8g_font_profont22);
         u8g.drawStr(90,58,"sec");
        } 
        if(frame == 10 )
       {  u8g.setFont(u8g_font_profont22);
          u8g.setColorIndex(1);
          u8g.drawStr(10,20,"Analysing");
          u8g.drawBitmap(10,30,4,32, frame3);
          u8g.setFont(u8g_font_helvR24);
          u8g.setColorIndex(1);
          u8g.drawStr(60,58,"2");
          u8g.setFont(u8g_font_profont22);
          u8g.drawStr(90,58,"sec");
        } 
      if(frame == 11 )
      {u8g.setFont(u8g_font_profont22);
       u8g.setColorIndex(1);
       u8g.drawStr(10,20,"Analysing");
       u8g.drawBitmap(10,30,4,32, frame3);
       u8g.setFont(u8g_font_helvR24);
       u8g.setColorIndex(1);
       u8g.drawStr(60,58,"1");
       u8g.setFont(u8g_font_profont22);
       u8g.drawStr(90,58,"sec");
       } 
      if(frame == 12)
      {u8g.drawBitmapP(45,0,5.375,43, frame4);
       u8g.setFont(u8g_font_profont22);
       u8g.setColorIndex(1);
       u8g.drawStr(45,58,"Done");
      } 
      }

Их нет ошибок компиляции. OLED даже не включается. И при сканировании адрес выходит 0X3C. Я много искал в Google, но я думаю, что их и проблема в связи I2C. Пожалуйста, помогите мне.

1 ответ

@vasu Привет У меня была такая же проблема, но, пожалуйста, проверьте, нет ли каких-либо аппаратных сбоев, прежде чем следовать моему ответу. У oled-дисплея, который я купил, был только VCC-GND-SCL-SDA. Так что у меня нет PIN-кода сброса здесь. Но библиотека oled изначально пытается получить высокий сброс PIN-кода при запуске. Так как у меня нет контакта сброса, он сидит там и ждет сброса HIGH. Таким образом, чтобы инициализировать ваш oled-дисплей без сброса, попробуйте это в файле эскиза Arduino.

 //1-->Manually set HIGH to digitally assigned reset pin

        pinMode(A4, OUTPUT);  //A4 is reset pin assigned programmatically (for example)
        digitalWrite(A4, HIGH);       



    //2-->Try changing your init to this

        U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);

        //As this will be the right one to define from the user manual shown in the link
        //https://reprap.org/forum/file.php?267,file=54605

Попробуйте выше и дайте мне знать, как все прошло.

ура

Другие вопросы по тегам