I2C monitor and SD card don't work together.

Hello, I have the following connection:
SD

GND>GND
VCC > 5V
MISO> D12
MOSI > D11
SCK >D13
CS >D4

Display
GND>GND
VIN > 5V
SCL> A5
SDA> A4

Here is my code:

#include <Encoder.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <SPI.h>
//#include <SD.h>
#include <SdFat.h>
SdFat SD;
File myFile;
const int chipSelect = 4;


#define OLED_ADDR   0x3C
#define BUTTON_PIN 7

Adafruit_SSD1306 display(-1);
#if (SSD1306_LCDHEIGHT != 64)
//#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

// Change these pin numbers to the pins connected to your encoder.
//   Best Performance: both pins have interrupt capability
//   Good Performance: only the first pin has interrupt capability
//   Low Performance:  neither pin has interrupt capability

Encoder knobRight(3, 2);
//   avoid using pins with LEDs attached

boolean ButtonWasUp = true;
boolean displayOn = false;
boolean setting = false;
boolean showSettings = false;
boolean settingNow = false;
long  encoder;
long oldEncoder = 0;
String textMenu;
String textUpperMenu;
int minTakenFocus;
int maxTakenFocus;
int minAnamorphicFocus;
int maxAnamorphicFocus;
Sd2Card card;

int menu = 0;

void setup() {
  //Serial.begin(115200);

  //pinMode(10, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  Serial.print("Initializing SD card...");

  if (!SD.begin(chipSelect)) {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
  SPI.transfer(0);
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
  display.display();
}



void loop() {
  if (displayOn == false) {
    boolean ButtonIsUp = digitalRead(BUTTON_PIN);
    if (ButtonWasUp && !ButtonIsUp) {
      delay(2000);
      ButtonIsUp = digitalRead(BUTTON_PIN);
      if (!ButtonIsUp) {
        if (displayOn == false) {
          displayOn = true;
        }


      }

    }

    ButtonWasUp = ButtonIsUp;

    myFile = SD.open("focuses.txt");
    if (myFile) {

      Serial.println("Reading");
      minTakenFocus = myFile.parseInt();
      maxTakenFocus = myFile.parseInt();
      minAnamorphicFocus = myFile.parseInt();
      maxAnamorphicFocus = myFile.parseInt();
      // close the file:
      myFile.close();
      Serial.println("not resetting");
       Serial.println(minTakenFocus);
  Serial.println(maxTakenFocus);
  Serial.println(minAnamorphicFocus);
  Serial.println(maxAnamorphicFocus);
    } 
    else {
      // if the file didn't open, print an error:
      Serial.println("error opening focuses.txt");

    }
  }
  if (displayOn) {


    encoder = knobRight.read();

    int difference = oldEncoder - encoder;

    if (difference > 2) {

      menu = menu + 1;



    }
    else if (difference < -2) {

      menu = menu - 1;

    }
    else {

    }
    oldEncoder = encoder;

    if (menu == 0) {
      buttonPress();

      if (setting) {
        textUpperMenu = "SET TAKEN LENS MIN";
        textMenu = analogRead(1);
        minTakenFocus = analogRead(1);
      }

      else {

        textMenu = "MIN focus";
        textUpperMenu = "SET TAKEN LENS";

      }
     

    }
    else if (menu == 1) {
      buttonPress();
      if (setting) {
        textUpperMenu = "SET TAKEN LENS MAX";
        textMenu = analogRead(1);
        maxTakenFocus = analogRead(1);

      }

      else {
        textMenu = "MAX focus";
        textUpperMenu = "SET TAKEN LENS";

      }
      
    }
    else if (menu == 2) {
      buttonPress();
      if (setting) {
        textUpperMenu = "SET ANAMORPHIC MIN";
        textMenu = analogRead(1);
        minAnamorphicFocus = analogRead(1);

      }

      else {
        textMenu = "MIN focus";
        textUpperMenu = "SET ANAMORPHIC";

      }
      

    }
    else if (menu == 3) {
      buttonPress();
      if (setting) {
        textUpperMenu = "SET ANAMORPHIC MAX";
        textMenu = analogRead(1);
        maxAnamorphicFocus = analogRead(1);

      }

      else {
        textMenu = "MAX focus";
        textUpperMenu = "SET ANAMORPHIC";

      }
      

    }
    else if (menu == 4) {
      textMenu = "EXIT";
      //set = false;
      setting = false;
      boolean ButtonIsUp = digitalRead(BUTTON_PIN);
      if (ButtonWasUp && !ButtonIsUp) {
        delay(10);
        ButtonIsUp = digitalRead(BUTTON_PIN);
        if (!ButtonIsUp) {

          displayOn = false;
          showSettings = true;

        }

      }
      ButtonWasUp = ButtonIsUp;
    }
    else if (menu > 4) {
      menu = 0;
    }
    else if (menu < 0) {
      menu = 4;
    }

    
    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(10, 12);
    display.print(textMenu);
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(10, 0);
    display.print(textUpperMenu);
    display.display();

  }
  else {


    if (showSettings) {

      showSettingsFunc();
      delay(2000);
      display.clearDisplay();
      display.display();
      delay(100);

      showSettingsFunc();
      delay(400);
      display.clearDisplay();
      display.display();
      delay(100);

      showSettingsFunc();
      delay(400);
      display.clearDisplay();
      display.display();
      delay(100);

      showSettingsFunc();
      delay(400);
      display.clearDisplay();
      display.display();



      showSettings = false;
    }
    else {
      display.clearDisplay();
      display.setTextSize(1);
      display.setTextColor(WHITE);
      display.setCursor(25, 0);
      display.print("FOCUS");
      int focus = analogRead(1) / 5;
      String focusString = String(focus);
      if (focus >= 190) {
        for (int t = 0; t <= 1000; t++) {


          float scale = 2 / (3 - cos(2 * t));
          int x = 25 * scale * cos(t);
          int y = 18 * scale * sin(2 * t) / 2;
          display.drawPixel(x + 50, y + 18, WHITE);
          display.drawPixel(x + 51, y + 19, WHITE);

        }
      }
      else {
        display.setTextSize(2);
        display.setCursor(25, 12);
        display.print(focusString);
        display.print(" m");

      }

      display.display();
    }




  }
  // if a character is sent from the serial monitor,
  // reset both back to zero.
  Serial.print("show settings ");
  Serial.println(showSettings);
  //  Serial.print("set ");
  //  Serial.println(set);
}

void buttonPress() {
  boolean ButtonIsUp = digitalRead(BUTTON_PIN);
  if (ButtonWasUp && !ButtonIsUp) {
    delay(10);
    ButtonIsUp = digitalRead(BUTTON_PIN);
    if (!ButtonIsUp) {

      if (setting) {
        setting = false;

      }
      else {
        setting = true;

      }
      if (displayOn == false) {
        displayOn = true;
      }

    }

  }
  ButtonWasUp = ButtonIsUp;
}
void showSettingsFunc() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 0);
  display.print("Lens min: ");
  display.print(minTakenFocus);
  display.setCursor(10, 8);
  display.print("Lens max: ");
  display.print(maxTakenFocus);
  display.setCursor(10, 16);
  display.print("Anamorph min: ");
  display.print(minAnamorphicFocus);
  display.setCursor(10, 24);
  display.print("Anamorph max: ");
  display.print(maxAnamorphicFocus);
  display.display();
  Serial.println(minTakenFocus);
  Serial.println(maxTakenFocus);
  Serial.println(minAnamorphicFocus);
  Serial.println(maxAnamorphicFocus);
}

SD and monitor work fine separately, but when I put code and these two module together monitor stops working. I used an SD library before and it was continuously restarting. With SdFat it's not restarting, but the monitor still doesn't work.

Which Arduino board are you using? When you compile, how much SRAM and flash are unused?

NANO v3