не может включить реле на неопределенное время на Arduino - PullRequest
0 голосов
/ 20 марта 2020

Я хочу сделать такое устройство, как Knocki (https://knocki.com), которое по сути представляет собой реле управления с использованием датчика вибрации. Я могу обнаружить вибрации рН, но проблема в том, что, как только я нажимаю, реле мигает, а затем выключается. я понимаю, что это отсутствие программирования, которое является причиной этого. может ли кто-нибудь помочь мне написать код, который делает его таким, чтобы когда я постучал, реле включалось бесконечно; пока я не постучу снова, чтобы выключить реле.

И да, вы, вероятно, можете сказать, что этот код откуда-то скопирован (https://wiki.keyestudio.com/Ks0068_keyestudio_37_in_1_Sensor_Kit_for_Arduino_Starters#Project_21: _ Vibration_Sensor). Я взял его с домашней страницы датчика вибрации. изначально код был таким, что каждый раз, когда я стучал, загорался светодиод Arduino на борту. Кроме того, прямо сейчас реле слабо мигает каждый раз, когда я стучу (хотя правильно, синхронно с моими ударами c)


#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++;

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Да, это в вашем коде: (плохой) пример работает только потому, что

digitalWrite(SensorLED,HIGH);
->>>   delay(500);

задержка на 1/2 се c, чтобы индикатор оставался включенным. другая задержка после линии реле, и она должна go включиться на 1/2 сек c тоже (таким образом, светодиод горит всего 1 сек c)

    digitalWrite(SensorLED,HIGH);
    delay(500);
    digitalWrite(Relay,HIGH);
   delay(500);

Это только для проверки -> СЛЕДУЮЩИЙ ШАГ:
Избавьтесь от задержек (см. Пример blinkwithoutdelay в

Arduino->File->Examples->2.Digital -> blinkwithoutdelay


и введите вторую переменную состояния, например

 bool relayStateOn = false;

, чтобы получить независимую вкл / выкл реле и светодиода. (Если это - что я понимаю - что вы хотите сделать)

0 голосов
/ 20 марта 2020

Если вы подаете свое реле с платы, это не проблема. Пожалуйста, проверьте напряжение в вашем реле, когда вы пытаетесь его включить, если ваше напряжение падает, это означает, что этот выход на ваше реле не подает необходимый ток.

...