#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
// Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
delay(50);
display.invertDisplay(false);
}
const char _evobar[8] = {0X01, 0X03, 0X07, 0X0F, 0X1F, 0X3F, 0X7F, 0XFF,};
void loop() {
evoBar() ;
}
void evoBar() {
char temp[48];
for (int j = 0; j < 8; j++) {
for (int i = 0; i < 48; i++) {
temp[i] = _evobar[j];
}
ssd1306_writeBuffer(48, 40, 0, temp);
delayAndClear(100);
}
for (int j = 0; j < 8; j++) {
for (int i = 0; i < 48; i++) {
temp[i] = 0XFF-_evobar[j];
}
ssd1306_writeBuffer(48, 40, 0, temp);
delayAndClear(50);
}
}
/* Functions */
void delayAndClear(int x) {
display.display();
delay(x);
display.clearDisplay();
}
void ssd1306_writeBuffer(int size, int x, int y, uint8_t inarr[]) { // 比例, x座標, y座標*8, 暫存區陣列名稱
char BufferX = size;
int BufferAdd;
int tempX = x;
tempX = (x < -48) ? -48 : x;
tempX = (tempX > 128) ? 128 : tempX;
for (int i = 0; i < (BufferX / 8); i++) {
for (int j = 0; j < BufferX; j++) {
BufferAdd = j + i * 128 + tempX + y * 128;
if ((tempX == -48) || tempX == 128) {
}
else if (BufferAdd < 0) {
}
else if (tempX < 0) {
if ((j + i * 128 + x + y * 128) % 128 < 63) {
display.getBuffer()[BufferAdd] = inarr[i * BufferX + j];
}
}
else if (tempX > 79) {
if ((j + i * 128 + x + y * 128) % 128 >= 63) {
display.getBuffer()[BufferAdd] = inarr[i * BufferX + j];
}
}
else {
display.getBuffer()[BufferAdd] = inarr[i * BufferX + j];
}
}
}
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
oled1:GND
oled1:VCC
oled1:SCL
oled1:SDA