I am trying to add a SSD1306 OLED display to my current project but I am running into space issues. The SSD1306 requires 1kb of memory to run and I am having trouble getting that much space. I have already cut out a few variables and moved strings to flash. I do not know what else I can do.
//Packages
#include <SPI.h>
#include <Wire.h>
//#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Encoder.h>
#include <RH_ASK.h>
#include <SPI.h>
//Screen
//#define SCREEN_WIDTH 128 // OLED display width, in pixels
//#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
//#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(128, 64, &Wire, -1);
//Pins
//#define rotary1 2
//#define rotary2 3
//#define trans 6
//#define rotbutton 4
//Variables
int freq = 0;
String mode = "ON";
boolean radio = false;
Encoder myEnc(2, 3);
RH_ASK rf_driver;
void setup() {
Serial.begin(9600);
rf_driver.init();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.setTextSize(2);
display.setTextColor(WHITE);
display.display();
delay(1000);
pinMode(6, OUTPUT);
pinMode(4, INPUT_PULLUP);
}
void loop() {
//Serial.println(mode);
checkrotbutton();
checkradio();
updatedisplay();
if (mode.equals("ON")){
digitalWrite(6,HIGH);
}
else if (mode.equals("STRB")){
updaterotary();
digitalWrite(6,HIGH);
delay(freq);
digitalWrite(6,LOW);
delay(freq);
}
else if (mode.equals("RADIO")){
if(radio){
digitalWrite(6,HIGH);
}
else{
digitalWrite(6,LOW);
}
}
}
void updatedisplay(){
display.clearDisplay();
display.setCursor(0,0);
display.println(F("Mode:"));
display.setCursor(0,20);
display.println(F("Freq:"));
display.setCursor(0,40);
display.println(F("Radio:"));
display.setCursor(60,0);
display.print(mode);
display.setCursor(60,20);
display.print(freq);
display.setCursor(70,40);
if (radio == true) {display.print(F("ON"));}
else {display.print(F("OFF"));}
display.display();
}
void updaterotary(){
//int newPos = myEnc.read();
if (myEnc.read() != freq && myEnc.read() > 0){
freq = myEnc.read();
}
}
void checkrotbutton(){
if (digitalRead(4) == LOW){
if (mode.equals("ON")){
mode = "STRB";
delay(300);
}
else if (mode.equals("STRB")){
mode = "RADIO";
delay(300);
}
else if (mode.equals("RADIO")){
mode = "ON";
delay(300);
}
}
}
void checkradio(){
uint8_t buf[1];
uint8_t buflen = sizeof(buf);
// Check if received packet is correct size
if (rf_driver.recv(buf, &buflen))
{
if (buf == 49){
radio = false;
}
else if (buf == 50){
radio = true;
}
}
}