/*********************************************************************
This is an example for our Monochrome OLEDs based on SH110X drivers
This example is for a 128x64 size display using SPi to communicate
5 pins are required to interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
SPi SH1106 modified by Rupert Hirst 12/09/21
*********************************************************************/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
#define OLED_MOSI 11
#define OLED_CLK 13
#define OLED_DC 9
#define OLED_CS 10
#define OLED_RST 8
// Create the OLED display
Adafruit_SH1106G display = Adafruit_SH1106G(128, 64, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RST, OLED_CS);
#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);
display.begin(0, true); // Initiate OLED
display.display(); // Display splashscreen
delay(2000);
display.clearDisplay();
// Draw a single pixel
display.drawPixel(10, 10, SH110X_WHITE);
display.display();
delay(2000);
display.clearDisplay();
// Draw many lines
testdrawcircle;
display.display();
delay(2000);
display.clearDisplay();
// Draw rectangles
testfillrect;
display.display();
delay(2000);
display.clearDisplay();
// Draw multiple rectangles
testfillrect();
display.display();
delay(2000);
display.clearDisplay();
// Draw multiple circles
testdrawcircle();
display.display();
delay(2000);
display.clearDisplay();
// Draw a white circle with 10-pixel radius
display.fillCircle(display.width() / 2, display.height() / 2, 10, SH110X_WHITE);
display.display();
delay(2000);
display.clearDisplay();
//testdrawrcircle
delay(2000);
display.clearDisplay();
//testfillrect
delay(2000);
display.clearDisplay();
// testdrawtcircle
delay(2000);
display.clearDisplay();
//testfillrect;
delay(2000);
display.clearDisplay();
// Draw the first ~12 characters in the font
//testdrawchar();
display.display();
delay(2000);
display.clearDisplay();
// Text display tests
display.setTextSize(1);
display.setTextColor(SH110X_WHITE);
display.setCursor(0, 0);
display.println("Failure is always an option");
display.setTextColor(SH110X_BLACK, SH110X_WHITE); // 'inverted' text
display.println(3.141592);
display.setTextSize(2);
display.setTextColor(SH110X_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, SH110X_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, SH110X_BLACK);
// Move it
icons[f][YPOS] += icons[f][DELTAY];
// If it's 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()
{
display.setTextSize(1);
display.setTextColor(SH110X_WHITE);
display.setCursor(0, 0);
for (uint8_t i = 0; i < 168; i++)
{
if ((i == '\n') || (i % 21 == 0))
{
display.println();
}
else
{
display.write(i);
}
}
display.display();
delay(1);
}
void testdrawcircle()
{
for (int16_t i = 0; i < display.height(); i += 2)
{
display.drawCircle(display.width() / 2, display.height() / 2, i, SH110X_WHITE);
display.display();
delay(1);
}
}
void testfillrect()
{
uint8_t color = 1;
for (int16_t i = 0; i < display.width(); i += 4) {
display.drawLine(display.width() - 1, 0, i, display.height() - 1, SH110X_WHITE);
display.display();
delay(1);
}
delay(250);
}
अरविन्द पाटील 9/1/24
https://wokwi.com/projects/389219790221467649