#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are defined by the Wire-library.
// On an arduino UNO: A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO: 2(SDA), 3(SCL), ...
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &SPI);
//uint8_t w, uint8_t h, SPIClass *spi_ptr,
// int8_t dc_pin, int8_t rst_pin, int8_t cs_pin,
// uint32_t bitrate)
//reference state
int ref_eye_height = 40;
int ref_eye_width = 40;
int ref_space_between_eye = 10;
int ref_corner_radius = 10;
//current state of the eyes
int left_eye_height = ref_eye_height;
int left_eye_width = ref_eye_width;
int left_eye_x = 32;
int left_eye_y = 32;
int right_eye_x = 32+ref_eye_width+ref_space_between_eye;
int right_eye_y = 32;
int right_eye_height = ref_eye_height;
int right_eye_width = ref_eye_width;
// OLED Animation: circles menu 3
// Code auto-generated by https://wokwi.com/animator, graphics by icons8.com
#define FRAME_DELAY (42)
#define FRAME_WIDTH (32)
#define FRAME_HEIGHT (32)
#define FRAME_COUNT (sizeof(frames) / sizeof(frames[0]))
const byte PROGMEM frames[][128] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,3,192,112,31,135,225,248,48,140,49,12,32,204,51,4,32,204,51,4,48,140,49,12,31,135,225,248,14,3,192,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,3,192,112,25,135,225,248,48,140,49,12,32,204,51,4,32,140,51,4,48,140,49,12,31,7,225,248,6,3,192,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,3,192,112,48,135,225,248,32,140,49,12,32,204,51,4,48,140,51,4,17,140,49,12,15,7,225,248,0,3,192,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,25,131,192,112,48,135,225,248,32,204,49,12,32,140,51,4,48,140,51,4,31,12,49,12,4,7,225,248,0,3,192,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,31,128,0,0,48,131,192,112,32,135,225,248,32,204,49,12,48,140,51,4,25,140,51,4,14,12,49,12,0,7,225,248,0,3,192,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,17,128,0,0,32,131,192,112,32,199,225,248,32,140,49,12,49,140,51,4,31,12,51,4,0,12,49,12,0,7,225,248,0,3,192,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,17,128,0,0,32,131,192,112,32,198,97,248,32,140,49,12,17,140,51,4,15,12,51,4,0,4,33,12,0,7,225,248,0,1,128,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,25,128,0,0,48,135,224,112,32,196,33,248,32,140,49,12,48,136,19,4,31,12,51,4,6,6,97,12,0,3,193,248,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,3,192,0,25,134,96,112,48,140,49,248,32,200,17,12,32,140,51,4,48,132,35,4,31,7,225,12,4,0,1,248,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,128,0,0,7,224,0,14,4,32,112,31,140,49,248,48,140,49,12,32,204,51,4,32,198,99,4,48,131,193,12,31,128,1,248,14,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,192,0,0,6,96,0,0,12,48,112,4,8,17,248,31,12,49,12,48,132,35,4,32,131,195,4,32,192,1,12,48,128,1,248,25,128,0,112,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,192,0,0,4,32,0,0,12,48,112,0,8,17,152,6,12,49,12,31,6,99,4,48,131,193,4,32,128,1,12,32,192,1,248,48,128,0,96,25,128,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,192,0,0,6,96,0,0,12,48,248,0,12,49,136,0,12,49,4,15,4,35,4,17,135,225,4,32,129,129,136,32,192,0,248,32,128,0,0,17,128,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,192,240,0,6,97,152,0,12,49,12,0,12,51,4,31,12,49,4,49,132,33,12,32,135,224,248,32,193,128,32,32,128,0,0,17,128,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,0,0,1,248,0,3,193,12,0,7,225,4,14,12,51,4,25,140,49,12,48,140,49,216,32,204,48,112,32,135,224,0,48,131,192,0,31,128,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,1,136,0,0,1,4,4,1,131,4,31,7,225,4,48,132,33,136,32,140,48,248,32,204,48,0,48,140,48,0,25,134,96,0,15,3,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,0,0,1,136,0,0,1,4,15,0,3,4,17,129,129,4,48,135,225,136,32,196,32,240,32,140,48,0,48,140,48,0,31,12,48,0,0,6,96,0,0,3,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,1,152,6,0,1,12,31,0,3,4,48,128,1,4,32,131,193,12,32,198,96,248,48,140,48,32,25,136,16,0,15,12,48,0,0,4,32,0,0,3,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,14,0,1,152,31,128,1,12,48,128,3,4,32,195,193,4,32,196,33,12,48,140,48,248,31,136,16,32,14,12,48,0,0,6,96,0,0,3,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,96,31,128,1,248,48,131,193,12,32,198,97,4,32,204,51,4,48,140,49,12,31,140,49,216,14,4,32,112,0,7,224,0,0,1,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,31,128,0,0,48,135,224,248,32,196,33,140,32,204,49,4,48,136,19,4,31,140,49,4,14,6,97,136,0,3,192,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,31,131,192,0,48,134,96,32,32,204,48,248,32,200,17,12,48,140,49,4,31,132,35,4,14,7,225,12,0,0,1,152,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,1,128,0,31,135,224,0,48,132,32,0,32,204,48,240,32,204,49,136,48,140,49,4,31,134,99,4,14,3,193,4,0,0,1,136,0,0,0,248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,3,192,0,31,135,224,0,48,140,48,0,32,204,48,248,32,204,49,136,48,140,49,4,31,135,227,4,14,3,193,4,0,0,1,136,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,3,192,0,31,135,224,0,48,140,48,240,32,204,49,152,32,204,49,12,48,140,51,4,31,135,225,4,14,3,193,12,0,0,1,248,0,0,0,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,3,192,0,31,135,224,112,48,140,49,248,32,204,49,12,32,204,49,4,48,140,51,4,31,135,225,12,14,3,193,216,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,3,192,0,31,135,224,248,48,140,49,136,32,204,49,4,32,204,51,4,48,140,49,4,31,135,225,136,14,3,192,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,3,192,96,31,135,225,248,48,140,49,12,32,204,49,4,32,204,51,4,48,140,49,12,31,135,225,216,14,3,192,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
void draw_eyes(bool update=true)
{
display.clearDisplay();
//draw from center
int x = int(left_eye_x-left_eye_width/2);
int y = int(left_eye_y-left_eye_height/2);
display.fillRoundRect(x,y,left_eye_width,left_eye_height,ref_corner_radius,SSD1306_WHITE);
x = int(right_eye_x-right_eye_width/2);
y = int(right_eye_y-right_eye_height/2);
display.fillRoundRect(x,y,right_eye_width,right_eye_height,ref_corner_radius,SSD1306_WHITE);
if(update)
{
display.display();
}
}
void center_eyes(bool update=true)
{
//move eyes to the center of the display, defined by SCREEN_WIDTH, SCREEN_HEIGHT
left_eye_height = ref_eye_height;
left_eye_width = ref_eye_width;
right_eye_height = ref_eye_height;
right_eye_width = ref_eye_width;
left_eye_x = SCREEN_WIDTH/2-ref_eye_width/2-ref_space_between_eye/2;
left_eye_y = SCREEN_HEIGHT/2;
right_eye_x = SCREEN_WIDTH/2+ref_eye_width/2+ref_space_between_eye/2;
right_eye_y = SCREEN_HEIGHT/2;
draw_eyes(update);
}
void blink(int speed=12)
{
draw_eyes();
for(int i=0;i<3;i++)
{
left_eye_height = left_eye_height-speed;
right_eye_height = right_eye_height-speed;
draw_eyes();
delay(1);
}
for(int i=0;i<3;i++)
{
left_eye_height = left_eye_height+speed;
right_eye_height = right_eye_height+speed;
draw_eyes();
delay(1);
}
}
void sleep()
{
left_eye_height = 2;
right_eye_height = 2;
draw_eyes(true);
}
void wakeup()
{
sleep();
for(int h=0; h <= ref_eye_height; h+=2)
{
left_eye_height = h;
right_eye_height = h;
draw_eyes(true);
}
}
void loading()
{
display.clearDisplay();
int frame = 0;
for(int i=0;i<96;i++){
display.drawBitmap(48, 16, frames[frame], FRAME_WIDTH, FRAME_HEIGHT, WHITE);
display.display();
display.clearDisplay();
frame = (frame + 1) % FRAME_COUNT;
delay(1);
}
}
void happy_eye()
{
center_eyes(false);
//draw inverted triangle over eye lower part
int offset = ref_eye_height/2;
for(int i=0;i<10;i++)
{
display.fillTriangle(left_eye_x-left_eye_width/2-1, left_eye_y+offset, left_eye_x+left_eye_width/2+1, left_eye_y+5+offset, left_eye_x-left_eye_width/2-1,left_eye_y+left_eye_height+offset,SSD1306_BLACK);
//display.fillRect(left_eye_x-left_eye_width/2-1, left_eye_y+5, left_eye_width+1, 20,SSD1306_BLACK);
display.fillTriangle(right_eye_x+right_eye_width/2+1, right_eye_y+offset, right_eye_x-left_eye_width/2-1, right_eye_y+5+offset, right_eye_x+right_eye_width/2+1,right_eye_y+right_eye_height+offset,SSD1306_BLACK);
//display.fillRect(right_eye_x-right_eye_width/2-1, right_eye_y+5, right_eye_width+1, 20,SSD1306_BLACK);
offset -= 2;
display.display();
delay(1);
}
display.display();
delay(1000);
}
void saccade(int direction_x, int direction_y)
{
//quick movement of the eye, no size change. stay at position after movement, will not move back, call again with opposite direction
//direction == -1 : move left
//direction == 1 : move right
int direction_x_movement_amplitude = 8;
int direction_y_movement_amplitude = 6;
int blink_amplitude = 8;
for(int i=0;i<1;i++)
{
left_eye_x+=direction_x_movement_amplitude*direction_x;
right_eye_x+=direction_x_movement_amplitude*direction_x;
left_eye_y+=direction_y_movement_amplitude*direction_y;
right_eye_y+=direction_y_movement_amplitude*direction_y;
right_eye_height-=blink_amplitude;
left_eye_height-=blink_amplitude;
draw_eyes();
delay(1);
}
for(int i=0;i<1;i++)
{
left_eye_x+=direction_x_movement_amplitude*direction_x;
right_eye_x+=direction_x_movement_amplitude*direction_x;
left_eye_y+=direction_y_movement_amplitude*direction_y;
right_eye_y+=direction_y_movement_amplitude*direction_y;
right_eye_height+=blink_amplitude;
left_eye_height+=blink_amplitude;
draw_eyes();
delay(1);
}
}
void move_right_big_eye()
{
move_big_eye(1);
}
void move_left_big_eye()
{
move_big_eye(-1);
}
void move_big_eye(int direction)
{
//direction == -1 : move left
//direction == 1 : move right
int direction_oversize = 1;
int direction_movement_amplitude = 2;
int blink_amplitude = 5;
for(int i=0;i<3;i++)
{
left_eye_x+=direction_movement_amplitude*direction;
right_eye_x+=direction_movement_amplitude*direction;
right_eye_height-=blink_amplitude;
left_eye_height-=blink_amplitude;
if(direction>0)
{
right_eye_height+=direction_oversize;
right_eye_width+=direction_oversize;
}else
{
left_eye_height+=direction_oversize;
left_eye_width+=direction_oversize;
}
draw_eyes();
delay(1);
}
for(int i=0;i<3;i++)
{
left_eye_x+=direction_movement_amplitude*direction;
right_eye_x+=direction_movement_amplitude*direction;
right_eye_height+=blink_amplitude;
left_eye_height+=blink_amplitude;
if(direction>0)
{
right_eye_height+=direction_oversize;
right_eye_width+=direction_oversize;
}else
{
left_eye_height+=direction_oversize;
left_eye_width+=direction_oversize;
}
draw_eyes();
delay(1);
}
delay(1000);
for(int i=0;i<3;i++)
{
left_eye_x-=direction_movement_amplitude*direction;
right_eye_x-=direction_movement_amplitude*direction;
right_eye_height-=blink_amplitude;
left_eye_height-=blink_amplitude;
if(direction>0)
{
right_eye_height-=direction_oversize;
right_eye_width-=direction_oversize;
}else
{
left_eye_height-=direction_oversize;
left_eye_width-=direction_oversize;
}
draw_eyes();
delay(1);
}
for(int i=0;i<3;i++)
{
left_eye_x-=direction_movement_amplitude*direction;
right_eye_x-=direction_movement_amplitude*direction;
right_eye_height+=blink_amplitude;
left_eye_height+=blink_amplitude;
if(direction>0)
{
right_eye_height-=direction_oversize;
right_eye_width-=direction_oversize;
}else
{
left_eye_height-=direction_oversize;
left_eye_width-=direction_oversize;
}
draw_eyes();
delay(1);
}
center_eyes();
}
void setup() {
// put your setup code here, to run once:
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
pinMode(2,INPUT_PULLUP);
//for usb communication
Serial.begin(115200);
// Show initial display buffer contents on the screen --
// the library initializes this with an Adafruit splash screen.
// Clear the buffer
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0,0); // Start at top-left corner
display.println(F(" "));
display.display();
delay(300);
sleep();
// Draw a single pixel in white
//display.drawPixel(10, 10, SSD1306_WHITE);
wakeup();
delay(300);
center_eyes(true);
delay(300);
}
void loop() {
if(digitalRead(2) == LOW){
move_right_big_eye();
delay(300);
delay(300);
blink(10);
delay(300);
blink(20);
delay(300);
delay(300);
blink(10);
delay(300);
blink(20);
delay(300);
move_left_big_eye();
delay(300);
blink(10);
delay(300);
blink(20);
delay(300);
happy_eye();
delay(300);
loading();
delay(300);
}
while(digitalRead(2) == HIGH){
blink(10);
delay(300);
blink(20);
delay(5500);
}
}