Stap 2: Codering de watchdog
Hier is de code van de Trinket, compleet. timer.h is identiek aan de vorige stap.Merk op dat ik een 30 tweede heartbeat time-out ingesteld--dit genoeg tijd mijn belangrijkste schets geeft
Als u wilt uitvoeren de 15 + staat tweede subroutine en knevel de hartslag zonder time-out.
(De LED niet fietsen gedurende die tijd is inconsequent, aangezien er andere, zichtbare activiteit
plaatsvindt.)
Deze sketch is voor een Adafruit Trinket 5V.
//
De Trinket fungeert als een hardware watchdog op elke host met een reset pin die
functies door lage op grond wordt getrokken.
//
De Trinket bewaakt hbPin, vereisen een verandering van de staat binnen de hbTime.
//
De Trinket LED bootst de staat van het signaal van de hbPin van de host, geeft een visuele
hartslag van beide hosts met één LED.
//
Als een wijziging van de staat niet aangetroffen is, wordt de resetPin laag om te dwingen een reset op de host getrokken.
Uiteraard moet resetPin op de Trinket worden aangesloten op de eerste pin op de host en beide
apparaten moeten zijn op een gemeenschappelijke grond.
//
Bij het opstarten en na een reset, wordt resetTime aangeroepen om te verzekeren dat de host heeft tijd om te
goed starten en beginnen met het uitzenden van het signaal van de hartslag.
#include "timer.h"
constanten veranderen niet--gebruikt voor het instellen van pincodes en definiëren van vertragingen
Const int hbPin = 3; Het signaal van de host gebruiken om in te stellen de
heartbeatstatus
Const int resetPin = 4; met deze pin kunt u herstellen van de host
Const int ledPin = 1; ingebouwde LED op Trinket
Const unsigned long resetTime = (1000 * 60 * 3); Geef de host 3 minuten om op te starten
Const unsigned long hbTime = (1000 * 30); 30 seconden heartbeat cyclus vóór de reset
globale variabelen
int currState = hoog;
int prevState = laag;
Timer-instanties maken
timer resetTimer = timer(resetTime); delay timer reset
timer-hbTimer = timer(hbTime); heartbeat-timer
/* --------------------------------------------------------------------------------- */
VOID Setup {}
Set pin modi
pinMode (de resetPin, OUTPUT);
Zorg ervoor dat we worden ingeschakeld om te beginnen!
digitalWrite (resetPin, hoge);
Start met een nulpunt uit timers
resetTimer.reset();
hbTimer.reset();
}
/* --------------------------------------------------------------------------- */
void loop {}
ledHeartbeat();
Als ((hbTimer.update() == 1) & & (resetTimer.update() == 1)) {}
resetHost(resetPin);
}
}
/* --------------------------------------------------------------------------------- */
ongeldig ledHeartbeat(void) {}
Pulse de LED te laten zien WE leven!
Gebruik van de host heartbeat signaal te rijden van de LED
Op deze manier hebben we zichtbaarheid op beide domeincontrollers met 1 indicator
digitalWrite (ledPin, currState = digitalRead(hbPin));
Als (currState! = prevState) {/ / staat veranderd
prevState = currState; Update
hbTimer.reset(); Opnieuw instellen van de timer
}
}
/* -------------------------------------------------------------------------------- */
VOID resetHost (int resetPin) {}
digitalWrite (resetPin, laag); Het uitschakelen van de macht-estafette (transistor)
delay(5000); 5 seconden zodat we niet elke bollen te snel fietsen
digitalWrite (resetPin, hoge); Zwenking op weerom voort dus de host kan booten!
resetTimer.reset(); Nul uit de timer
}