无法在 arduino 上无限期地打开继电器
cannot turn on relay indefinitely on an arduino
我想做一个像 Knocki(https://knocki.com) 这样的设备,它本质上是一个使用振动传感器的继电器控制。我可以检测到振动 rn 但问题是,一旦我敲门,继电器就会闪烁然后关闭。我知道这是由于缺乏编程导致的。有人能帮我写代码,这样当我敲门时,继电器就会无限期地打开吗?直到我再次敲门关闭继电器。
是的,你可能会说这个代码是从某个地方复制的(https://wiki.keyestudio.com/Ks0068_keyestudio_37_in_1_Sensor_Kit_for_Arduino_Starters#Project_21:_Vibration_Sensor).I 从振动传感器的主页上获取它。代码最初是这样的,所以每次我敲门时,板载 Arduino 都会引导亮了。另外,现在每次我敲门时继电器都会微弱地闪烁(虽然正确,与我的敲门声同步)
#define SensorLED 13
#define SensorINPUT 3 //Connect the sensor to digital Pin 3 which is Interrupts 1.
unsigned char state = 0;
int Relay = 5;
void setup()
{
pinMode(SensorLED, OUTPUT);
pinMode(SensorINPUT, INPUT);
attachInterrupt(1, blink, FALLING);// Trigger the blink function when the falling edge is detected
}
void loop()
{ if(state!=0)
{
state = 0;
digitalWrite(SensorLED,HIGH);
delay(500);
digitalWrite(Relay,HIGH);
}
else
digitalWrite(SensorLED,LOW);
digitalWrite(Relay,lOW);
}
void blink()//Interrupts function
{ state++;
如果您从板上馈送继电器,那不是问题。请在尝试将其设置为打开时检查继电器中的电压,如果电压下降,则表示继电器的输出没有提供必要的电流。
是的,它在您的代码中:(错误的)示例仅因为存在
digitalWrite(SensorLED,HIGH);
->>> delay(500);
延迟 1/2 秒以保持 LED on.So 作为检查,在中继线之后放置另一个延迟,它也应该持续 1/2 秒(因此 LED 点亮 1总秒)
digitalWrite(SensorLED,HIGH);
delay(500);
digitalWrite(Relay,HIGH);
delay(500);
那只是为了检查 -> 下一步:
消除延迟(参见
中的 blinkwithoutdelay 示例
Arduino->File->Examples->2.Digital -> blinkwithoutdelay
并引入第二个状态变量,例如
bool relayStateOn = false;
获得一个独立的 on/off 继电器和 LED。(如果那是 - 我的理解 - 你想做什么)
我想做一个像 Knocki(https://knocki.com) 这样的设备,它本质上是一个使用振动传感器的继电器控制。我可以检测到振动 rn 但问题是,一旦我敲门,继电器就会闪烁然后关闭。我知道这是由于缺乏编程导致的。有人能帮我写代码,这样当我敲门时,继电器就会无限期地打开吗?直到我再次敲门关闭继电器。
是的,你可能会说这个代码是从某个地方复制的(https://wiki.keyestudio.com/Ks0068_keyestudio_37_in_1_Sensor_Kit_for_Arduino_Starters#Project_21:_Vibration_Sensor).I 从振动传感器的主页上获取它。代码最初是这样的,所以每次我敲门时,板载 Arduino 都会引导亮了。另外,现在每次我敲门时继电器都会微弱地闪烁(虽然正确,与我的敲门声同步)
#define SensorLED 13
#define SensorINPUT 3 //Connect the sensor to digital Pin 3 which is Interrupts 1.
unsigned char state = 0;
int Relay = 5;
void setup()
{
pinMode(SensorLED, OUTPUT);
pinMode(SensorINPUT, INPUT);
attachInterrupt(1, blink, FALLING);// Trigger the blink function when the falling edge is detected
}
void loop()
{ if(state!=0)
{
state = 0;
digitalWrite(SensorLED,HIGH);
delay(500);
digitalWrite(Relay,HIGH);
}
else
digitalWrite(SensorLED,LOW);
digitalWrite(Relay,lOW);
}
void blink()//Interrupts function
{ state++;
如果您从板上馈送继电器,那不是问题。请在尝试将其设置为打开时检查继电器中的电压,如果电压下降,则表示继电器的输出没有提供必要的电流。
是的,它在您的代码中:(错误的)示例仅因为存在
digitalWrite(SensorLED,HIGH);
->>> delay(500);
延迟 1/2 秒以保持 LED on.So 作为检查,在中继线之后放置另一个延迟,它也应该持续 1/2 秒(因此 LED 点亮 1总秒)
digitalWrite(SensorLED,HIGH);
delay(500);
digitalWrite(Relay,HIGH);
delay(500);
那只是为了检查 -> 下一步:
消除延迟(参见
Arduino->File->Examples->2.Digital -> blinkwithoutdelay
并引入第二个状态变量,例如
bool relayStateOn = false;
获得一个独立的 on/off 继电器和 LED。(如果那是 - 我的理解 - 你想做什么)