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.