MTobjets: Exemple 1
Gestion par événements pour UNO, Nano, Mega

Surveillance de rotation

Problème posé

Un axe doit tourner en permanence. Si il s'arrête, la Nano doit envoyer un signal indiquant l'arrêt.

 

Solution

Un capteur (NPN, mécanique, effet hall) se trouve sur l'axe et délivre des impulsions à chaque tour. Si il n'y a plus d'impulsion pendant 3s c'est que l'axe ne tourne plus. Une Nano va alors activer une sortie.

 

Réalisation

Un objet MTbutton utilise le capteur en entrée. Chaque changement de niveau indique que l'axe tourne (on ne peut pas s'intéresser au niveaux car un arrêt de l'axe peut se produire aussi bien quand le capteur est HIGH que LOW. On peut utiliser uniquement l'information front montant, ici j'opte pour les deux changements de niveaux.

Si au bout de 3s on n'a pas d'informations, on va activer une led, par exemple BUILTIN_LED. Il faut donc utiliser un monostable que l'on réinitialisera à chaque changement de niveau du capteur. Tant que l'on a des impulsions, la réinitialisation du monostable fera que l'on arrivera pas au 3s.

 

Programme complet recommandé

Ce programme se fait complètement sous interruption, et libère loop qui peut être utilisé pour faire autre chose.

#include <MTobjects.h> // V1.0.2 Voir http://arduino.dansetrad.fr/MTobjects

const byte CAPTEUR = 2;


void allume(void) // Appelée en cas d'arrêt de plus de 3s
{
  digitalWrite(LED_BUILTIN, HIGH);
}
MTclock Temporisateur(3000 milli_secondes, allume);


void eteint(void) // Appelée pour chaque front du capteur
{
  pinMode(LED_BUILTIN, OUTPUT); // Peut être mis dans le setup
  Temporisateur.start(); // Réinitialise le temporisateur
  digitalWrite(LED_BUILTIN, LOW);
}
MTbutton Capteur(CAPTEUR, eteint, eteint);


void setup(){}
void loop(){}

setup et loop étant vide, il est possible d'utiliser ce programme sans aucune modification avec n'importe que autre code, par exemple en supprimant les deux dernières lignes de ce code et en mettant le reste avant l'autre code.