/*
* Tiny4kOLED - Drivers for SSD1306 controlled dot matrix OLED/PLED 128x32 displays
*
* Based on ssd1306xled, re-written and extended by Stephen Denne
* from 2017-04-25 at https://github.com/datacute/Tiny4kOLED
*
*/
// Choose your I2C implementation before including Tiny4kOLED.h
// The default is selected is Wire.h
// To use the Wire library:
// This example compiles to 4402 bytes of program storage space
// and 88 bytes of dynamic memory.
//#include <Wire.h>
// To use the Adafruit's TinyWireM library:
// (Saves about 350 bytes and 20 bytes of RAM over Wire.h)
// (If you see a strange dot pattern then upgrade the TinyWireM
// library to get the buffer overflow fix.)
#include <TinyWireM.h>
// To use the TinyI2C library from https://github.com/technoblogy/tiny-i2c
// (Saves about 570 bytes and 40 bytes of RAM over Wire.h)
//#include <TinyI2CMaster.h>
// The blue OLED screen requires a long initialization on power on.
// The code to wait for it to be ready uses 20 bytes of program storage space
// If you are using a white OLED, this can be reclaimed by uncommenting
// the following line (before including Tiny4kOLED.h):
//#define TINY4KOLED_QUICK_BEGIN
#include <Tiny4kOLED.h>
void setup() {
// Test by writing to the entire memory space of the SSD1306
oled.begin(128, 32, sizeof(tiny4koled_init_128x32br), tiny4koled_init_128x32br);
oled.clear();
oled.setFont(FONT8X16);
oled.on();
}
void loop() {
// normalEyes();
// delay(2000);
// happyEyes();
// delay(2000);
// squintEyes();
// delay(2000);
// annoyedEyes();
// delay(2000);
// sadEyes();
// delay(2000);
// sleepyEyes();
// delay(2000);
// relaxedEyes();
// delay(2000);
// lookLeft();
// delay(2000);
// lookRight();
// delay(2000);
// lookUp();
// delay(2000);
// lookDown();
// delay(2000);
// confusedEyes();
// delay(2000);
// closedEyes();
// oled.clear();
idleBlink();
// happyEyes();
// delay(2000);
// oled.clear();
}
void animateEyes(int yStart,int yEnd,int cursorXStart,int cursorYStartOffset, char pattern[][2], int patternSize, bool disableClear) {
if (!disableClear) {
oled.clear();
}
for (uint8_t i = yStart; i < yEnd; i++) {
oled.setCursor(cursorXStart, i + cursorYStartOffset);
oled.startData();
for (int i = 0; i < patternSize; i++) {
oled.repeatData(pattern[i][0], pattern[i][1]);
}
oled.endData();
}
}
// void normalEyes2() {
// char myPattern[][2] = {{0xFF, 40}, {0x00, 30}, {0xFF, 40}};
// animation(0, 4, 8, 0, myPattern, 3);
// }
void normalEyes() {
oled.clear();
for (uint8_t i = 0; i < 4; i++){
oled.setCursor(8,i);
oled.startData();
oled.repeatData(0xFF, 40);
oled.repeatData(0x00, 30);
oled.repeatData(0xFF, 40);
oled.endData();
}
}
void squintEyes() {
oled.clear();
for (uint8_t i = 0; i < 2; i++){
oled.setCursor(8,i);
oled.startData();
oled.repeatData(0xFF, 40);
oled.repeatData(0x00, 30);
oled.repeatData(0xFF, 40);
oled.endData();
}
}
void annoyedEyes() {
oled.clear();
for (uint8_t i = 0; i < 1; i++){
oled.setCursor(8,i);
oled.startData();
oled.repeatData(0xFF, 40);
oled.repeatData(0x00, 30);
oled.repeatData(0xFF, 40);
oled.endData();
}
}
void relaxedEyes() {
oled.clear();
for (uint8_t i = 1; i < 4; i++){
oled.setCursor(8,i);
oled.startData();
oled.repeatData(0xFF, 40);
oled.repeatData(0x00, 30);
oled.repeatData(0xFF, 40);
oled.endData();
}
}
void sadEyes() {
oled.clear();
for (uint8_t i = 2; i < 4; i++){
oled.setCursor(8,i);
oled.startData();
oled.repeatData(0xFF, 40);
oled.repeatData(0x00, 30);
oled.repeatData(0xFF, 40);
oled.endData();
}
}
void sleepyEyes() {
oled.clear();
for (uint8_t i = 3; i < 4; i++){
oled.setCursor(8,i);
oled.startData();
oled.repeatData(0xFF, 40);
oled.repeatData(0x00, 30);
oled.repeatData(0xFF, 40);
oled.endData();
}
}
void happyEyes() {
char myPattern[][2] = {{0x00, 5}, {0xFF, 30}, {0x00, 40}, {0xFF, 30}, {0x00, 5}};
char myPattern2[][2] = {{0xFF, 10}, {0x00, 20}, {0xFF, 10}, {0x00, 30}, {0xFF, 10}, {0x00, 20}, {0xFF, 10}};
animateEyes(0, 1, 8, 0, myPattern, 5, false);
animateEyes(0, 1, 8, 1, myPattern2, 7, true);
// oled.clear();
// for (uint8_t i = 0; i < 1; i++){
// oled.setCursor(8,i);
// oled.startData();
// oled.repeatData(0x00, 5);
// oled.repeatData(0xFF, 30);
// oled.repeatData(0x00, 40);
// oled.repeatData(0xFF, 30);
// oled.repeatData(0x00, 5);
// oled.endData();
// oled.setCursor(8,i+1);
// oled.startData();
// oled.repeatData(0xFF, 10);
// oled.repeatData(0x00, 20);
// oled.repeatData(0xFF, 10);
// oled.repeatData(0x00, 30);
// oled.repeatData(0xFF, 10);
// oled.repeatData(0x00, 20);
// oled.repeatData(0xFF, 10);
// oled.endData();
// }
}
void idleBlink() {
normalEyes();
delay(3000);
closedEyes();
delay(50);
normalEyes();
delay(1000);
closedEyes();
delay(150);
relaxedEyes();
delay(2000);
normalEyes();
delay(3000);
relaxedEyes();
delay(2000);
happyEyes();
delay(2000);
lookLeft();
delay(2000);
lookRight();
delay(2000);
lookUp();
delay(2000);
lookDown();
delay(2000);
closedEyes();
delay(50);
normalEyes();
delay(3000);
closedEyes();
delay(100);
confusedEyes();
delay(2000);
closedEyes();
delay(50);
happyEyes();
delay(2000);
// squintEyes();
// delay(2000);
// annoyedEyes();
// delay(2000);
// sadEyes();
// delay(2000);
// sleepyEyes();
// delay(2000);
// relaxedEyes();
// delay(2000);
}
void lookLeft() {
oled.clear();
for (uint8_t i = 1; i < 4; i++){
oled.setCursor(8,i);
oled.startData();
oled.repeatData(0xFF, 30);
oled.repeatData(0x00, 30);
oled.repeatData(0xFF, 30);
oled.endData();
}
}
void lookRight() {
oled.clear();
for (uint8_t i = 1; i < 4; i++){
oled.setCursor(8,i);
oled.startData();
oled.repeatData(0x00, 20);
oled.repeatData(0xFF, 30);
oled.repeatData(0x00, 30);
oled.repeatData(0xFF, 30);
oled.endData();
}
}
void lookUp() {
oled.clear();
for (uint8_t i = 0; i < 3; i++){
oled.setCursor(8,i);
oled.startData();
oled.repeatData(0x00, 10);
oled.repeatData(0xFF, 30);
oled.repeatData(0x00, 30);
oled.repeatData(0xFF, 30);
oled.endData();
}
}
void lookDown() {
oled.clear();
for (uint8_t i = 2; i < 4; i++){
oled.setCursor(8,i);
oled.startData();
oled.repeatData(0x00, 10);
oled.repeatData(0xFF, 30);
oled.repeatData(0x00, 30);
oled.repeatData(0xFF, 30);
oled.endData();
}
}
void closedEyes() {
oled.clear();
oled.setCursor(8,2);
oled.startData();
oled.repeatData(0xFF, 40);
oled.repeatData(0x00, 30);
oled.repeatData(0xFF, 40);
oled.endData();
}
void confusedEyes() {
oled.clear();
for (uint8_t i = 0; i < 4; i++){
oled.setCursor(8,i);
oled.startData();
if (i<1){
oled.repeatData(0x00, 40);
} else {
oled.repeatData(0xFF, 40);
}
oled.repeatData(0x00, 30);
oled.repeatData(0xFF, 40);
oled.endData();
}
}