نمایش نتایج: از 1 به 9 از 9

موضوع: ماژول نمایشگر 12864 oled دارای ارتباط i2c

  1. #1
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    3,806

    ماژول نمایشگر 12864 oled دارای ارتباط i2c

    ماژول نمایشگر 12864 OLED دارای ارتباط I2C

    کتابخانه های مورد استفاده ضمیمه شده است
    کد:
    #include <Wire.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    
    
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    
    
    #define NUMFLAKES 10
    #define XPOS 0
    #define YPOS 1
    #define DELTAY 2
    
    
    
    
    #define LOGO16_GLCD_HEIGHT 16 
    #define LOGO16_GLCD_WIDTH  16 
    static const unsigned char PROGMEM logo16_glcd_bmp[] =
    { B00000000, B11000000,
      B00000001, B11000000,
      B00000001, B11000000,
      B00000011, B11100000,
      B11110011, B11100000,
      B11111110, B11111000,
      B01111110, B11111111,
      B00110011, B10011111,
      B00011111, B11111100,
      B00001101, B01110000,
      B00011011, B10100000,
      B00111111, B11100000,
      B00111111, B11110000,
      B01111100, B11110000,
      B01110000, B01110000,
      B00000000, B00110000 };
    
    
    
    
    
    
    void setup()   {                
      Serial.begin(9600);
    
    
      // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)
      // init done
      
      // Show image buffer on the display hardware.
      // Since the buffer is intialized with an Adafruit splashscreen
      // internally, this will display the splashscreen.
      display.display();
      delay(2000);
    
    
      // Clear the buffer.
      display.clearDisplay();
    
    
      // draw a single pixel
      display.drawPixel(10, 10, WHITE);
      // Show the display buffer on the hardware.
      // NOTE: You _must_ call display after making any drawing commands
      // to make them visible on the display hardware!
      display.display();
      delay(2000);
      display.clearDisplay();
    
    
      // draw many lines
      testdrawline();
      display.display();
      delay(2000);
      display.clearDisplay();
    
    
      // draw rectangles
      testdrawrect();
      display.display();
      delay(2000);
      display.clearDisplay();
    
    
      // draw multiple rectangles
      testfillrect();
      display.display();
      delay(2000);
      display.clearDisplay();
    
    
      // draw mulitple circles
      testdrawcircle();
      display.display();
      delay(2000);
      display.clearDisplay();
    
    
      // draw a white circle, 10 pixel radius
      display.fillCircle(display.width()/2, display.height()/2, 10, WHITE);
      display.display();
      delay(2000);
      display.clearDisplay();
    
    
      testdrawroundrect();
      delay(2000);
      display.clearDisplay();
    
    
      testfillroundrect();
      delay(2000);
      display.clearDisplay();
    
    
      testdrawtriangle();
      delay(2000);
      display.clearDisplay();
       
      testfilltriangle();
      delay(2000);
      display.clearDisplay();
    
    
      // draw the first ~12 characters in the font
      testdrawchar();
      display.display();
      delay(2000);
      display.clearDisplay();
    
    
      // draw scrolling text
      testscrolltext();
      delay(2000);
      display.clearDisplay();
    
    
      // text display tests
      display.setTextSize(1);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("Hello, world!");
      display.setTextColor(BLACK, WHITE); // 'inverted' text
      display.println(3.141592);
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.print("0x"); display.println(0xDEADBEEF, HEX);
      display.display();
      delay(2000);
      display.clearDisplay();
    
    
      // miniature bitmap display
      display.drawBitmap(30, 16,  logo16_glcd_bmp, 16, 16, 1);
      display.display();
      delay(1);
    
    
      // invert the display
      display.invertDisplay(true);
      delay(1000); 
      display.invertDisplay(false);
      delay(1000); 
      display.clearDisplay();
    
    
      // draw a bitmap icon and 'animate' movement
      testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH);
    }
    
    
    
    
    void loop() {
      
    }
    
    
    
    
    void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
      uint8_t icons[NUMFLAKES][3];
     
      // initialize
      for (uint8_t f=0; f< NUMFLAKES; f++) {
        icons[f][XPOS] = random(display.width());
        icons[f][YPOS] = 0;
        icons[f][DELTAY] = random(5) + 1;
        
        Serial.print("x: ");
        Serial.print(icons[f][XPOS], DEC);
        Serial.print(" y: ");
        Serial.print(icons[f][YPOS], DEC);
        Serial.print(" dy: ");
        Serial.println(icons[f][DELTAY], DEC);
      }
    
    
      while (1) {
        // draw each icon
        for (uint8_t f=0; f< NUMFLAKES; f++) {
          display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, WHITE);
        }
        display.display();
        delay(200);
        
        // then erase it + move it
        for (uint8_t f=0; f< NUMFLAKES; f++) {
          display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, BLACK);
          // move it
          icons[f][YPOS] += icons[f][DELTAY];
          // if its gone, reinit
          if (icons[f][YPOS] > display.height()) {
            icons[f][XPOS] = random(display.width());
            icons[f][YPOS] = 0;
            icons[f][DELTAY] = random(5) + 1;
          }
        }
       }
    }
    
    
    
    
    void testdrawchar(void) {
      display.setTextSize(1);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
    
    
      for (uint8_t i=0; i < 168; i++) {
        if (i == '\n') continue;
        display.write(i);
        if ((i > 0) && (i % 21 == 0))
          display.println();
      }    
      display.display();
      delay(1);
    }
    
    
    void testdrawcircle(void) {
      for (int16_t i=0; i<display.height(); i+=2) {
        display.drawCircle(display.width()/2, display.height()/2, i, WHITE);
        display.display();
        delay(1);
      }
    }
    
    
    void testfillrect(void) {
      uint8_t color = 1;
      for (int16_t i=0; i<display.height()/2; i+=3) {
        // alternate colors
        display.fillRect(i, i, display.width()-i*2, display.height()-i*2, color%2);
        display.display();
        delay(1);
        color++;
      }
    }
    
    
    void testdrawtriangle(void) {
      for (int16_t i=0; i<min(display.width(),display.height())/2; i+=5) {
        display.drawTriangle(display.width()/2, display.height()/2-i,
                         display.width()/2-i, display.height()/2+i,
                         display.width()/2+i, display.height()/2+i, WHITE);
        display.display();
        delay(1);
      }
    }
    
    
    void testfilltriangle(void) {
      uint8_t color = WHITE;
      for (int16_t i=min(display.width(),display.height())/2; i>0; i-=5) {
        display.fillTriangle(display.width()/2, display.height()/2-i,
                         display.width()/2-i, display.height()/2+i,
                         display.width()/2+i, display.height()/2+i, WHITE);
        if (color == WHITE) color = BLACK;
        else color = WHITE;
        display.display();
        delay(1);
      }
    }
    
    
    void testdrawroundrect(void) {
      for (int16_t i=0; i<display.height()/2-2; i+=2) {
        display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, WHITE);
        display.display();
        delay(1);
      }
    }
    
    
    void testfillroundrect(void) {
      uint8_t color = WHITE;
      for (int16_t i=0; i<display.height()/2-2; i+=2) {
        display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, color);
        if (color == WHITE) color = BLACK;
        else color = WHITE;
        display.display();
        delay(1);
      }
    }
       
    void testdrawrect(void) {
      for (int16_t i=0; i<display.height()/2; i+=2) {
        display.drawRect(i, i, display.width()-2*i, display.height()-2*i, WHITE);
        display.display();
        delay(1);
      }
    }
    
    
    void testdrawline() {  
      for (int16_t i=0; i<display.width(); i+=4) {
        display.drawLine(0, 0, i, display.height()-1, WHITE);
        display.display();
        delay(1);
      }
      for (int16_t i=0; i<display.height(); i+=4) {
        display.drawLine(0, 0, display.width()-1, i, WHITE);
        display.display();
        delay(1);
      }
      delay(250);
      
      display.clearDisplay();
      for (int16_t i=0; i<display.width(); i+=4) {
        display.drawLine(0, display.height()-1, i, 0, WHITE);
        display.display();
        delay(1);
      }
      for (int16_t i=display.height()-1; i>=0; i-=4) {
        display.drawLine(0, display.height()-1, display.width()-1, i, WHITE);
        display.display();
        delay(1);
      }
      delay(250);
      
      display.clearDisplay();
      for (int16_t i=display.width()-1; i>=0; i-=4) {
        display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE);
        display.display();
        delay(1);
      }
      for (int16_t i=display.height()-1; i>=0; i-=4) {
        display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE);
        display.display();
        delay(1);
      }
      delay(250);
    
    
      display.clearDisplay();
      for (int16_t i=0; i<display.height(); i+=4) {
        display.drawLine(display.width()-1, 0, 0, i, WHITE);
        display.display();
        delay(1);
      }
      for (int16_t i=0; i<display.width(); i+=4) {
        display.drawLine(display.width()-1, 0, i, display.height()-1, WHITE); 
        display.display();
        delay(1);
      }
      delay(250);
    }
    
    
    void testscrolltext(void) {
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(10,0);
      display.clearDisplay();
      display.println("scroll");
      display.display();
      delay(1);
     
      display.startscrollright(0x00, 0x0F);
      delay(2000);
      display.stopscroll();
      delay(1000);
      display.startscrollleft(0x00, 0x0F);
      delay(2000);
      display.stopscroll();
      delay(1000);    
      display.startscrolldiagright(0x00, 0x07);
      delay(2000);
      display.startscrolldiagleft(0x00, 0x07);
      delay(2000);
      display.stopscroll();
    }
    فایل های پیوست شده فایل های پیوست شده

  2. #2
    Junior Member
    تاریخ عضویت
    Oct 2016
    نوشته ها
    1
    با سلام و خسته نباشید
    نکته 1 لطفا طریقه سیم بندی این ماژول رو هم اظافه کنین
    من یکی خریدم 6 تا سیم داره GND,VCC,SCL,SDA,RST,D/C
    ولی وقتی با I2CScanner تست کردم هیچ ماژولی پیدا نکرد
    ایا اون دوتا سیم دیگه رو هم باید به طریقی ازشون استفاده کنم؟؟؟
    ظاهرا یه مدل 7 سیمه هم داره که سیماش اینطوریه
    GND,VCC,D0,D1,RST,DC,CS
    یه توضیح هم راجع به این مدل ارائه می کنین؟؟
    نکته 2 این ماژول ها فقط 3.3 ولتی هستن روی برد برای خودشون رگولاتور دارن پس ترجیحا از 3.3 استفاده کنیم بهتره

  3. #3
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    3,806
    نقل قول نوشته اصلی توسط nia_trap نمایش پست ها
    با سلام و خسته نباشید
    نکته 1 لطفا طریقه سیم بندی این ماژول رو هم اظافه کنین
    من یکی خریدم 6 تا سیم داره GND,VCC,SCL,SDA,RST,D/C
    ولی وقتی با I2CScanner تست کردم هیچ ماژولی پیدا نکرد
    ایا اون دوتا سیم دیگه رو هم باید به طریقی ازشون استفاده کنم؟؟؟
    ظاهرا یه مدل 7 سیمه هم داره که سیماش اینطوریه
    GND,VCC,D0,D1,RST,DC,CS
    یه توضیح هم راجع به این مدل ارائه می کنین؟؟
    نکته 2 این ماژول ها فقط 3.3 ولتی هستن روی برد برای خودشون رگولاتور دارن پس ترجیحا از 3.3 استفاده کنیم بهتره
    سلام
    این که پین d/c داره یه توهم بوجود میاره که ارتباطش i2c نباشه . و این که با کد I2CScanner هم بهش آدرسی اختصاص نداده این باور رو قوی می کنه.
    یقینا باید از اون دو تا پین دیگه (ریست و DC ) استفاده کنید.

    کلا وقتی تعداد پینهای مورد نیازش از SCL و SDA فراتر بره دیگه نمیشه گفت که با i2c راه اندازی میشه حتی با وجود این که این دو تا اسم رو استفاده کرده باشه .

    باید دید رگولاتور چجوری تو مدار قرار گرفته .
    اگر پیشنهاد خودش 3.3 هست فقط 3.3 بهش بدید

  4. #4
    Junior Member
    تاریخ عضویت
    Jan 2016
    نوشته ها
    11
    سلام.

    لطفا عنایت کنید که این نمایشگر پین ریست (oled_reset) ندارد، اگر به عکس آن در سایت فروشگاه هم مراجعه کنید این موضوع واضح می شود: فقط ۴ پین دارد:vcc, gnd, scl, sda

    با تشکر

  5. #5
    Junior Member
    تاریخ عضویت
    Oct 2017
    نوشته ها
    6
    برنامه کامپایل نمیشه و خطای زیر رو میده چرا؟؟؟
    Arduino: 1.6.12 (Windows 10), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

    C:\Users\ATC\AppData\Local\Temp\arduino_modified_s ketch_377262\sketch_oct12a.ino:2:26: fatal error: Adafruit_GFX.h: No such file or directory

    #include <Adafruit_GFX.h>

    ^

    compilation terminated.

    exit status 1
    Error compiling for board Arduino/Genuino Mega or Mega 2560.

    This report would have more information with
    "Show verbose output during compilation"
    option enabled in File -> Preferences.

  6. #6
    Senior Member
    تاریخ عضویت
    Feb 2017
    نوشته ها
    101
    نقل قول نوشته اصلی توسط mohammadbager نمایش پست ها
    برنامه کامپایل نمیشه و خطای زیر رو میده چرا؟؟؟
    Arduino: 1.6.12 (Windows 10), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

    C:\Users\ATC\AppData\Local\Temp\arduino_modified_s ketch_377262\sketch_oct12a.ino:2:26: fatal error: Adafruit_GFX.h: No such file or directory

    #include <Adafruit_GFX.h>

    ^

    compilation terminated.

    exit status 1
    Error compiling for board Arduino/Genuino Mega or Mega 2560.

    This report would have more information with
    "Show verbose output during compilation"
    option enabled in File -> Preferences.
    کتابخونه رو در آردوینو نصب نکردید اما صدا زدید .

  7. #7
    Junior Member
    تاریخ عضویت
    Oct 2017
    نوشته ها
    6
    میشه آموزش کد نویسی برای این نوع نمایشگر رو هم بزارید ؟؟

  8. #8
    Junior Member
    تاریخ عضویت
    May 2015
    نوشته ها
    14
    سلام، بلاخره 3.3 ولت هستندیا 5 ولت؟ در فروشگاه نوشته تا 6 ولت هم میشه بهش ولتاژ داد!
    و اینکه ایا مقاومت پول آپ باید بذاریم واسه دو تا پایه دیتا؟
    ویرایش توسط pedram032 : 11-15-2017 در ساعت 09:17 AM

  9. #9
    Member
    تاریخ عضویت
    Jan 2015
    محل سکونت
    Somewhere in the milky way galaxy
    نوشته ها
    78
    نقل قول نوشته اصلی توسط pedram032 نمایش پست ها
    سلام، بلاخره 3.3 ولت هستندیا 5 ولت؟ در فروشگاه نوشته تا 6 ولت هم میشه بهش ولتاژ داد!
    و اینکه ایا مقاومت پول آپ باید بذاریم واسه دو تا پایه دیتا؟
    من این ماژول رو با یک باطری سکه ای cr2032 که ولتاژش ۳ولت بیشتر نیست راه اندازی کردم. شما هر ماژولی رو که میخوای راه اندازی کنی و اطمینان به ولتاژ ورودیش نداری از ۳.۳ ولت شروع کن.
    Your problem is in the code you didn't upload...

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO