Paso 4: Programa subir
Lo había programado originalmente por 5 PIRs pero uno de los arneses de cableado estaba mal entonces en lugar de hacer pedazos y solucionarlo fui con sólo 4 PIRs.
El programa hace dos cosas. Si el un PIR es alta y el servo está ya en eso PIRs correspondiente posición, no moverlo.
También, utilizo otra matriz para rastrear si el PIR se ha utilizado desde que fue alto. Yo sólo le permiten ser utilizado una vez para cada estado alto. Si no haces Haz añadido movimiento entre PIRs adyacentes que no es necesario.
Apenas enciendo el LED cada vez que un PIR es alta por lo que te puedo decir mirando el Arduino si hay alguna actividad en el PIRs.
#include < Servo.h >
Autor: jim demello feb de 2014 / /
pirStatus Boolean;
Servo1 servo;
int servangle = 0; variable de ángulo del servo
pirNo de int [] = {3,4,5,6,7}; números de pin de PIR
int pirPrevLow [] = {1,1,1,1,1}; previamente bajo establecido en true
int pirPrevUsed [] = {0,0,0,0,0}; pir en utilizado antes de ir bajo
pirPos de int [] = {10,60,100,140,170}; posiciones para servo (0-180)
int curPosPir = 0;
pirPin int = 3;
int ledPin = 13;
void setup() {}
Serial.Begin(9600);
servo1.Attach(9);
para (int i = 0; i < 4; i ++) {}
pinMode (pirNo [i], entrada);
}
pinMode (ledPin, salida);
Delay(10000); calibrar durante unos 10 segundos
servo1.Write(90); poner el servo en el centro para comenzar
}
////////////////////////////
BUCLE principal
//////////////////
void loop() {}
para (int j = 0; j < 4; j ++) {/ / para cada PIR
pirPin = pirNo [j];
pirStatus = digitalRead(pirPin);
Si (pirStatus == HIGH) {}
digitalWrite (ledPin, HIGH); el led visualiza el estado de pin de salida de sensores
{if(pirPrevLow[j])}
Si (curPosPir! = pirPin & & pirPrevUsed [j] == 0) {/ / si PIR alta es diferente que la actual posición de PIR y mover a la nueva posición
servo1.Write(pirPos[j]);
Serial.println(j);
Delay(50);
curPosPir = pirPin; mantener el actual PIR
pirPrevUsed [j] = 1;
}
pirPrevLow [j] = 0; PIR es ahora no bajo
}
}
Else {}
digitalWrite (ledPin, LOW); el led visualiza el estado de pin de salida de sensores
pirPrevLow [j] = 1; PIR está ahora bajo
pirPrevUsed [j] = 0;
}
} / / fin número j de bucle de detectores PIR
} / / bucle infinito de extremo