我正在编写一个水培项目,我触发一个伺服系统打开一个喷雾器,然后一个泵被打开和关闭,整个事情需要重复。
除了最后一个延迟周期之外,整个过程都很好,它永远不会结束,所以循环循环永远不会重复,它只运行一次。
对为什么会发生这种事有什么想法吗?
守则:
#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);
//
delay(0.5*1000*60);
//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(15*1000); // TURN ON PUMP FOR 15 seconds
Serial.println('Pump Off');
digitalWrite(D3, LOW);
digitalWrite(D4, LOW); // TURN OFF PUMP, TURN ON
delay(2*1000*60); // This is the delay that never ends, it's supposed to be 2 minutes long...
}
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);
}
发布于 2022-12-01 22:26:00
不要对这样的函数做算术运算,为什么不直接写延迟(120000)呢?如果您想做算术运算,最好是分隔操作,如下所示:
long int timeDelay1 = 60*2*1000;
delay(timeDelay1);
这样长时间的延迟并不是很好的实践,而是使用函数millis()来度量时间,如下所示:
long int t0 = 0;
long int t1 = 0;
long int howManyTimeIWantToWait = 120000;
void setup() {
t0 = millis();
}
void loop() {
t1 = millis();
if(t1 >= (t0+howManyTimeIWantToWait)){
t0 = millis();
//howManyTimeIWantToWait has been passed
}
//do other stuff whithout waiting on the function delay();
}
https://stackoverflow.com/questions/74529057
复制相似问题