Ups, habe mich in der Programm-Version vertan. Und die #define s müssen geändert werden.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "splash.h"
#define DC 16
#define CS SS
Adafruit_SSD1306 *display;// = Adafruit_SSD1306(128, 64, &Wire, -1, 1000000);
void setup(){
Serial.begin(115200);
Wire.begin(4, 5);
byte addr = 0;
for(byte i = 0x3C;i <= 0x3D;i++){
Wire.beginTransmission(i);
if(Wire.endTransmission() == 0){
addr = i;
break;
}
}
Serial.println(addr, HEX);
if(addr){
display = new Adafruit_SSD1306(128, 64, &Wire, -1, 1000000);
}
else{
display = new Adafruit_SSD1306(128, 64, &SPI, DC, -1, CS, 1000000);
}
(*display).begin(SSD1306_SWITCHCAPVCC, addr);
(*display).clearDisplay();
(*display).invertDisplay(true);
(*display).display();
delay(1000);
(*display).invertDisplay(false);
Serial.println("ready");
}
void filter(byte type, bool color, byte val){
switch(type){
case 0:
uint8_t len = random(25, 75);
uint8_t ran[len];
long _time = millis();
for(byte j = 0;j < len;j++){
ran[j] = 0;
for(byte k = 0;k < 8;k++){
ran[j] |= (random(255) < val) << k;
}
}
uint8_t *buf = (*display).getBuffer();
if(color){
for(uint16_t j = 0;j < 1024;j++){
*buf |= ran[j % len];
buf++;
}
}
else{
for(uint16_t j = 0;j < 1024;j++){
*buf &= ~ran[j % len];
buf++;
}
}
break;
}
}
void draw(int8_t x, int8_t y, byte val){
uint64_t time = millis();
(*display).clearDisplay();
(*display).drawBitmap(((128 - splash1_width) >> 1) + x, y, splash1_data, splash1_width, splash1_height, 1);
filter(0, BLACK, val);
(*display).display();
//Serial.println(uint32_t(millis() - time));
}
void loop(){
int8_t x = random(-32, 32);
int8_t y = random(-8, 4);
float i = 255;
while(i > 0){
uint64_t time = millis();
draw(x, y, i);
i -= map(float(millis() - time), 0, 1000, 0, 255);
}
draw(x, y, 0);
delay(2000);
i = 0;
while(i < 255){
uint64_t time = millis();
draw(x, y, i);
i += map(float(millis() - time), 0, 1000, 0, 255);
}
draw(x, y, 255);
delay(2000);
}