[bitte um Test] Konstruktorwerte von globalem Objekt im setup einstellen

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);
}