Skip to content

Instantly share code, notes, and snippets.

@davedarko
Created December 27, 2018 19:02
Show Gist options
  • Save davedarko/1d5acfdebfd321a91f1a18b17ba59208 to your computer and use it in GitHub Desktop.
Save davedarko/1d5acfdebfd321a91f1a18b17ba59208 to your computer and use it in GitHub Desktop.
#include <Wire.h>
#include "SH1106Wire.h"
#include <Adafruit_NeoPixel.h>
#define PIN 0
Adafruit_NeoPixel strip = Adafruit_NeoPixel(2, PIN, NEO_GRB + NEO_KHZ800);
int brightness = 4;
/*
default arduino esp8266 pinout for I2C
4 SDA
5 SCL
*/
//create display(Adr, SDA-pin, SCL-pin)
SH1106Wire display(0x3C, 4, 5);
boolean toggle = false;
void drawLines() {
for (int16_t i=0; i<display.getWidth(); i+=4) {
display.drawLine(0, 0, i, display.getHeight()-1);
display.display();
delay(10);
}
for (int16_t i=0; i<display.getHeight(); i+=4) {
display.drawLine(0, 0, display.getWidth()-1, i);
display.display();
delay(10);
}
delay(250);
display.clear();
for (int16_t i=0; i<display.getWidth(); i+=4) {
display.drawLine(0, display.getHeight()-1, i, 0);
display.display();
delay(10);
}
for (int16_t i=display.getHeight()-1; i>=0; i-=4) {
display.drawLine(0, display.getHeight()-1, display.getWidth()-1, i);
display.display();
delay(10);
}
delay(250);
display.clear();
for (int16_t i=display.getWidth()-1; i>=0; i-=4) {
display.drawLine(display.getWidth()-1, display.getHeight()-1, i, 0);
display.display();
delay(10);
}
for (int16_t i=display.getHeight()-1; i>=0; i-=4) {
display.drawLine(display.getWidth()-1, display.getHeight()-1, 0, i);
display.display();
delay(10);
}
delay(250);
display.clear();
for (int16_t i=0; i<display.getHeight(); i+=4) {
display.drawLine(display.getWidth()-1, 0, 0, i);
display.display();
delay(10);
}
for (int16_t i=0; i<display.getWidth(); i+=4) {
display.drawLine(display.getWidth()-1, 0, i, display.getHeight()-1);
display.display();
delay(10);
}
delay(250);
}
// Adapted from Adafruit_SSD1306
void drawRect(void) {
for (int16_t i=0; i<display.getHeight()/2; i+=2) {
display.drawRect(i, i, display.getWidth()-2*i, display.getHeight()-2*i);
display.display();
delay(10);
}
}
// Adapted from Adafruit_SSD1306
void fillRect(void) {
uint8_t color = 1;
for (int16_t i=0; i<display.getHeight()/2; i+=3) {
display.setColor((color % 2 == 0) ? BLACK : WHITE); // alternate colors
display.fillRect(i, i, display.getWidth() - i*2, display.getHeight() - i*2);
display.display();
delay(10);
color++;
}
// Reset back to WHITE
display.setColor(WHITE);
}
// Adapted from Adafruit_SSD1306
void drawCircle(void) {
for (int16_t i=0; i<display.getHeight(); i+=2) {
display.drawCircle(display.getWidth()/2, display.getHeight()/2, i);
display.display();
delay(10);
}
delay(1000);
display.clear();
// This will draw the part of the circel in quadrant 1
// Quadrants are numberd like this:
// 0010 | 0001
// ------|-----
// 0100 | 1000
//
display.drawCircleQuads(display.getWidth()/2, display.getHeight()/2, display.getHeight()/4, 0b00000001);
display.display();
delay(200);
display.drawCircleQuads(display.getWidth()/2, display.getHeight()/2, display.getHeight()/4, 0b00000011);
display.display();
delay(200);
display.drawCircleQuads(display.getWidth()/2, display.getHeight()/2, display.getHeight()/4, 0b00000111);
display.display();
delay(200);
display.drawCircleQuads(display.getWidth()/2, display.getHeight()/2, display.getHeight()/4, 0b00001111);
display.display();
}
void printBuffer(void) {
// Initialize the log buffer
// allocate memory to store 8 lines of text and 30 chars per line.
display.setLogBuffer(5, 30);
// Some test data
const char* test[] = {
"Hello",
"World" ,
"----",
"Show off",
"how",
"the log buffer",
"is",
"working.",
"Even",
"scrolling is",
"working"
};
for (uint8_t i = 0; i < 11; i++) {
display.clear();
// Print to the screen
display.println(test[i]);
// Draw it to the internal screen buffer
display.drawLogBuffer(0, 0);
// Display it on the screen
display.display();
delay(500);
}
}
void setup()
{
Serial.begin(115200);
Wire.begin();
strip.begin();
strip.show(); // Initialize all pixels to 'off'
display.init();
display.flipScreenVertically();
display.setContrast(255);
drawLines();
delay(1000);
display.clear();
drawRect();
delay(1000);
display.clear();
fillRect();
delay(1000);
display.clear();
drawCircle();
delay(1000);
display.clear();
printBuffer();
delay(1000);
display.clear();
}
void loop() {
// Some example procedures showing how to display to the pixels:
// Wire.requestFrom(0x11, 1);
// byte a = Wire.read(); // receive a byte as character
//
// Wire.requestFrom(0x11, 1);
// byte b = Wire.read(); // receive a byte as character
if (toggle)
{
// strip.setPixelColor(0, brightness, 0, 0);
// strip.setPixelColor(1, 0, brightness, 0);
strip.setPixelColor(0, 0, 132/8, 176/8);
strip.setPixelColor(1, 0, 163/8, 86/8);
}
else
{
strip.setPixelColor(0, 0, 163/8, 86/8);
strip.setPixelColor(1, 0, 132/8, 176/8);
}
delay(500);
toggle = !toggle;
// if (a > 90)
// {
// strip.setPixelColor(0, brightness, 0, 0);
// strip.setPixelColor(1, brightness, 0, 0);
// }
// if (b > 90)
// {
// strip.setPixelColor(0, 0, 0, brightness);
// strip.setPixelColor(1, 0, 0, brightness);
// }
//
// Serial.print(a, DEC);
// Serial.print(" - ");
// Serial.println(b, DEC);
// delay(200);
strip.show();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment