arduino代码无问题却运行不了,帮我看看呗

。。们帮我看看呗,这个程序为啥不运行。

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include "DHT.h"

#define DHTPIN  2
#define DHTTYPE DHT11

//iic驱动方式
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
DHT dht(DHTPIN, DHTTYPE);
int pinInterrupt = 5; //接中断信号的脚
#define NOTE_C0   -1 
#define NOTE_CL1 131 
#define NOTE_CL2 147 
#define NOTE_CL3 165 
#define NOTE_CL4 175 
#define NOTE_CL5 196 
#define NOTE_CL6 221 
#define NOTE_CL7 248 


#define NOTE_C1 262 
#define NOTE_C2 294 
#define NOTE_C3 330 
#define NOTE_C4 350 
#define NOTE_C5 393 
#define NOTE_C6 441 
#define NOTE_C7 495 


#define NOTE_CH1 525
#define NOTE_CH2 589 
#define NOTE_CH3 661 
#define NOTE_CH4 700 
#define NOTE_CH5 786 
#define NOTE_CH6 882 
#define NOTE_CH7 990 

//该部分是定义是把每个音符和频率值对应起来,全部都打上了,后面可以随意编写,直接调用(也可以用到哪个定义哪个)

#define WHOLE 1 
#define HALF 0.5 
#define QUARTER 0.25 
#define EIGHTH 0.25 
#define SIXTEENTH 0.625  
//该部分是对应了节拍

int tune[] =  
{
NOTE_C0,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C3,
NOTE_C3,NOTE_C5,NOTE_C2,NOTE_C2,NOTE_C3,NOTE_C2,
NOTE_C2,NOTE_C1,NOTE_C1,NOTE_C0,NOTE_C1,NOTE_CL7,
NOTE_CL6,NOTE_CL7,NOTE_C1,NOTE_CL7,NOTE_C1,NOTE_C1,

NOTE_C2,NOTE_C3,
NOTE_C3,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C3,
NOTE_C3,NOTE_C5,NOTE_C2,NOTE_C2,NOTE_C3,NOTE_C2,
NOTE_C2,NOTE_C1,NOTE_C1,NOTE_C0,NOTE_C1,NOTE_CL7,
NOTE_CL6,NOTE_CL7,NOTE_C1,NOTE_CL7,NOTE_CL7,NOTE_C1,NOTE_C1,NOTE_C2,
NOTE_C1,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C6,NOTE_C7,


NOTE_C4,NOTE_C3,NOTE_C2,NOTE_C1,NOTE_C7,NOTE_C5,NOTE_C3,
NOTE_C3,NOTE_C5,NOTE_C2,NOTE_C2,NOTE_C3,NOTE_C2,
NOTE_C2,NOTE_C1,NOTE_C1,NOTE_C0,NOTE_C1,NOTE_CL7,
NOTE_CL6,NOTE_CL7,NOTE_C1,NOTE_CL7,NOTE_CL7,NOTE_C1,NOTE_C1,NOTE_C2,
NOTE_C3,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C3,
NOTE_C3,NOTE_C5,NOTE_CH2,NOTE_CH2,NOTE_CH1,NOTE_C7,
NOTE_C7,NOTE_CH6,NOTE_C0,NOTE_C0,NOTE_C1,NOTE_CL7,
NOTE_CL6,NOTE_CL7,NOTE_C1,NOTE_CL7,NOTE_CL7,NOTE_C1,NOTE_C1,NOTE_C2,
NOTE_C1,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C6,NOTE_C7,
NOTE_CH1,NOTE_C7,NOTE_CH1,NOTE_C7,NOTE_C6,NOTE_C5,NOTE_C6,
NOTE_C6,NOTE_C5,NOTE_C5,NOTE_C5,NOTE_C1,NOTE_C2,NOTE_C3,
NOTE_C4,NOTE_C3,NOTE_C4,NOTE_C5,NOTE_C1,NOTE_C2,NOTE_C3,
NOTE_C3,NOTE_C3,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C6,NOTE_C7,
NOTE_C1,NOTE_C7,NOTE_CH1,NOTE_CH3,NOTE_CH1,NOTE_CH2,NOTE_CH3,
NOTE_CH3,NOTE_C5,NOTE_C5,NOTE_C5,NOTE_C1,NOTE_C2,NOTE_C3,
NOTE_C4,NOTE_C3,NOTE_C4,NOTE_C3,NOTE_C2,NOTE_C2,NOTE_C1,
NOTE_CL7,NOTE_C1,NOTE_C1,NOTE_C0,NOTE_C5,NOTE_C6,NOTE_C7,
NOTE_CH1,NOTE_C7,NOTE_CH1,NOTE_CH2,NOTE_CH1,NOTE_C7,NOTE_C6,
NOTE_C6,NOTE_C5,NOTE_C0,NOTE_C0,NOTE_C1,NOTE_C2,NOTE_C3,
NOTE_C4,NOTE_C3,NOTE_C4,NOTE_C5,NOTE_C1,NOTE_C1,NOTE_C6,
NOTE_C6,NOTE_C5,NOTE_C5,NOTE_C0,NOTE_C5,NOTE_C6,NOTE_C7,
NOTE_CH1,NOTE_C7,NOTE_CH1,NOTE_CH2,NOTE_CH1,NOTE_CH2,NOTE_CH3,
NOTE_CH3,NOTE_C5,NOTE_C5,NOTE_C0,NOTE_C1,NOTE_C2,NOTE_C3,NOTE_C4,
NOTE_C4,NOTE_C3,NOTE_C4,NOTE_C5,NOTE_C1,NOTE_C2,
NOTE_C2,NOTE_C3,NOTE_C2,NOTE_C1,NOTE_C1,NOTE_C1,NOTE_C0,NOTE_C0,
NOTE_C0,NOTE_C0,NOTE_C0,NOTE_C5,NOTE_C6,NOTE_C7,
NOTE_CH1,NOTE_C7,NOTE_CH1,NOTE_C7,NOTE_C6,NOTE_C5,NOTE_C4,
NOTE_C4,NOTE_C5,NOTE_C5,NOTE_C0,NOTE_C0,

};

float duration[]= 
{ 
1,1,1,0.5+0.5,//听见
1,0.5+0.5,1,0.5+0.5,//冬天的离
0.5+0.5,1,1,0.5+0.5,//开  我在
0.5+0.5,0.5+0.5,0.5+0.5,0.5+0.5,//某年某月醒过来
1,1,1,0.5+0.5,//我想
1,0.5+0.5,1,0.5+0.5,//我等我期
0.5+0.5,1,1,0.5+0.5,//待未来
0.5+0.5,0.5+0.5,0.5+0.5,0.5+0.5,//却不能理智安
1,1,0.5+0.5,0.5+0.5,//排
0.5+0.5,0.5+0.5,1,0.5+0.5,//阴天
1,0.5+0.5,1,0.5+0.5,//傍晚车窗
0.5+0.5,1,1,0.5+0.5,//外  未来
0.5+0.5,0.5+0.5,0.5+0.5,0.5+0.5,//有一个人在等
1,1,1,0.5+0.5,//待   向左
1,0.5+0.5,1,0.5+0.5,//向右向前
0.5+0.5,1,1,0.5+0.5,//看  爱要
0.5+0.5,0.5+0.5,0.5+0.5,0.5+0.5,//拐几个弯才
1,1,0.5+0.5,0.5+0.5,//来  我遇见
1,0.5+0.5,0.5+0.5,0.5+0.5,//谁会有怎样的对
0.5+0.5,1,0.5+0.5,0.5+0.5,//白  我等的
1,0.5+0.5,0.5+0.5,0.5+0.5,//人他在多远的未
0.5+0.5,1,0.5+0.5,0.5+0.5,//来  我听见 
1,0.5+0.5,0.5+0.5,0.5+0.5,//风来自地铁和人
0.5+0.5,1,0.5+0.5,0.5+0.5,//海  我排着
1,0.5+0.5,0.5+0.5,0.5+0.5,//队  拿着爱的号
0.5+0.5,1,0.5+0.5,0.5+0.5,//码牌  我往前
1,0.5+0.5,0.5+0.5,0.5+0.5,//飞  飞过一片时间
0.5+0.5,1,0.5+0.5,0.5+0.5,//海  我们也
1,0.5+0.5,0.5+0.5,0.5+0.5,//曾在爱情里受伤
0.5+0.5,1,0.5+0.5,0.5+0.5,//害   我看着
1,0.5+0.5,0.5+0.5,0.5+0.5,//路  梦的路口 有点
0.5+0.5,1,0.5+0.5,0.5+0.5,//窄   我遇见
1,0.5+0.5,0.5+0.5,1,//你 是最美丽的
0.25+0.25+0.25+0.25,0.5+0.5,1,1,//意外
1,1,0.5+0.5,0.5+0.5,//终有一
1,0.5+0.5,0.5+0.5,0.5+0.5,//天我的谜底会揭
0.5+0.5,1,1,1,//开

};
//这部分是整首曲子的节拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应)

int length;//这里定义一个变量,后面用来表示共有多少个音符

int tonePin=8;//蜂鸣器的端口,数字模拟都可以
void music()
{
for(int x=0;x<length;x++)//循环音符的次数
  {  
    tone(tonePin,tune[x]);//此函数依次播放tune序列里的数组,即每个 音符

 delay(400*duration[x]);//每个音符持续的时间,即节拍duration,是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧

noTone(tonePin);//停止当前音符,进入下一音符

  } 
  delay(1000);//等待1秒后,循环重新开始
}
void onChange()
{
   if ( digitalRead(pinInterrupt) == HIGH )
   {
      music();
   }
    if ( digitalRead(pinInterrupt) == LOW )
    {
    return;
    }
   }

void setup()

{
 u8g2.begin();
  dht.begin();
pinMode(tonePin,OUTPUT);//设置蜂鸣器的pin为输出模式

length = sizeof(tune)/sizeof(tune[0]);//这里用了一个sizeof函数,可以查出tone序列里有多少个音符
Serial.begin(9600); //打开串口
 
   pinMode( pinInterrupt, INPUT);//设置管脚为输入
   
   //Enable中断管脚, 中断服务程序为onChange(), 监视引脚变化
   attachInterrupt( digitalPinToInterrupt(pinInterrupt), onChange, CHANGE);

}
char h_str[3];
char t_str[3];
float h;
float t;

void loop() 

{  
h = dht.readHumidity();//读湿度
  t = dht.readTemperature();//读温度(摄氏度)
  strcpy(h_str, u8x8_u8toa(h, 2));    /* convert m to a string with two digits */
  strcpy(t_str, u8x8_u8toa(t, 2));    /* convert m to a string with two digits */

  u8g2.firstPage();
  do {
    u8g2.setFont(u8g2_font_fur20_tf);
    u8g2.drawStr(0, 23, "T");
    u8g2.drawStr(20, 23, ":");
    u8g2.drawStr(40, 23, t_str);
    u8g2.drawStr(90, 23, "C");

    u8g2.drawStr(0, 63, "H");
    u8g2.drawStr(20, 63, ":");
    u8g2.drawStr(40, 63, h_str);
    u8g2.drawStr(90, 63, "%");
  } while ( u8g2.nextPage() );
  delay(1000);
 
} 

引用ChatGPT部分内容参考回答:
根据提供的代码,你使用了中断来触发播放音乐的函数。但是,没有在代码中设置中断的触发方式。可以在 setup() 函数中添加以下代码来设置中断触发方式:

attachInterrupt(digitalPinToInterrupt(pinInterrupt), onChange, RISING);

以上代码假设你使用的是上升沿触发中断。
如果你使用的是下降沿触发中断,将 RISING 改为 FALLING。
另外,你在 onChange() 函数中使用了 digitalRead() 函数来读取中断引脚的状态,但是没有在 setup() 函数中设置中断引脚的模式。可以在 setup() 函数中添加以下代码来设置中断引脚的模式:

pinMode(pinInterrupt, INPUT_PULLUP);

以上代码假设你使用的是上拉电阻。
如果你使用的是下拉电阻,可以将 INPUT_PULLUP 改为 INPUT_PULLDOWN

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7630625
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Arduino学习笔记一之常量、结构、函数
  • 除此之外, 这篇博客: Arduino 控制舵机抖动问题 一直来回动中的 这个是个大问题   困扰了我很多天    部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在使用arduino连接传感器和舵机实现项目的过程中, 一上电舵机就抽风了 抽风了 抽了   一直抽来回动  我的天   弄得我好几天都没有睡好   到底是什么原因  什么原因   我又没让你动  就写了个代码  你他妈的疯了 

    好了    不说了    

    原因如下 

    我们在用的时候 是直接导入了一个  舵机库文件  然后声明对象  进行控制
      
    但是不行  舵机库和传感器比如温湿度传感器啥的  有冲突 导致的 

    怎么解决呢   
    原理就是舵机用的PWM信号  我们直接写个循环 进行输出信号不用他的舵机库了  就没有问题了

    int servoPin = 7; 
    
    void setup()  //初始化内容
    {
        Serial.begin(9600);
        pinMode(servoPin, OUTPUT); //设定舵机接口为输出接口
    }
    
    void loop()   //主循环
    {
       servo(50); //调用函数传值直接动
    
    }
    
    void servo(int angle) { //定义一个脉冲函数
      //发送50个脉冲
      for(int i=0;i<50;i++){
        int pulsewidth = (angle * 11) + 500; //将角度转化为500-2480的脉宽值
        digitalWrite(servoPin, HIGH);   //将舵机接口电平至高
        delayMicroseconds(pulsewidth);  //延时脉宽值的微秒数
        digitalWrite(servoPin, LOW);    //将舵机接口电平至低
        delayMicroseconds(20000 - pulsewidth);
      }
      delay(100);
    }