Extern hårdvara vakthund. (2 / 5 steg)
Steg 2: Kodning watchdog
Här är prydnadssak koden, komplett. timer.h är identisk med föregående steg.Observera att jag ställa in en 30 andra hjärtslag timeout - detta ger min huvudsakliga skiss gott om tid
Om du vill köra sin 15 + staten andra subrutin och växla hjärtslagen utan tidtagning ut.
(Lysdioden inte cykling under den tiden har ingen betydelse, eftersom det finns andra, synlig aktivitet
äger rum.)
Denna skiss är för en Adafruit fasad 5V.
//
Prydnadssak agerar som hårdvara vakthund på någon värd som har en återställning pin som
funktioner av dras låg marken.
//
Prydnadssak övervakar hbPin, som kräver en ändring i nätverkstillståndet inom hbTime.
//
Prydnadssak LED härmar delstaten hbPin signalen från värden, vilket ger en visuell
hjärtslag av båda värdarna med en LED.
//
Om en ändring i nätverkstillståndet identifieras, dras resetPin låg för att tvinga fram en återställning på värden.
Självklart måste resetPin på fasad anslutas till det första stiftet på värden och båda
enheter måste vara på en gemensam grund.
//
Vid start och efter en återställning anropas resetTime för att försäkra värden har tid att
korrekt starta upp och börja avger heartbeat signal.
#include "timer.h"
konstanter inte kommer att ändra--används för att ange pin-koder och definiera förseningar
CONST int hbPin = 3; Använda signal från värd att ställa in den
status för heartbeat
CONST int resetPin = 4; Använd detta stift för att återställa värden
CONST int ledPin = 1; inbyggd LED på fasad
CONST osignerade långa resetTime = (1000 * 60 * 3); ge mottagande 3 minuter att starta upp
CONST osignerade långa hbTime = (1000 * 30); 30 andra hjärtslag cykel innan återställning
globala variabler
int currState = hög;
int prevState = låg;
Skapa instanser timer
timer resetTimer = timer(resetTime); återställa dröjsmål timer
timer hbTimer = timer(hbTime); heartbeat timer
/* --------------------------------------------------------------------------------- */
void setup() {
Ställ in pinkodsskydd lägen
pinMode (resetPin, produktionen);
Se till att vi är aktiverade för att starta!
digitalWrite (resetPin, hög);
Börja med ett nollställt ut timers
resetTimer.reset();
hbTimer.reset();
}
/* --------------------------------------------------------------------------- */
void loop() {
ledHeartbeat();
om ((hbTimer.update() == 1) & & (resetTimer.update() == 1)) {
resetHost(resetPin);
}
}
/* --------------------------------------------------------------------------------- */
void ledHeartbeat(void) {
Puls LED att visa att vi är alive!
Använd värdens heartbeat signal för att köra LED
Detta sätt har vi synlighet på båda domänkontrollanter med 1 indikator
digitalWrite (ledPin, currState = digitalRead(hbPin));
om (currState! = prevState) {/ / staten har förändrats
prevState = currState; Uppdatering
hbTimer.reset(); Nollställa timern
}
}
/* -------------------------------------------------------------------------------- */
void resetHost (int resetPin) {
digitalWrite (resetPin, låg); Inaktivera lastrelä (transistor)
Delay(5000); 5 sekunder så vi inte cykla några lökar för fort
digitalWrite (resetPin, hög); Slå på den så värd kan starta!
resetTimer.reset(); Timern till noll
}