Я подключил сервопривод и PIR к NodeMCU, а сервопривод не работает - PullRequest
3 голосов
/ 15 июня 2019

Я подключил NodeMCU к датчику Pir и сервомотору, и этот код предназначен для вращения сервопривода при обнаружении движения, поэтому я настроил его вращение один раз, когда я void setup(), и это прекрасно работает, но позже в void loop() оно не работает

#include<Servo.h>
Servo servo;
int pirPin = 2;
int state = LOW;
void setup() {
Serial.begin(115200);
servo.attach(13);
servo.write(30);
pinMode(pirPin, INPUT);
}

void loop(){
if(digitalRead(pirPin) == HIGH) 
    {       
    if (state == LOW) {
    Serial.println("Motion detected");
    int angle;
    servo.write(90);
    delay(1000);
    state = HIGH;
    }

    } else {

    if (state == HIGH){
  Serial.println("Motion not detected");
  servo.write(90);
  state = LOW;
  }

  }
  }

1 Ответ

0 голосов
/ 15 июня 2019

Вам просто нужно переключать сервопривод при каждом обнаружении движения, для этого создайте функцию servo_toggle_state, когда вы вызываете ее, изменяет состояние сервопривода.Как то так:

#include <Servo.h>
Servo servo;
int pirPin = 2;
bool state = false;

void servo_toggle_state()
{
    if (state)
        servo.write(90);
    else
        servo.write(0);
    state = !state;
}

void setup()
{
    Serial.begin(115200);
    servo.attach(13);
    servo.write(30);
    pinMode(pirPin, INPUT);
    //set servo at 0 on start
    servo.write(0);
}

void loop()
{
    if (digitalRead(pirPin) == HIGH)
    {
        Serial.println("Motion detected");
        servo_toggle_state();
        //wait while motion is still detected
        while(digitalRead(pirPin));
        delay(1000);
    }
}
...