无法在 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。(如果那是 - 我的理解 - 你想做什么)