Detectar presencia con PIR y AquilaServices


#1

En este ejemplo se presenta el código que emite el servicio de presencia y no presencia. Más adelante explicaré mejor el código:

#include <Wire.h>
#include <Mesh.h>
#include <AquilaProtocol.h>

#define PIR 18
#define LED 14

Event presence;
Event noPresence;

#define NO_CHANGE 0
#define PRESENCE 1
#define NO_PRESENCE 2

bool statePIRbefore = LOW;
int getPirState()
{
  bool statePIRnow = digitalRead(PIR);
  if(statePIRnow == HIGH && statePIRbefore == LOW)
  {
    statePIRbefore = HIGH;
    return PRESENCE;
  }
  else if(statePIRnow == LOW && statePIRbefore == HIGH)
  {
    statePIRbefore = LOW;
    return NO_PRESENCE;
  }
  return NO_CHANGE;
}

void yield()
{
  Mesh.loop();
  Aquila.loop();
}

void setup()
{
  pinMode(PIR, INPUT);
  pinMode(LED, OUTPUT);

  Mesh.begin();
  Aquila.begin();

  Aquila.setClass("mx.makerlab.pirrod");
  Aquila.setName("PIR Rod");

  presence = Aquila.addEvent("presence");
  noPresence = Aquila.addEvent("noPresence");

  Mesh.announce(HUB);
}

void loop()
{
  yield();

  int current = getPirState();
  if(current == PRESENCE)
  {
    digitalWrite(LED, LOW);
    Aquila.emit(presence);
  }
  if(current == NO_PRESENCE)
  {
    digitalWrite(LED, HIGH);
    Aquila.emit(noPresence);
  }

}