aaa6662 2023-08-06 12:04 采纳率: 0%
浏览 7

Arduino程序代码问题

下面是本人在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);
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-06 14:13
    关注

    【以下回答由 GPT 生成】

    根据你提供的信息,有几个可能的原因导致OLED屏幕和按键卡死无法工作:

    1. 引脚连接错误: 首先,请确保将OLED屏幕和按键正确连接到Arduino引脚。请确保你的OLED屏幕的SDA引脚连接到Arduino的A4引脚,SCL引脚连接到A5引脚。同时,确保按键的引脚与代码中定义的引脚一致。

    2. 显示库不兼容: 请确保你使用的Adafruit_SSD1306显示库与你的OLED屏幕兼容。你可以在Arduino库管理器中搜索Adafruit SSD1306并安装最新的库版本。

    3. GPIO引脚被占用: 检查你在代码中使用的GPIO引脚是否与其他功能冲突。确保没有其他组件或功能占用了OLED屏幕和按键所需的引脚。

    4. 代码中的问题: 仔细检查代码中与OLED屏幕和按键相关的部分,特别是第68行和第237-240行注释掉的部分。确保你没有注释掉关键的功能代码或错误地修改了其他变量。

    5. 供电不足: 确保你的Arduino板子接收到足够的供电。有时,如果供电不足,OLED屏幕和按键可能无法正常工作。

    如果你确定以上几点都没有问题,但OLED屏幕和按键仍然无法正常工作,那可能有其他问题在影响。你可能需要进一步调试或尝试其他解决方案。

    请注意,由于我无法直接测试你的硬件和代码,以上只是一些建议和可能的解决方案。希望这些信息能对你有所帮助。如果你需要更多帮助,请提供更多详细信息或咨询相关专业人士。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 8月6日

悬赏问题

  • ¥15 机器学习预测遇到的目标函数问题
  • ¥15 python的EOFError该怎么解决?
  • ¥15 Fluent,液体进入旋转区域体积分数不连续
  • ¥15 java linux下将docx文件转pdf
  • ¥15 maven无法下载依赖包
  • ¥15 关于pycharm, Callable[[str],bool]作为方法参数使用时, lambda 类型不提示问题
  • ¥15 layui数据重载无效
  • ¥15 寻找了解qq家园纵横四海的程序猿。
  • ¥15 optisystem
  • ¥15 VB.NET画图时的撤销编程