1#include <SPI.h>
2#include <Wire.h>
3#include <Adafruit_GFX.h>
4#include <Adafruit_SH110X.h>
5
6#define i2c_Address 0x3c
7#define SCREEN_WIDTH 128
8#define SCREEN_HEIGHT 64
9#define OLED_RESET -1
10Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
11
12#define XPOS 0
13#define YPOS 1
14#define LOGO16_GLCD_HEIGHT 64
15#define LOGO16_GLCD_WIDTH 16
16
17
18void angryEyes();
19void centerEye();
20void rightEyes();
21void centerEyes();
22void blink();
23void leftEyes();
24void blinkLeft();
25
26void (*imageFunctions[])() = {angryEyes, centerEye, rightEyes, centerEyes, blink, centerEyes, leftEyes, blinkLeft};
27int numImages = sizeof(imageFunctions) / sizeof(imageFunctions[0]);
28
29void setup() {
30 Serial.begin(9600);
31 delay(250);
32 display.begin(i2c_Address, true);
33 display.clearDisplay();
34}
35
36void loop() {
37
38 int randomImageIndex = random(numImages);
39 imageFunctions[randomImageIndex]();
40 delay(900);
41 display.clearDisplay();
42}
43
44void angryEyes() {
45 display.fillTriangle(56, 36, 12, 36, 16, 16, SH110X_WHITE);
46 display.fillTriangle(72, 36, 112, 36, 108, 16, SH110X_WHITE);
47 display.display();
48}
49
50void centerEye() {
51 display.fillCircle(display.width() / 2 - 25, display.height() / 2, 15, SH110X_WHITE);
52 display.fillCircle(display.width() / 2 + 25, display.height() / 2, 15, SH110X_WHITE);
53 display.display();
54}
55
56void rightEyes() {
57 display.fillCircle(display.width() / 2 - 15, display.height() / 2, 15, SH110X_WHITE);
58 display.fillCircle(display.width() / 2 + 35, display.height() / 2, 15, SH110X_WHITE);
59 display.display();
60}
61
62void centerEyes() {
63 display.fillCircle(display.width() / 2 - 25, display.height() / 2, 15, SH110X_WHITE);
64 display.fillCircle(display.width() / 2 + 25, display.height() / 2, 15, SH110X_WHITE);
65 display.display();
66}
67
68void blink() {
69 display.fillRoundRect(display.width() / 2 - 40, display.height() / 2, 30, 8, 8, SH110X_WHITE);
70 display.fillRoundRect(display.width() / 2 + 2, display.height() / 2, 30, 8, 8, SH110X_WHITE);
71 display.display();
72}
73
74void leftEyes() {
75 display.fillCircle(display.width() / 2 - 35, display.height() / 2, 15, SH110X_WHITE);
76 display.fillCircle(display.width() / 2 + 15, display.height() / 2, 15, SH110X_WHITE);
77 display.display();
78}
79
80void blinkLeft() {
81 display.fillRoundRect(display.width() / 2 - 60, display.height() / 2, 30, 8, 8, SH110X_WHITE);
82 display.fillRoundRect(display.width() / 2 - 15, display.height() / 2, 30, 8, 8, SH110X_WHITE);
83 display.display();
84}