(17-02-2017, 14:34)zamber napisał(a): Dobrze, gdybyś wkleił schemat i pełen kod programu, bo dziwię się, że nie działa Ci przekaźnik. No chyba,że próbujesz go wysterować sygnałem bezpośrednio z PIR'a, a wtedy nie ma prawa działać.
To pełny kod programu. Na razie nie montowałem fotorezystora. Przekaźnik jest podłączony pod digital 4 Arduino Uno.
Kod:
#include <Bounce2.h>
#define FOTOREZYSTOR A0
#define PRZEKAZNIK 4
#define SWIATLO 3
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
#define CZAS_SWIECENIA 1000
Bounce bouncer = Bounce(FOTOREZYSTOR, 25);
boolean uzbrojony = false;
unsigned long fotorezystor_czas, uzbrojenie_czas;
void setup() {
Serial.begin(9600);
while(!Serial);
pinMode(A0, INPUT);
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(SWIATLO, LOW);
pinMode(PIR, INPUT);
pinMode(FOTOREZYSTOR, INPUT_PULLUP);
}
void zmiana()
{
digitalWrite(SWIATLO, LOW);
uzbrojenie_czas = millis() + CZAS_SWIECENIA;
fotorezystor_czas = millis() + 1000;
uzbrojony = !uzbrojony;
detachInterrupt(digitalPinToInterrupt(FOTOREZYSTOR));
}
void loop() {
int odczyt = analogRead(A0);
if(odczyt <= 400)
digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
Serial.println(odczyt);
delay 500);
bouncer.update();
int value = bouncer.read();
digitalWrite(LED0, uzbrojony);
if (value == HIGH)
attachInterrupt(digitalPinToInterrupt(FOTOREZYSTOR), zmiana, FALLING);
if(digitalRead(PIR)==HIGH){
digitalWrite(SWIATLO, HIGH);
if(digitalRead(PRZEKAZNIK)==HIGH){
digitalWrite(PRZEKAZNIK, HIGH);
if (uzbrojony && uzbrojenie_czas < millis())
digitalWrite(SWIATLO, HIGH);
}
else
digitalWrite(SWIATLO, LOW);
}
}