You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino技术问题:循环末尾delay函数无法结束致程序仅运行一次

水培项目循环卡死问题排查与修复

问题根源

Arduino的delay()函数要求参数为无符号长整型(unsigned long),你的代码中存在两个关键问题:

  1. 整数溢出:16位Arduino的int类型最大值为32767,2*1000*60=120000已超出范围,计算结果会变成负数;负数强制转为unsigned long时会变成极大数值,导致delay()执行时间远超预期,看起来像“永远无法结束”。
  2. 字符串输出错误:Serial.println('On')使用单引号(仅适用于单个字符),会导致输出乱码,虽不影响循环,但属于语法错误。

修复方案

  • 所有delay()参数直接写整数常量,或在数值后加UL后缀强制转为无符号长整型,避免溢出。
  • 修正Serial.println的字符串引号,改用双引号包裹字符串。

修改后的代码

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#define SERVOMIN  250 
#define SERVOMAX  650 
#define USMIN  600 
#define USMAX  2400 
#define SERVO_FREQ 50 
uint8_t servonum = 0;

int D3 = 3;
int D4 = 4;

void setup() {
  Serial.begin(9600);
  Serial.println("Reboot!");
  pinMode(D3, OUTPUT);
  pinMode(D4, OUTPUT);  
  pwm.begin();
  pwm.setOscillatorFrequency(27000000);
  pwm.setPWMFreq(SERVO_FREQ);  // Analog servos run at ~50 Hz updates
  delay(10);
}

void loop() {
  Serial.println("On");
  digitalWrite(D3, LOW); 
  digitalWrite(D4, LOW); 

  pwm.setPWM(servonum, 0, 170);
  delay(500);
  pwm.setPWM(servonum, 0, 300);

  // 0.5分钟延迟
  delay(30000);
  //delay(3000);

  // Off for 10 minutes
  Serial.println("Off");
  pwm.setPWM(servonum, 0, 170);
  delay(500);
  pwm.setPWM(servonum, 0, 300);

  Serial.println("Pump on");
  digitalWrite(D3, HIGH); 
  digitalWrite(D4, HIGH); 
  delay(15000); // TURN ON PUMP FOR 15 seconds

  Serial.println("Pump Off");
  digitalWrite(D3, LOW); 
  digitalWrite(D4, LOW); // TURN OFF PUMP, TURN ON 

  delay(120000); // 2分钟延迟
}

void setServoPulse(uint8_t n, double pulse) {
  double pulselength;
  pulselength = 1000000;   // 1,000,000 us per second
  pulselength /= SERVO_FREQ;   // Analog servos run at ~60 Hz updates

  pulselength /= 4096;  // 12 bits of resolution

  pulse *= 1000000;  // convert input seconds to us
  pulse /= pulselength;

  pwm.setPWM(n, 0, pulse);
}

内容的提问来源于stack exchange,提问作者R0b0tn1k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:35:37