Teraz w nieskończonej pętli sprawdzamy stan czujnika bramy:
for (;;)
{
if(digitalRead(PIN_WYL)==0) //brama zamknieta, styk czujnika zwarty
czas_otw=CZAS;
else
czas_otw--; // brama otwarta, odliczamy kolejne sekundy otwarcia
sleep(1); // sekunda opoznienia do kolejnego testu czujnika
if (czas_otw==0) // licznik sekund otwarcia sie wyzerowal
{
alarm(); // brama za dlugo otwarta, zareaguj
czas_otw=CZAS; // jesli brama mimo alarmu nie zostanie zamknieta,
// po czasie CZAS ponownie uruchom alarm
}
}
Funkcja alarm. Może robić cokolwiek, uruchomić siłownik zamykający bramę, wysłać sms, w naszym przykładzie uruchomi trzykrotnie sygnalizator dźwiękowy (optyczny) podłączony do pinu PIN_ALARM, na 3 sekundy, z przerwami 1 sekundowymi.
Oczywiście sygnalizatora nie możemy podłączyć bezpośrednio do pinu GPIO. W stanie jedynki logicznej będzie tam napięcie około 3,3V. Maksymalny prąd jaki możemy uzyskać z pojedynczego pinu to około 16 mA, a suma wszystkich prądów wypływających z pinów GPIO powinna być mniejsza niż 50 mA.
To niewiele, w dodatku bezpieczniej jest nie zbliżać się do tych granicznych wartości, więc nasz sygnalizator podłączymy na przykład za pośrednictwem tranzystora:
}
void alarm()
{
digitalWrite(PIN_ALARM,HIGH);
sleep(3);
digitalWrite(PIN_ALARM,LOW);
sleep(1);
digitalWrite(PIN_ALARM,HIGH);
sleep(3);
digitalWrite(PIN_ALARM,LOW);
sleep(1);
digitalWrite(PIN_ALARM,HIGH);
sleep(3);
digitalWrite(PIN_ALARM,LOW);
sleep(1);
}
I na koniec pytanie. Wiesz na czym nabazgrałem ten schemacik?
To karta do perforowania. Ma już prawie pół wieku. Na takich kartach kodowało się programy i dane. Pojemność? 80 znaków 10 bitowych.
English