<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://calebneedscollege.com/wiki/index.php?action=history&amp;feed=atom&amp;title=OLED_Display_SSD1306_i2c_128x64_demo</id>
	<title>OLED Display SSD1306 i2c 128x64 demo - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://calebneedscollege.com/wiki/index.php?action=history&amp;feed=atom&amp;title=OLED_Display_SSD1306_i2c_128x64_demo"/>
	<link rel="alternate" type="text/html" href="http://calebneedscollege.com/wiki/index.php?title=OLED_Display_SSD1306_i2c_128x64_demo&amp;action=history"/>
	<updated>2026-04-24T19:05:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.33.1</generator>
	<entry>
		<id>http://calebneedscollege.com/wiki/index.php?title=OLED_Display_SSD1306_i2c_128x64_demo&amp;diff=10&amp;oldid=prev</id>
		<title>Legg: Changed from default i2c address of driver 0x3D-&gt;0x3C</title>
		<link rel="alternate" type="text/html" href="http://calebneedscollege.com/wiki/index.php?title=OLED_Display_SSD1306_i2c_128x64_demo&amp;diff=10&amp;oldid=prev"/>
		<updated>2020-11-01T04:19:37Z</updated>

		<summary type="html">&lt;p&gt;Changed from default i2c address of driver 0x3D-&amp;gt;0x3C&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 04:19, 1 November 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l66&quot; &gt;Line 66:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 66:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   if(!display.begin(SSD1306_SWITCHCAPVCC, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;0x3D&lt;/del&gt;)) { // Address 0x3D for 128x64&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   if(!display.begin(SSD1306_SWITCHCAPVCC, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;0x3C&lt;/ins&gt;)) { // Address 0x3D for 128x64&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     Serial.println(F(&amp;quot;SSD1306 allocation failed&amp;quot;));&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     Serial.println(F(&amp;quot;SSD1306 allocation failed&amp;quot;));&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     for(;;); // Don't proceed, loop forever&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     for(;;); // Don't proceed, loop forever&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Legg</name></author>
		
	</entry>
	<entry>
		<id>http://calebneedscollege.com/wiki/index.php?title=OLED_Display_SSD1306_i2c_128x64_demo&amp;diff=9&amp;oldid=prev</id>
		<title>Legg: Created page with &quot;==Synopsis== Demo of different graphics and test modes of SSD1306. ==Code== &lt;syntaxhighlight lang=&quot;C++&quot; line='line'&gt; //Arduino UNO //SSD1306 ////Pin A4 SDA ////Pin A5 SCL  /**...&quot;</title>
		<link rel="alternate" type="text/html" href="http://calebneedscollege.com/wiki/index.php?title=OLED_Display_SSD1306_i2c_128x64_demo&amp;diff=9&amp;oldid=prev"/>
		<updated>2020-11-01T03:52:52Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==Synopsis== Demo of different graphics and test modes of SSD1306. ==Code== &amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line=&amp;#039;line&amp;#039;&amp;gt; //Arduino UNO //SSD1306 ////Pin A4 SDA ////Pin A5 SCL  /**...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Synopsis==&lt;br /&gt;
Demo of different graphics and test modes of SSD1306.&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line='line'&amp;gt;&lt;br /&gt;
//Arduino UNO&lt;br /&gt;
//SSD1306&lt;br /&gt;
////Pin A4 SDA&lt;br /&gt;
////Pin A5 SCL&lt;br /&gt;
&lt;br /&gt;
/**************************************************************************&lt;br /&gt;
 This is an example for our Monochrome OLEDs based on SSD1306 drivers&lt;br /&gt;
&lt;br /&gt;
 Pick one up today in the adafruit shop!&lt;br /&gt;
 ------&amp;gt; http://www.adafruit.com/category/63_98&lt;br /&gt;
&lt;br /&gt;
 This example is for a 128x64 pixel display using I2C to communicate&lt;br /&gt;
 3 pins are required to interface (two I2C and one reset).&lt;br /&gt;
&lt;br /&gt;
 Adafruit invests time and resources providing this open&lt;br /&gt;
 source code, please support Adafruit and open-source&lt;br /&gt;
 hardware by purchasing products from Adafruit!&lt;br /&gt;
&lt;br /&gt;
 Written by Limor Fried/Ladyada for Adafruit Industries,&lt;br /&gt;
 with contributions from the open source community.&lt;br /&gt;
 BSD license, check license.txt for more information&lt;br /&gt;
 All text above, and the splash screen below must be&lt;br /&gt;
 included in any redistribution.&lt;br /&gt;
 **************************************************************************/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Adafruit_GFX.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Adafruit_SSD1306.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define SCREEN_WIDTH 128 // OLED display width, in pixels&lt;br /&gt;
#define SCREEN_HEIGHT 64 // OLED display height, in pixels&lt;br /&gt;
&lt;br /&gt;
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)&lt;br /&gt;
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)&lt;br /&gt;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &amp;amp;Wire, OLED_RESET);&lt;br /&gt;
&lt;br /&gt;
#define NUMFLAKES     10 // Number of snowflakes in the animation example&lt;br /&gt;
&lt;br /&gt;
#define LOGO_HEIGHT   16&lt;br /&gt;
#define LOGO_WIDTH    16&lt;br /&gt;
static const unsigned char PROGMEM logo_bmp[] =&lt;br /&gt;
{ B00000000, B11000000,&lt;br /&gt;
  B00000001, B11000000,&lt;br /&gt;
  B00000001, B11000000,&lt;br /&gt;
  B00000011, B11100000,&lt;br /&gt;
  B11110011, B11100000,&lt;br /&gt;
  B11111110, B11111000,&lt;br /&gt;
  B01111110, B11111111,&lt;br /&gt;
  B00110011, B10011111,&lt;br /&gt;
  B00011111, B11111100,&lt;br /&gt;
  B00001101, B01110000,&lt;br /&gt;
  B00011011, B10100000,&lt;br /&gt;
  B00111111, B11100000,&lt;br /&gt;
  B00111111, B11110000,&lt;br /&gt;
  B01111100, B11110000,&lt;br /&gt;
  B01110000, B01110000,&lt;br /&gt;
  B00000000, B00110000 };&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally&lt;br /&gt;
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3D for 128x64&lt;br /&gt;
    Serial.println(F(&amp;quot;SSD1306 allocation failed&amp;quot;));&lt;br /&gt;
    for(;;); // Don't proceed, loop forever&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Show initial display buffer contents on the screen --&lt;br /&gt;
  // the library initializes this with an Adafruit splash screen.&lt;br /&gt;
  display.display();&lt;br /&gt;
  delay(2000); // Pause for 2 seconds&lt;br /&gt;
&lt;br /&gt;
  // Clear the buffer&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  // Draw a single pixel in white&lt;br /&gt;
  display.drawPixel(10, 10, SSD1306_WHITE);&lt;br /&gt;
&lt;br /&gt;
  // Show the display buffer on the screen. You MUST call display() after&lt;br /&gt;
  // drawing commands to make them visible on screen!&lt;br /&gt;
  display.display();&lt;br /&gt;
  delay(2000);&lt;br /&gt;
  // display.display() is NOT necessary after every single drawing command,&lt;br /&gt;
  // unless that's what you want...rather, you can batch up a bunch of&lt;br /&gt;
  // drawing operations and then update the screen all at once by calling&lt;br /&gt;
  // display.display(). These examples demonstrate both approaches...&lt;br /&gt;
&lt;br /&gt;
  testdrawline();      // Draw many lines&lt;br /&gt;
&lt;br /&gt;
  testdrawrect();      // Draw rectangles (outlines)&lt;br /&gt;
&lt;br /&gt;
  testfillrect();      // Draw rectangles (filled)&lt;br /&gt;
&lt;br /&gt;
  testdrawcircle();    // Draw circles (outlines)&lt;br /&gt;
&lt;br /&gt;
  testfillcircle();    // Draw circles (filled)&lt;br /&gt;
&lt;br /&gt;
  testdrawroundrect(); // Draw rounded rectangles (outlines)&lt;br /&gt;
&lt;br /&gt;
  testfillroundrect(); // Draw rounded rectangles (filled)&lt;br /&gt;
&lt;br /&gt;
  testdrawtriangle();  // Draw triangles (outlines)&lt;br /&gt;
&lt;br /&gt;
  testfilltriangle();  // Draw triangles (filled)&lt;br /&gt;
&lt;br /&gt;
  testdrawchar();      // Draw characters of the default font&lt;br /&gt;
&lt;br /&gt;
  testdrawstyles();    // Draw 'stylized' characters&lt;br /&gt;
&lt;br /&gt;
  testscrolltext();    // Draw scrolling text&lt;br /&gt;
&lt;br /&gt;
  testdrawbitmap();    // Draw a small bitmap image&lt;br /&gt;
&lt;br /&gt;
  // Invert and restore display, pausing in-between&lt;br /&gt;
  display.invertDisplay(true);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  display.invertDisplay(false);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
&lt;br /&gt;
  testanimate(logo_bmp, LOGO_WIDTH, LOGO_HEIGHT); // Animate bitmaps&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testdrawline() {&lt;br /&gt;
  int16_t i;&lt;br /&gt;
&lt;br /&gt;
  display.clearDisplay(); // Clear display buffer&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;display.width(); i+=4) {&lt;br /&gt;
    display.drawLine(0, 0, i, display.height()-1, SSD1306_WHITE);&lt;br /&gt;
    display.display(); // Update screen with each newly-drawn line&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
  for(i=0; i&amp;lt;display.height(); i+=4) {&lt;br /&gt;
    display.drawLine(0, 0, display.width()-1, i, SSD1306_WHITE);&lt;br /&gt;
    display.display();&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
  delay(250);&lt;br /&gt;
&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;display.width(); i+=4) {&lt;br /&gt;
    display.drawLine(0, display.height()-1, i, 0, SSD1306_WHITE);&lt;br /&gt;
    display.display();&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
  for(i=display.height()-1; i&amp;gt;=0; i-=4) {&lt;br /&gt;
    display.drawLine(0, display.height()-1, display.width()-1, i, SSD1306_WHITE);&lt;br /&gt;
    display.display();&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
  delay(250);&lt;br /&gt;
&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  for(i=display.width()-1; i&amp;gt;=0; i-=4) {&lt;br /&gt;
    display.drawLine(display.width()-1, display.height()-1, i, 0, SSD1306_WHITE);&lt;br /&gt;
    display.display();&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
  for(i=display.height()-1; i&amp;gt;=0; i-=4) {&lt;br /&gt;
    display.drawLine(display.width()-1, display.height()-1, 0, i, SSD1306_WHITE);&lt;br /&gt;
    display.display();&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
  delay(250);&lt;br /&gt;
&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;display.height(); i+=4) {&lt;br /&gt;
    display.drawLine(display.width()-1, 0, 0, i, SSD1306_WHITE);&lt;br /&gt;
    display.display();&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
  for(i=0; i&amp;lt;display.width(); i+=4) {&lt;br /&gt;
    display.drawLine(display.width()-1, 0, i, display.height()-1, SSD1306_WHITE);&lt;br /&gt;
    display.display();&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(2000); // Pause for 2 seconds&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testdrawrect(void) {&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  for(int16_t i=0; i&amp;lt;display.height()/2; i+=2) {&lt;br /&gt;
    display.drawRect(i, i, display.width()-2*i, display.height()-2*i, SSD1306_WHITE);&lt;br /&gt;
    display.display(); // Update screen with each newly-drawn rectangle&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(2000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testfillrect(void) {&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  for(int16_t i=0; i&amp;lt;display.height()/2; i+=3) {&lt;br /&gt;
    // The INVERSE color is used so rectangles alternate white/black&lt;br /&gt;
    display.fillRect(i, i, display.width()-i*2, display.height()-i*2, SSD1306_INVERSE);&lt;br /&gt;
    display.display(); // Update screen with each newly-drawn rectangle&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(2000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testdrawcircle(void) {&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  for(int16_t i=0; i&amp;lt;max(display.width(),display.height())/2; i+=2) {&lt;br /&gt;
    display.drawCircle(display.width()/2, display.height()/2, i, SSD1306_WHITE);&lt;br /&gt;
    display.display();&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(2000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testfillcircle(void) {&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  for(int16_t i=max(display.width(),display.height())/2; i&amp;gt;0; i-=3) {&lt;br /&gt;
    // The INVERSE color is used so circles alternate white/black&lt;br /&gt;
    display.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE);&lt;br /&gt;
    display.display(); // Update screen with each newly-drawn circle&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(2000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testdrawroundrect(void) {&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  for(int16_t i=0; i&amp;lt;display.height()/2-2; i+=2) {&lt;br /&gt;
    display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i,&lt;br /&gt;
      display.height()/4, SSD1306_WHITE);&lt;br /&gt;
    display.display();&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(2000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testfillroundrect(void) {&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  for(int16_t i=0; i&amp;lt;display.height()/2-2; i+=2) {&lt;br /&gt;
    // The INVERSE color is used so round-rects alternate white/black&lt;br /&gt;
    display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i,&lt;br /&gt;
      display.height()/4, SSD1306_INVERSE);&lt;br /&gt;
    display.display();&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(2000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testdrawtriangle(void) {&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  for(int16_t i=0; i&amp;lt;max(display.width(),display.height())/2; i+=5) {&lt;br /&gt;
    display.drawTriangle(&lt;br /&gt;
      display.width()/2  , display.height()/2-i,&lt;br /&gt;
      display.width()/2-i, display.height()/2+i,&lt;br /&gt;
      display.width()/2+i, display.height()/2+i, SSD1306_WHITE);&lt;br /&gt;
    display.display();&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(2000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testfilltriangle(void) {&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  for(int16_t i=max(display.width(),display.height())/2; i&amp;gt;0; i-=5) {&lt;br /&gt;
    // The INVERSE color is used so triangles alternate white/black&lt;br /&gt;
    display.fillTriangle(&lt;br /&gt;
      display.width()/2  , display.height()/2-i,&lt;br /&gt;
      display.width()/2-i, display.height()/2+i,&lt;br /&gt;
      display.width()/2+i, display.height()/2+i, SSD1306_INVERSE);&lt;br /&gt;
    display.display();&lt;br /&gt;
    delay(1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(2000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testdrawchar(void) {&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  display.setTextSize(1);      // Normal 1:1 pixel scale&lt;br /&gt;
  display.setTextColor(SSD1306_WHITE); // Draw white text&lt;br /&gt;
  display.setCursor(0, 0);     // Start at top-left corner&lt;br /&gt;
  display.cp437(true);         // Use full 256 char 'Code Page 437' font&lt;br /&gt;
&lt;br /&gt;
  // Not all the characters will fit on the display. This is normal.&lt;br /&gt;
  // Library will draw what it can and the rest will be clipped.&lt;br /&gt;
  for(int16_t i=0; i&amp;lt;256; i++) {&lt;br /&gt;
    if(i == '\n') display.write(' ');&lt;br /&gt;
    else          display.write(i);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  display.display();&lt;br /&gt;
  delay(2000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testdrawstyles(void) {&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  display.setTextSize(1);             // Normal 1:1 pixel scale&lt;br /&gt;
  display.setTextColor(SSD1306_WHITE);        // Draw white text&lt;br /&gt;
  display.setCursor(0,0);             // Start at top-left corner&lt;br /&gt;
  display.println(F(&amp;quot;Hello, world!&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
  display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text&lt;br /&gt;
  display.println(3.141592);&lt;br /&gt;
&lt;br /&gt;
  display.setTextSize(2);             // Draw 2X-scale text&lt;br /&gt;
  display.setTextColor(SSD1306_WHITE);&lt;br /&gt;
  display.print(F(&amp;quot;0x&amp;quot;)); display.println(0xDEADBEEF, HEX);&lt;br /&gt;
&lt;br /&gt;
  display.display();&lt;br /&gt;
  delay(2000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testscrolltext(void) {&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  display.setTextSize(2); // Draw 2X-scale text&lt;br /&gt;
  display.setTextColor(SSD1306_WHITE);&lt;br /&gt;
  display.setCursor(10, 0);&lt;br /&gt;
  display.println(F(&amp;quot;scroll&amp;quot;));&lt;br /&gt;
  display.display();      // Show initial text&lt;br /&gt;
  delay(100);&lt;br /&gt;
&lt;br /&gt;
  // Scroll in various directions, pausing in-between:&lt;br /&gt;
  display.startscrollright(0x00, 0x0F);&lt;br /&gt;
  delay(2000);&lt;br /&gt;
  display.stopscroll();&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  display.startscrollleft(0x00, 0x0F);&lt;br /&gt;
  delay(2000);&lt;br /&gt;
  display.stopscroll();&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  display.startscrolldiagright(0x00, 0x07);&lt;br /&gt;
  delay(2000);&lt;br /&gt;
  display.startscrolldiagleft(0x00, 0x07);&lt;br /&gt;
  delay(2000);&lt;br /&gt;
  display.stopscroll();&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void testdrawbitmap(void) {&lt;br /&gt;
  display.clearDisplay();&lt;br /&gt;
&lt;br /&gt;
  display.drawBitmap(&lt;br /&gt;
    (display.width()  - LOGO_WIDTH ) / 2,&lt;br /&gt;
    (display.height() - LOGO_HEIGHT) / 2,&lt;br /&gt;
    logo_bmp, LOGO_WIDTH, LOGO_HEIGHT, 1);&lt;br /&gt;
  display.display();&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#define XPOS   0 // Indexes into the 'icons' array in function below&lt;br /&gt;
#define YPOS   1&lt;br /&gt;
#define DELTAY 2&lt;br /&gt;
&lt;br /&gt;
void testanimate(const uint8_t *bitmap, uint8_t w, uint8_t h) {&lt;br /&gt;
  int8_t f, icons[NUMFLAKES][3];&lt;br /&gt;
&lt;br /&gt;
  // Initialize 'snowflake' positions&lt;br /&gt;
  for(f=0; f&amp;lt; NUMFLAKES; f++) {&lt;br /&gt;
    icons[f][XPOS]   = random(1 - LOGO_WIDTH, display.width());&lt;br /&gt;
    icons[f][YPOS]   = -LOGO_HEIGHT;&lt;br /&gt;
    icons[f][DELTAY] = random(1, 6);&lt;br /&gt;
    Serial.print(F(&amp;quot;x: &amp;quot;));&lt;br /&gt;
    Serial.print(icons[f][XPOS], DEC);&lt;br /&gt;
    Serial.print(F(&amp;quot; y: &amp;quot;));&lt;br /&gt;
    Serial.print(icons[f][YPOS], DEC);&lt;br /&gt;
    Serial.print(F(&amp;quot; dy: &amp;quot;));&lt;br /&gt;
    Serial.println(icons[f][DELTAY], DEC);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  for(;;) { // Loop forever...&lt;br /&gt;
    display.clearDisplay(); // Clear the display buffer&lt;br /&gt;
&lt;br /&gt;
    // Draw each snowflake:&lt;br /&gt;
    for(f=0; f&amp;lt; NUMFLAKES; f++) {&lt;br /&gt;
      display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, SSD1306_WHITE);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    display.display(); // Show the display buffer on the screen&lt;br /&gt;
    delay(200);        // Pause for 1/10 second&lt;br /&gt;
&lt;br /&gt;
    // Then update coordinates of each flake...&lt;br /&gt;
    for(f=0; f&amp;lt; NUMFLAKES; f++) {&lt;br /&gt;
      icons[f][YPOS] += icons[f][DELTAY];&lt;br /&gt;
      // If snowflake is off the bottom of the screen...&lt;br /&gt;
      if (icons[f][YPOS] &amp;gt;= display.height()) {&lt;br /&gt;
        // Reinitialize to a random position, just off the top&lt;br /&gt;
        icons[f][XPOS]   = random(1 - LOGO_WIDTH, display.width());&lt;br /&gt;
        icons[f][YPOS]   = -LOGO_HEIGHT;&lt;br /&gt;
        icons[f][DELTAY] = random(1, 6);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Legg</name></author>
		
	</entry>
</feed>