ARDUINO UNO R3中<irremote.h>和<Adafruit_GFX.h>产生冲突

问题遇到的现象和发生背景 运行程序不报错,但是oled12864和红外接收器无法正常使用
问题相关代码,请勿粘贴截图

#include<IRremote.h>

#include <SPI.h>
//#include <Wire.h>//i2c通讯
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

运行结果及报错内容 红外接收器和oled12864都无法工作
我的解答思路和尝试过的方法 通过控制变量法一个个试,使两个东西无法正常工作的问题就在几个库函数的冲突之中

百度也没有搜到类似的情况

我想要达到的结果 在uno上同时正常使用红外接收器和oled12864

下面是红外解码的代码

/*****************
基本的按键识别与变量编写完毕,下一步需要对oled的程序进行修改



******************/


#include<IRremote.h>
int RECV_PIN = 11;   //红外线接收器OUTPUT端接在pin 11
IRrecv ir_recv(RECV_PIN);   // 定义IRrecv 对象来接收红外线信号
decode_results results;   //解码结果放在decode_results构造的对象results里
int enter  = 99;//用于输入坐标的变量0123456789
int mode   = 0;//用于更改模式的变量ch-/ch/ch+
int go     = 0;//用于步骤更改的变量prev/next
int y_n    = 0;//用于确认与取消的变量play/eq
int window = 0;//用于切换界面的变量fol-/fol+

void setup()
{
  Serial.begin(9600);
  ir_recv.enableIRIn(); //    启动红外解码
}
void loop() 
{
  
  recv();

  }

void recv()
{
  if(ir_recv.decode(&results))   // 解码成功,收到一组红外线信号
 {    
     
   if(results.bits == 32 )
  {
    Serial.print("irCode: ");
    
    if(results.value == 16738455) //按键0
    {
      enter = 0;
      Serial.print("0");
        }
    
    if(results.value == 16724175) //按键1
    {
      enter = 1;
      Serial.print("1");
        }
   //下面的还没有编写//已编写
    if(results.value == 16718055) //按键2
    {
      enter = 2;
      Serial.print("2");
        }
       
    if(results.value == 16743045) //按键3
    {
      enter = 3;
      Serial.print("3");
        }
        
    if(results.value == 16716015) //按键4
    {
      enter = 4;
      Serial.print("4");
        }
         
    if(results.value == 16726215) //按键5
    {
      enter = 5;
      Serial.print("5");
        }
         
    if(results.value == 16734885) //按键6
    {
      enter = 6;
      Serial.print("6");
        }
         
    if(results.value == 16728765) //按键7
    {
      enter = 7;
      Serial.print("7");
        }
        
    if(results.value == 16730805) //按键8
    {
      enter = 8;
      Serial.print("8");
        }
         
    if(results.value == 16732845) //按键9
    {
      enter = 9;
      Serial.print("9");
        }
         
    if(results.value == 16753245) //按键ch-     功能一
    {
      mode = 1;
      Serial.print("ch-");
        }
         
    if(results.value == 16736925) //按键ch      功能二
    {
      mode = 2;
      Serial.print("ch");
        }
         
    if(results.value == 16769565) //按键ch+     功能三
    {
      mode = 3;
      Serial.print("ch+");
        }
     
    if(results.value == 16720605) //按键prev    上一步
    {
      go = 1;
      Serial.print("prev");
        }
         
    if(results.value == 16712445) //按键next    下一步
    {
      go = 2;
      Serial.print("next");
        }
         
    if(results.value == 16761405) //按键play/pause    确认
    {
      y_n = 1;
      Serial.print("play/pause");
        }
    //下边暂未设计功能       
    if(results.value == 16769055) //按键-
    {
      
      Serial.print("-");
        }
    //下边暂未设计功能      
    if(results.value == 16754775) //按键+    
    {
      enter = 0;
      Serial.print("+");
        }
         
    if(results.value == 16748655) //按键eq    取消
    {
      y_n = 2;
      Serial.print("eq");
        }
     
    if(results.value == 16750695) //按键fol-  显示上一界面
    {
      window = 1;
      Serial.print("fol-");
        }  
          
    if(results.value == 16756815) //按键fol+  显示下一界面
    {
      window = 2;
      Serial.print("fol+");
        }
                        
    //Serial.print(results.value,HEX);    // 输出红外线解码结果(十六进制)    
    //results.value 是unsigned long型,头文件有介绍
    Serial.print(",  bits: ");         
    Serial.println(results.bits);     // 红外线码元位数   
    Serial.print("mode:");
    Serial.println(mode);
    Serial.print("enter:");
    Serial.println(enter);
    
  }
ir_recv.resume();//重置results,接受下一信号

 }   
}

下面是显示屏的代码

/*
开始界面已经写好,需要先对遥控器的代码进行修改才可以做下一步的界面修改





*/

//#include<IRremote.h>就是此语句导致了显示屏无法运行

#include <SPI.h>
//#include <Wire.h>//i2c通讯
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "text.h"

#define SCREEN_WIDTH 128 //设置oled宽度(像素)
#define SCREEN_HEIGHT 64 //设置oled高度(像素)

//自定义重置针脚,ssd1306库必要的初始化
#define OLED_MOSI   4
#define OLED_CLK   8
#define OLED_DC    7
#define OLED_CS    12
#define OLED_RESET 13
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
  OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);


void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC);
  display.setTextColor(WHITE);
  display.setTextSize(1.5);
  jie_shao();
  start_Screen();

}

void loop() {

 
  
}


void jie_shao(void){

  display.clearDisplay();
  display.drawBitmap(34, 0, ji, 16, 16, 1);
  display.drawBitmap(74, 0, yu, 16, 16, 1);
  display.display();
  delay(500);
  display.drawBitmap(20 * 0, 20, u, 8, 16, 1);
  display.drawBitmap(20 * .5, 20, w, 8, 16, 1);
  display.drawBitmap(20 * 1,20, b, 8, 16, 1);
  display.drawBitmap(20 * 1.5, 20, tian, 16, 16, 1);
  display.drawBitmap(20 * 2.5, 20, xian, 16, 16, 1);
  display.drawBitmap(20 * 3.5, 20, ce, 16, 16, 1);
  display.drawBitmap(20 * 4.5, 20, ju, 16, 16, 1);
  display.drawBitmap(20 * 5.5, 20, de, 16, 16, 1);
  display.display();
  delay(500);
  display.drawBitmap(4+20 * 1,40, ding, 16, 16, 1);
  display.drawBitmap(4+20 * 2, 40, wei, 16, 16, 1);
  display.drawBitmap(4+20 * 3, 40, xi, 16, 16, 1);
  display.drawBitmap(4+20 * 4, 40, tong, 16, 16, 1);
  display.display();
  delay(1500);
  
  display.clearDisplay();
  display.drawBitmap(20 * 0, 0, dian, 16, 16, 1);
  display.drawBitmap(20 * 1, 0, zi, 16, 16, 1);
  display.drawBitmap(40 + 9 * 0, 0, num1, 8, 16, 1);
  display.drawBitmap(40 + 9 * 1, 0, num8, 8, 16, 1);
  display.drawBitmap(40 + 9 * 2, 0, num0, 8, 16, 1);
  display.drawBitmap(40 + 9 * 3, 0, num4, 8, 16, 1);
  
  display.drawBitmap(20 * 0, 20, shen, 16, 16, 1);
  display.drawBitmap(20 * 1, 20, zu, 16, 16, 1);
  display.drawBitmap(20 * 2, 20, ning, 16, 16, 1);
  
  display.drawBitmap(9 * 0, 40, num2, 8, 16, 1);
  display.drawBitmap(9 * 1, 40, num0, 8, 16, 1);
  display.drawBitmap(9 * 2, 40, num1, 8, 16, 1);
  display.drawBitmap(9 * 3, 40, num8, 8, 16, 1);
  display.drawBitmap(9 * 4, 40, num0, 8, 16, 1);
  display.drawBitmap(9 * 5, 40, num8, 8, 16, 1);
  display.drawBitmap(9 * 6, 40, num1, 8, 16, 1);
  display.drawBitmap(9 * 7, 40, num3, 8, 16, 1);
  display.drawBitmap(9 * 8, 40, num1, 8, 16, 1);
  display.drawBitmap(9 * 9, 40, num3, 8, 16, 1);
  display.drawBitmap(9 * 10, 40, num2, 8, 16, 1);
  display.display();
  delay(1000);

}

//开始界面播放系统遥控器介绍,模式介绍并进入选择模式界面
void start_Screen(){
  
  display.clearDisplay();
  display.setCursor(0, 0);
  display.print("The system uses the  combination of infrared remote controller and receiver recommended by Arduino, and the keys are rectified.");
  display.display();
  delay(2500);//后期在界面加入帮助按键解决看此页面无法重复播放的问题

  display.clearDisplay();
  display.setCursor(0, 0);
  display.print("There are three modesin this system. The  first is the preset  3701 map mode, the   second is the non    preset positioning   mode, and the third  is the large map mode ");
  display.display();
  delay(2500);
  
  display.clearDisplay();
  display.setCursor(0, 0);
  display.print("Please enter the       ch- /  ch   / ch+     to choose the     mode1 / mode2 / mode3 ");
  display.display();
  delay(2500);
  }

显示屏的头文件


static const unsigned char PROGMEM shen[] = {
   0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,
   0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,/*"申",0*/
}; 

static const unsigned char PROGMEM zu[] = {
   0x20,0x00,0x11,0xF8,0x11,0x08,0xF9,0x08,0x09,0x08,0x11,0xF8,0x11,0x08,0x39,0x08,
   0x55,0x08,0x95,0xF8,0x11,0x08,0x11,0x08,0x11,0x08,0x11,0x08,0x17,0xFE,0x10,0x00,/*"祖",1*/
}; 

static const unsigned char PROGMEM ning[] = {
  0x02,0x00,0x01,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x00,0x00,0x3F,0xF8,
  0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,/*"宁",2*/
}; 

static const unsigned char PROGMEM ding[] = {
0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x00,0x00,0x3F,0xF8,0x01,0x00,
0x01,0x00,0x11,0x00,0x11,0xF8,0x11,0x00,0x11,0x00,0x29,0x00,0x47,0xFE,0x80,0x00,/*"定",0*/
};

static const unsigned char PROGMEM wei[] = {
0x08,0x80,0x08,0x40,0x08,0x40,0x10,0x00,0x17,0xFC,0x30,0x00,0x30,0x08,0x52,0x08,
0x92,0x08,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x20,0x10,0x20,0x1F,0xFE,0x10,0x00,/*"位",1*/
};

static const unsigned char PROGMEM xi[] = {
0x00,0xF8,0x3F,0x00,0x04,0x00,0x08,0x20,0x10,0x40,0x3F,0x80,0x01,0x00,0x06,0x10,
0x18,0x08,0x7F,0xFC,0x01,0x04,0x09,0x20,0x11,0x10,0x21,0x08,0x45,0x04,0x02,0x00,/*"系",2*/
};

static const unsigned char PROGMEM tong[] = {
0x10,0x40,0x10,0x20,0x20,0x20,0x23,0xFE,0x48,0x40,0xF8,0x88,0x11,0x04,0x23,0xFE,
0x40,0x92,0xF8,0x90,0x40,0x90,0x00,0x90,0x19,0x12,0xE1,0x12,0x42,0x0E,0x04,0x00,/*"统",3*/
};

static const unsigned char PROGMEM ji[] = {
0x08,0x20,0x08,0x20,0x7F,0xFC,0x08,0x20,0x0F,0xE0,0x08,0x20,0x0F,0xE0,0x08,0x20,
0xFF,0xFE,0x08,0x20,0x11,0x10,0x21,0x08,0xCF,0xE6,0x01,0x00,0x01,0x00,0x3F,0xF8,/*"基",0*/
};

static const unsigned char PROGMEM yu[] = {
0x00,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,/*"于",1*/
};

static const unsigned char PROGMEM de[] = {
0x10,0x40,0x10,0x40,0x20,0x40,0x7E,0x7C,0x42,0x84,0x42,0x84,0x43,0x04,0x42,0x44,
0x7E,0x24,0x42,0x24,0x42,0x04,0x42,0x04,0x42,0x04,0x7E,0x04,0x42,0x28,0x00,0x10,/*"的",0*/
};

static const unsigned char PROGMEM tian[] = {
0x00,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,
0x02,0x80,0x02,0x80,0x04,0x40,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x08,0xC0,0x06,/*"天",1*/
};

static const unsigned char PROGMEM xian[] = {
0x10,0x50,0x10,0x48,0x20,0x40,0x24,0x5C,0x45,0xE0,0xF8,0x40,0x10,0x5E,0x23,0xE0,
0x40,0x44,0xFC,0x48,0x40,0x30,0x00,0x22,0x1C,0x52,0xE0,0x8A,0x43,0x06,0x00,0x02,/*"线",2*/
};

static const unsigned char PROGMEM ce[] = {
0x00,0x04,0x27,0xC4,0x14,0x44,0x14,0x54,0x85,0x54,0x45,0x54,0x45,0x54,0x15,0x54,
0x15,0x54,0x25,0x54,0xE5,0x54,0x21,0x04,0x22,0x84,0x22,0x44,0x24,0x14,0x08,0x08,/*"测",3*/
};

static const unsigned char PROGMEM ju[] = {
0x00,0x00,0x7D,0xFE,0x45,0x00,0x45,0x00,0x45,0x00,0x7D,0xFC,0x11,0x04,0x11,0x04,
0x5D,0x04,0x51,0x04,0x51,0xFC,0x51,0x00,0x5D,0x00,0xE1,0x00,0x01,0xFE,0x00,0x00,/*"距",4*/
};

static const unsigned char PROGMEM u[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x42,0x42,0x42,0x42,0x46,0x3B,0x00,0x00,/*"u",0*/
};

static const unsigned char PROGMEM w[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0x89,0x4A,0x5A,0x54,0x24,0x24,0x00,0x00,/*"w",1*/
};

static const unsigned char PROGMEM b[] = {
0x00,0x00,0x00,0x00,0xC0,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x64,0x58,0x00,0x00,/*"b",2*/
};


static const unsigned char PROGMEM num0[] = {
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*"0",0*/
};

static const unsigned char PROGMEM num1[] = {
0x00,0x00,0x00,0x08,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,/*"1",1*/
};

static const unsigned char PROGMEM num2[] = {
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x02,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,/*"2",2*/
};

static const unsigned char PROGMEM num3[] = {
0x00,0x00,0x00,0x3C,0x42,0x42,0x02,0x04,0x18,0x04,0x02,0x42,0x42,0x3C,0x00,0x00,/*"3",3*/
};

static const unsigned char PROGMEM num4[] = {
0x00,0x00,0x00,0x04,0x0C,0x0C,0x14,0x24,0x24,0x44,0x7F,0x04,0x04,0x1F,0x00,0x00,/*"4",4*/
};

static const unsigned char PROGMEM num5[] = {
0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x78,0x44,0x02,0x02,0x42,0x44,0x38,0x00,0x00,/*"5",5*/
};

static const unsigned char PROGMEM num6[] = {
0x00,0x00,0x00,0x18,0x24,0x40,0x40,0x5C,0x62,0x42,0x42,0x42,0x22,0x1C,0x00,0x00,/*"6",6*/
};

static const unsigned char PROGMEM num7[] = {
0x00,0x00,0x00,0x7E,0x42,0x04,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x00,0x00,/*"7",7*/
};

static const unsigned char PROGMEM num8[] = {
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,/*"8",8*/
};

static const unsigned char PROGMEM num9[] = {
0x00,0x00,0x00,0x38,0x44,0x42,0x42,0x42,0x46,0x3A,0x02,0x02,0x24,0x18,0x00,0x00,/*"9",9*/
};


static const unsigned char PROGMEM dian[] = {
0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,
0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x0A,0x01,0x02,0x01,0x02,0x00,0xFE,/*"电",0*/
};

static const unsigned char PROGMEM zi[] = {
0x00,0x00,0x7F,0xF8,0x00,0x10,0x00,0x20,0x00,0x40,0x01,0x80,0x01,0x00,0xFF,0xFE,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,/*"子",1*/
};

有硬件环境的可以测试一下是否和我的问题一样,oled的针脚被我插乱了昨天考虑到是不是红外的头文件影响到了时钟于是避开了所有的pwm管脚,但是好像也没有什么效果,不太理解
确实也没有那个能力去分析库函数,有遇见过同样问题的同学吗

可能使显示器内存占用过高导致的

两个在底层占用了同样的资源吧
看下这个,也是两个库冲突的问题
https://forum.arduino.cc/t/code-conflict-between-two-libraries-adafruit_ssd1306-and-rf24/200397

把两个文件的内容贴出来