Étape 2: Codage rapprochée
Voici le code de bibelot, complet. Timer.h est identique à l’étape précédente.Notez que j’ai mis un délai d’attente 30 second heartbeat--cela donne mon esquisse principale tout le temps
pour exécuter ses 15 + deuxième sous-routine et activer/désactiver les battements du cœur d’État sans expirer.
(La LED ne vélo pas pendant ce temps est sans importance, étant donné que d’autre, visible de l’activité
en cours).
Cette esquisse est un bijou Adafruit 5V.
//
Les actes de bijou comme chien de garde sur n’importe quel hôte disposant d’une réinitialisation matérielle broche qui
fonctions en étant tiré faible au sol.
//
Le bijou surveille hbPin, nécessitant un changement d’État au sein de la hbTime.
//
La LED bijou imite l’état du signal hbPin de l’hôte, ce qui donne un visuel
rythme cardiaque des deux armées avec une LED.
//
Si un changement d’État n’est pas détecté, resetPin est tiré à faible pour forcer un redémarrage sur l’hôte.
De toute évidence, resetPin sur le bijou doit être connecté à la broche de la TVD sur l’hôte et les deux
appareils doivent être sur un terrain d’entente.
//
Au démarrage et après une réinitialisation, resetTime est appelé pour s’assurer que l’hôte a le temps de
bien démarrer et commencer à émettre le signal de battement de coeur.
#include « timer.h »
les constantes ne changeront--utilisé pour définir les codes pin et définir les retards
const int hbPin = 3 ; Le signal provenant de l’hôte permet de paramétrer le
statut de battement de coeur
const int resetPin = 4 ; Utilisez cette broche pour réinitialiser l’hôte
const int ledPin = 1 ; LED intégrée sur bijou
resetTime long non signé const = (1000 * 60 * 3) ; donner à l’hôte 3 minutes pour démarrer
hbTime long non signé const = (1000 * 30) ; cycle de battement de coeur 30 secondes avant la réinitialisation
variables globales
int currState = élevé ;
int prevState = faible ;
Créer des instances de la minuterie
minuterie resetTimer = timer(resetTime) ; réinitialiser la minuterie de retard
minuterie hbTimer = timer(hbTime) ; minuterie de battement de coeur
/* --------------------------------------------------------------------------------- */
void setup() {}
Modes de mettre broche
pinMode (resetPin, sortie) ;
Veillez à ce que nous sommes en marche pour commencer !
digitalWrite (resetPin, HIGH) ;
Commencer avec une mise à zéro des compteurs
resetTimer.reset() ;
hbTimer.reset() ;
}
/* --------------------------------------------------------------------------- */
void loop() {}
ledHeartbeat() ;
Si ((hbTimer.update() == 1) & & (resetTimer.update() == 1)) {}
resetHost(resetPin) ;
}
}
/* --------------------------------------------------------------------------------- */
void ledHeartbeat(void) {}
Pulse la LED pour montrer que nous sommes vivants !
Utiliser le signal de battement de coeur de l’hôte pour conduire la LED
De cette façon, que nous avons la visibilité sur les deux contrôleurs avec 1 indicateur
digitalWrite (ledPin, currState = digitalRead(hbPin)) ;
Si (currState! = prevState) {/ / État a changé
prevState = currState ; Mise à jour
hbTimer.reset() ; Réinitialiser la minuterie
}
}
/* -------------------------------------------------------------------------------- */
void resetHost (int resetPin) {}
digitalWrite (resetPin, basse) ; Désactiver le relais de puissance (transistor)
Delay(5000) ; 5 secondes, donc nous ne cycle des ampoules trop vite
digitalWrite (resetPin, HIGH) ; Le réactiver pour que l’hôte puisse amorcer !
resetTimer.reset() ; La minuterie à zéro
}