Adafruit 0.96 display won't work with my code

I am using Arduino UNO R3,
pin connections to the display are:
Vcc - 5V
Ground - Ground
SDA - A4
SCL - A5

It doesn't work with this code:

#include <dht.h>
#include <PMsensor.h>
#include <RTClib.h>
#include <SD.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

int CS = 10;
File file;

RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

dht DHT;
#define dht_apin A1 // Analog Pin sensor is connected to

PMsensor PM;

void setup() {
  Serial.begin(9600);
  Serial.println("NOTUS");

  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(CS, OUTPUT); // chip select pin is set as OUTPUT
  PM.init(9, A0);

  #ifndef ESP8266
  while (!Serial); // wait for serial port to connect. Needed for native USB
  #endif

  if (!rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    while (1) delay(10);
  }

  if (!SD.begin(CS)) {
    Serial.println("Could not initialize SD card.");
  }

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }

  delay(100);
  display.clearDisplay();
}


void loop(){
  //Start of Program 
  DHT.read11(dht_apin); 
  Serialwrite();
  Filewrite();
  Displaywrite();
}

void Serialwrite()
{
  float filter_Data = PM.read(0.1);

  Serial.print("Humidity:");
  Serial.print(DHT.humidity);
  Serial.print(",");
  Serial.print("Temperature:");
  Serial.print(DHT.temperature); 
  Serial.print(",");
  Serial.print("PM 2.5:");
  Serial.println(filter_Data);
} 

void Filewrite()
{
  DateTime now = rtc.now();
  float filter_Data = PM.read(0.1);

  file = SD.open("notus.txt", FILE_WRITE);

  if (file) {
  file.print("| ");
  file.print(now.year(), DEC);
  file.print('/');
  file.print(now.month(), DEC);
  file.print('/');
  file.print(now.day(), DEC);
  file.print(" (");
  file.print(daysOfTheWeek[now.dayOfTheWeek()]);
  file.print(") ");
  file.print(now.hour(), DEC);
  file.print(':');
  file.print(now.minute(), DEC);
  file.print(':');
  file.print(now.second(), DEC);

  file.print(" | Current humidity = ");
  file.print(DHT.humidity);
  file.print("%");
  file.print(" Temperature = ");
  file.print(DHT.temperature); 
  file.print("°C ");

  file.print("| PM 2.5 : ");
  file.print(filter_Data);
  file.println("µg/m³ |");

  file.close();

  delay(800);
  }

  else {
  Serial.println("Could not open file");
  }
}

void Displaywrite()
{
  display.clearDisplay();

  display.setTextSize(1.5);
  display.setTextColor(SSD1306_WHITE);

  display.setCursor(0, 0);
  display.print("Humidity: ");
  display.print(DHT.humidity);

  display.setCursor(0, 10);
  display.print("Temperature: ");
  display.print(DHT.temperature);

  display.setCursor(0, 20);
  display.print("PM 2.5: ");
  display.print(PM.read(0.1));

  display.display();
}

But it does work with:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(9600);

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }

  delay(2000);  // Pause for 2 seconds
  display.clearDisplay();
}

void loop() {
  display.clearDisplay();

  display.setTextSize(1.5);
  display.setTextColor(SSD1306_WHITE);

  display.setCursor(0, 0);
  display.print("Humidity: ");


  display.setCursor(0, 10);
  display.print("Temperature: ");

  display.setCursor(0, 20);
  display.print("PM 2.5: ");


  display.display();
}

What am I doing wrong?
Please help

Also, I receive 'SSD1306 allocation failed' on the serial monitor from my fail safe:

if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);

This topic is a duplicate of Adafruit 0.96 display won't work with my code. Cross posting is not permitted in the forum, and has been reported.

It was an accident, how do i delete one of them?
I'm new to the forum

#include <dht.h>
#include <PMsensor.h>
#include <RTClib.h>
#include <SD.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

int CS = 10;
File file;

RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

dht DHT;
#define dht_apin A1 // Analog Pin sensor is connected to

PMsensor PM;

#define screen_width 128
#define screen_height 64

Adafruit_SSD1306 display(screen_width, screen_height);

void setup(){
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(CS, OUTPUT); // chip select pin is set as OUTPUT

  delay(500);//Delay to let system boot
  Serial.println("NOTUS");

  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  PM.init(9, A0);
  
  #ifndef ESP8266
  while (!Serial); // wait for serial port to connect. Needed for native USB
  #endif

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    while (1) delay(10);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running, let's set the time!");
  }

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    while (1) delay(10);
  }

  if (!SD.begin(CS)) { // Initialize SD card
    Serial.println("Could not initialize SD card."); // if return value is false, something went wrong.
  }
}

void loop(){
  // Start of Program 
  delay(200); // Update and writing interval basically.
  DHT.read11(dht_apin); 
  Serialwrite();
  Filewrite();
  displaywrite();
}

void displaywrite()
{
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);

  display.setCursor(0, 0);
  display.print("Humidity: ");
  display.print(DHT.humidity);
  display.print("%");

  display.setCursor(0, 10);
  display.print("Temperature: ");
  display.print(DHT.temperature);
  display.print("C");

  display.setCursor(0, 20);
  display.print("PM 2.5: ");
  display.print(PM.read(0.1));
  display.print("ug/m^3");

  display.display();
}

void Serialwrite()
{
  float filter_Data = PM.read(0.1);

  Serial.print("Humidity:");
  Serial.print(DHT.humidity);
  Serial.print(",");
  Serial.print("Temperature:");
  Serial.print(DHT.temperature); 
  Serial.print(",");
  Serial.print("PM 2.5:");
  Serial.println(filter_Data);
} 

void Filewrite()
{
  DateTime now = rtc.now();
  float filter_Data = PM.read(0.1);

  file = SD.open("notus.txt", FILE_WRITE);

  if (file) {
    file.print("| ");
    file.print(now.year(), DEC);
    file.print('/');
    file.print(now.month(), DEC);
    file.print('/');
    file.print(now.day(), DEC);
    file.print(" (");
    file.print(daysOfTheWeek[now.dayOfTheWeek()]);
    file.print(") ");
    file.print(now.hour(), DEC);
    file.print(':');
    file.print(now.minute(), DEC);
    file.print(':');
    file.print(now.second(), DEC);

    file.print(" | Current humidity = ");
    file.print(DHT.humidity);
    file.print("%");
    file.print(" Temperature = ");
    file.print(DHT.temperature); 
    file.print("°C ");

    file.print("| PM 2.5 : ");
    file.print(filter_Data);
    file.println("µg/m³ |");

    file.close();

    delay(800);
  } else {
    Serial.println("Could not open file");
  }
}

Please help

Which Arduino board are you using and how is the display connected to it ?

Sorry for late reply

It's Arduino Uno R3, the pins are as follows
Vcc - 5v
Gnd - Gnd
SDA - A4
SCL - A5

It gives me error 'SSD1306 allocation failed'

I dont know if this helps but,
the display works with this code

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  Serial.begin(9600);

  if (!display.begin(SSD1306_ADDRESS, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }

  delay(2000);  // Pause for 2 seconds
  display.clearDisplay();
}

void loop() {
  display.clearDisplay();

  // Generate two random variables
  int randomVar1 = random(0, 100);
  int randomVar2 = random(0, 100);

  // Display the random variables on the OLED
  display.setTextSize(2);
  display.setTextColor(SSD1306_WHITE);

  display.setCursor(10, 10);
  display.print("Var1: ");
  display.print(randomVar1);

  display.setCursor(10, 40);
  display.print("Var2: ");
  display.print(randomVar2);

  display.display();

  delay(2000);  // Pause for 2 seconds before updating display
}

but not this code

#include <dht.h>
#include <PMsensor.h>
#include <RTClib.h>
#include <SD.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

int CS = 10;
File file;

RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

dht DHT;
#define dht_apin A1 // Analog Pin sensor is connected to

PMsensor PM;

void setup() {
  Serial.begin(9600);
  Serial.println("NOTUS");

  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(CS, OUTPUT); // chip select pin is set as OUTPUT
  PM.init(9, A0);

  #ifndef ESP8266
  while (!Serial); // wait for serial port to connect. Needed for native USB
  #endif

  if (!rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    while (1) delay(10);
  }

  if (!SD.begin(CS)) {
    Serial.println("Could not initialize SD card.");
  }

  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }

  delay(100);
  display.clearDisplay();

  Serial.println("Display initialization successful");
}


void loop(){
  //Start of Program 
  DHT.read11(dht_apin); 
  Serialwrite();
  Filewrite();
  Displaywrite();
}

void Serialwrite()
{
  float filter_Data = PM.read(0.1);

  Serial.print("Humidity:");
  Serial.print(DHT.humidity);
  Serial.print(",");
  Serial.print("Temperature:");
  Serial.print(DHT.temperature); 
  Serial.print(",");
  Serial.print("PM 2.5:");
  Serial.println(filter_Data);
} 

void Filewrite()
{
  DateTime now = rtc.now();
  float filter_Data = PM.read(0.1);

  file = SD.open("notus.txt", FILE_WRITE);

  if (file) {
  file.print("| ");
  file.print(now.year(), DEC);
  file.print('/');
  file.print(now.month(), DEC);
  file.print('/');
  file.print(now.day(), DEC);
  file.print(" (");
  file.print(daysOfTheWeek[now.dayOfTheWeek()]);
  file.print(") ");
  file.print(now.hour(), DEC);
  file.print(':');
  file.print(now.minute(), DEC);
  file.print(':');
  file.print(now.second(), DEC);

  file.print(" | Current humidity = ");
  file.print(DHT.humidity);
  file.print("%");
  file.print(" Temperature = ");
  file.print(DHT.temperature); 
  file.print("°C ");

  file.print("| PM 2.5 : ");
  file.print(filter_Data);
  file.println("µg/m³ |");

  file.close();

  delay(800);
  }

  else {
  Serial.println("Could not open file");
  }
}

void Displaywrite()
{
  display.clearDisplay();

  display.setTextSize(2);
  display.setTextColor(SSD1306_WHITE);

  display.setCursor(0, 0);
  display.print("Humidity: ");
  display.print(DHT.humidity);

  display.setCursor(0, 10);
  display.print("Temperature: ");
  display.print(DHT.temperature);

  display.setCursor(0, 20);
  display.print("PM 2.5: ");
  display.print(PM.read(0.1));

  display.display();
}

I'm in a hurry, please help

The display library needs 1024 bytes of free ram for use as a buffer.

From How to get the best out of this forum

Don't bump!

Don't bump your topic after an hour. Because of the different time zones, the person who knows the answer may be asleep, or away for the day or maybe on holiday. Maybe after a couple of days, but even then think about whether you have provided enough information and asked a question that can be answered. You could even ask us 'what else can I provide in order to get some help?'.

What do I do now?
Is there any other library that I can use that doesn't require buffer?

Threads merged.

Thank you

Had you used the forum search to look for SSD1306 allocation failed 7 hours ago, you might have discovered the answer for yourself back then, tried switching to a text only SSD1306 library and had things working already.

I'm new, can you just be a bit more nice?

Pointing out how you could have saved yourself hours of waiting by displaying a little initiative and taking advantage of the available resources is inappropriate? Giving you the answer you were looking for is inappropriate? Very well then. Good luck and good bye.

Sorry, man it's been a rough day
I apologize

Thank you for a reply it saved a ton of efforts

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.