下面是本人在arduino上写的一段代码,问题出现在第68行和第237-240行我注释掉的部分(和u[41]相关的)。这些代码如果我注释掉,上传代码,我的OLED上可以正常显示,所有按键可以正常工作;如果不注释掉,上传代码,我的OLED就好像卡死了一样,停留在上次上传的界面,所有按键也都没有用了。请教一下大家这个问题该怎么解决啊!
这是一个很简单的电路,只有9个并联的按键和1个OLED屏。
#include <Adafruit_SSD1306.h>
#include <splash.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#define OLED_RESET 4
#define BOTTON1 2
#define BOTTON2 3
#define BOTTON3 5
#define BOTTON4 6
#define BOTTON5 7
#define BOTTON6 8
#define BOTTON7 9
#define BOTTON8 10
#define BOTTON9 11
Adafruit_SSD1306 display(128, 64, &Wire,OLED_RESET); //实例化对象
//int aa[41]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int c=0;
int k=1;
int a=0;
int f=0;
int g=0;
int d[41]={2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};
int e[41]={2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};
int year[41]={2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023,2023};
int h[41]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int z[41]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int u[41]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int n[41]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/*void add(int a,int g,int year[41],int month[41],int day[41],int hour[41],int minute[41])
{
if(g==3&&month[a+1]<12)
{
month[a+1]++;
}
if(g==4&&day[a+1]<31)
{
day[a+1]++;
}
if(g==5&&hour[a+1]<23)
{
hour[a+1]++;
}
if(g==6&&minute[a+1]<59)
{
minute[a+1]++;
}
}*/
void newpage(int a,int f,int g)
{
display.clearDisplay();
display.setTextSize(0.5); //设置字体大小
display.setCursor(0, 0);//设置显示位置
display.println("Task");
display.setCursor(30,0);//设置显示位置
display.println(a+1);
display.setCursor(0, 8);//设置显示位置
display.println("moment1");
display.setCursor(45,8);//设置显示位置
display.println(year[a+1]);
display.setCursor(70,8);//设置显示位置
display.println(":");
display.setCursor(75,8);//设置显示位置
//display.println(p[a+1]);
display.setCursor(80,8);//设置显示位置
display.println(":");
display.setCursor(85,8);//设置显示位置
//display.println(u[a+1]);
display.setCursor(90,8);//设置显示位置
display.println(":");
display.setCursor(95,8);//设置显示位置
display.println(h[a+1]);
display.setCursor(100,8);//设置显示位置
display.println(":");
display.setCursor(105,8);//设置显示位置
display.println(z[a+1]);
int ff=8*f;
if(ff<=48)
{display.setCursor(45+10*g, ff+10);//设置显示位置
display.println("_");
display.display();}
}
void move(int b)
{
if(b<=56)
{display.setCursor(70, b);//设置显示位置
display.println("<<");
display.display();}
if(b>56&&b<=120)
{display.setCursor(70, b-64);//设置显示位置
display.println("<<");
display.display();}
if(b>120&&b<=184)
{display.setCursor(70, b-128);//设置显示位置
display.println("<<");
display.display();}
if(b>184&&b<=248)
{display.setCursor(70, b-192);//设置显示位置
display.println("<<");
display.display();}
if(b>248&&b<=312)
{display.setCursor(70, b-256);//设置显示位置
display.println("<<");
display.display();}
}
void buttoninfo(int k,int b,int n[41],int d[41],int a)
{display.clearDisplay();
for(int i=1;k>=i;i++)
{if(k>=i&&b<=56)
{
display.setTextSize(0.5); //设置字体大小
display.setCursor(0, 8*i-8);//设置显示位置
display.println("Task");
display.setCursor(30,8*i-8);//设置显示位置
display.println(i);
if(d[i]%2==0)
{display.setTextSize(0.5);//设置字体大小
display.setCursor(50, 8*i-8);//设置显示位置
display.println("W:");
display.setCursor(65, 8*i-8);//设置显示位置
display.println(n[i]);
display.setTextSize(0.5);//设置字体大小
display.setCursor(100, 8*i-8);//设置显示位置
display.println("U:");
display.setCursor(115, 8*i-8);//设置显示位置
display.println(0);
}
}
if(k>=i&&i>=9&&b>56&&b<=120)
{
display.setTextSize(0.5); //设置字体大小
display.setCursor(0, 8*i-72);//设置显示位置
display.println("Task");
display.setCursor(30,8*i-72);//设置显示位置
display.println(i);
if(d[i]%2==0)
{display.setTextSize(0.5);//设置字体大小
display.setCursor(50, 8*i-72);//设置显示位置
display.println("W:");
display.setCursor(65, 8*i-72);//设置显示位置
display.println(n[i]);
display.setTextSize(0.5);//设置字体大小
display.setCursor(100, 8*i-72);//设置显示位置
display.println("U:");
display.setCursor(115, 8*i-72);//设置显示位置
display.println(0);
}
}
if(k>=i&&i>=17&&b>120&&b<=184)
{
display.setTextSize(0.5); //设置字体大小
display.setCursor(0,8*i-136);//设置显示位置
display.println("Task");
display.setCursor(30,8*i-136);//设置显示位置
display.println(i);
if(d[i]%2==0)
{display.setTextSize(0.5);//设置字体大小
display.setCursor(50, 8*i-136);//设置显示位置
display.println("W:");
display.setCursor(65, 8*i-136);//设置显示位置
display.println(n[i]);
display.setTextSize(0.5);//设置字体大小
display.setCursor(100, 8*i-136);//设置显示位置
display.println("U:");
display.setCursor(115, 8*i-136);//设置显示位置
display.println(0);
}
}
if(k>=i&&i>=25&&b>184&&b<=248)
{
display.setTextSize(0.5); //设置字体大小
display.setCursor(0, 8*i-200);//设置显示位置
display.println("Task");
display.setCursor(30,8*i-200);//设置显示位置
display.println(i);
if(d[i]%2==0)
{display.setTextSize(0.5);//设置字体大小
display.setCursor(50, 8*i-200);//设置显示位置
display.println("W:");
display.setCursor(65, 8*i-200);//设置显示位置
display.println(n[i]);
display.setTextSize(0.5);//设置字体大小
display.setCursor(100, 8*i-200);//设置显示位置
display.println("U:");
display.setCursor(115, 8*i-200);//设置显示位置
display.println(0);
}
}
if(k>=i&&i>=33&&b>248&&b<=312)
{
display.setTextSize(0.5); //设置字体大小
display.setCursor(0, 8*i-264);//设置显示位置
display.println("Task");
display.setCursor(30, 8*i-264);//设置显示位置
display.println(i);
if(d[i]%2==0)
{display.setTextSize(0.5);//设置字体大小
display.setCursor(50, 8*i-264);//设置显示位置
display.println("W:");
display.setCursor(65, 8*i-264);//设置显示位置
display.println(n[i]);
display.setTextSize(0.5);//设置字体大小
display.setCursor(100, 8*i-264);//设置显示位置
display.println("U:");
display.setCursor(115, 8*i-264);
display.println(0);
}
}
}
}
void setup() {
pinMode(BOTTON1, INPUT_PULLUP);
pinMode(BOTTON2, INPUT_PULLUP);
pinMode(BOTTON3, INPUT_PULLUP);
pinMode(BOTTON4, INPUT_PULLUP);
pinMode(BOTTON5, INPUT_PULLUP);
pinMode(BOTTON6, INPUT_PULLUP);
pinMode(BOTTON7, INPUT_PULLUP);
pinMode(BOTTON8, INPUT_PULLUP);
pinMode(BOTTON9, INPUT_PULLUP);
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
display.setTextColor(WHITE);//开像素点发光
display.clearDisplay();//清屏
}
void loop()
{ int b=8*a;
if(digitalRead(BOTTON1)==0)
{
if(e[a+1]%2==0)
{
if(n[a+1]>=0&&n[a+1]<10)
n[a+1]++;
}
if(g==6&&z[a+1]<59)
{z[a+1]++;}
/*if(g==4&&u[a+1]<31)
{
u[a+1]++;
}*/
if(h[a+1]<23&&g==5)
{h[a+1]++;}
if(year[a+1]<2200&&g<3)
{year[a+1]++;}
}
if(digitalRead(BOTTON2)==0)
{
if(e[a+1]%2==0)
{
if(n[a+1]>0&&n[a+1]<=10)
n[a+1]--;
}
if(h[a+1]>0&&g==5)
h[a+1]--;
if(year[a+1]>0&&g<3)
year[a+1]--;
/*else
{
if((g==0)&&(year[a+1]>0))
{year[a+1]--;}
if((g==3)&&(month[a+1]>1))
{month[a+1]--;}
if((g==4)&&(day[a+1]>1))
{day[a+1]--;}
if((g==5)&&(hour[a+1]>0))
{hour[a+1]--;}
if((g==6)&&(minute[a+1]>0))
{minute[a+1]--;}
}*/
}
if(digitalRead(BOTTON3)==0)
{if(k<=39)
k++;}
if(digitalRead(BOTTON4)==0)
{
if(a>=0&&e[a+1]%2==0)
a++;
else
f++;
}
if(digitalRead(BOTTON5)==0)
{
if(a>0&&e[a+1]%2==0)
a--;
else if(f>0)
f--;
}
if(digitalRead(BOTTON6)==0)
{d[a+1]++;}
if(digitalRead(BOTTON7)==0)
{e[a+1]++;}
if(digitalRead(BOTTON8)==0)
{
if(g<6)
g++;
}
if(digitalRead(BOTTON9)==0)
{
if(g>0)
g--;
}
if(e[a+1]%2!=0)
{
newpage(a,f,g);
}
if(e[a+1]%2==0)
{
buttoninfo(k,b,n,d,a);
move(b);
}
delay(100);
}