Accueil > Arduino, Matériel > Utilisation des interruptions sur l’Arduino

Utilisation des interruptions sur l’Arduino

Au lieu de faire une boucle et de lire la valeur d’une entrée afin d’effectuer une tâche; il peut être judicieux d’utiliser les interruptions matérielles. L’Arduino possède 2 broches qui permettent de traiter les interruptions; ces broches sont les 2 (interruption 0) et 3 (interruption 1).

Pour tester le fonctionnement des interruptions, nous allons effectuer le câblage suivant :

image

Nous plaçons un condensateur en parallèle sur l’interrupteur pour éviter l’anti-rebond au niveau de l’interrupteur.

Nous utiliserons la LED interne (broche 13) de l’Arduino pour afficher l’état.

Le programme sera le suivant :

/* Programme pour tester les interuptions */

int bouton = 0; // interruption 0, pin 2
int pinled = 13; // LED intégré pin 13
int etat = LOW;

void traite_int()
{
  // fonction exécutée si interruption détectée
  etat = !etat;
  digitalWrite(pinled, etat);
}

void setup()
{
  attachInterrupt(bouton, traite_int, FALLING);
  pinMode(pinled, OUTPUT);
  digitalWrite(pinled, etat);
}

void loop()
{
  delay(10);
}

A chaque appuie sur l’interrupteur l’état de la LED change.

La fonction attachInterrupt(param1, param2, param3) nécessite 3 paramètres :

– param1 : numéro d’interruption à utiliser (0 ou 1);

– param2 : fonction à exécuter lors de l’interruption; elle ne peut avoir de paramètres et ne retourne rien.

– param3 : le type de déclenchement de l’interruption; il y a 4 types de déclenchements possible :

          * LOW : l’entrée est au niveau bas;

          * RISING : l’entrée passe du niveau bas au niveau haut;

          * FALLING : l’entrée passe du niveau haut au niveau bas;

          * CHANGE : l’entrée a changé de niveau.

Catégories :Arduino, Matériel Étiquettes : ,
  1. Richard Van de oosdijk
    11/05/2014 à 15:42

    Le bouton devrait avoir la valeur 2 et non 0 (dans le code)

    Richard

    • 12/05/2014 à 19:55

      C’est bien 0 qui indique l’utilisation de l’interruption 0

  2. Maestro
    27/01/2018 à 20:54

    Hi Guy,

    i have a problem and i don´t know , if you can help.

    i have a generator , which gives a voltage from 0-5v out. i connected the output of the generator to an interrupt and i have another voltage always with the same range(0-5v). so i connected this one to another interrupt on my arduino Mega 2560.

    I main point i want to reach, is first of all to find the right zero of my signal, when he comes out. Because i have a rectangular signal. Secondly i need to know how the arduino could convert the tension in angle(with the first tension) and the with the second tension convert it in time.

    I need this tho control the a Optokoppler connected on a digital outputi will choose)

    steps to follow to solve the problem:

    1)read a voltage for the angle
    2)read the voltage for the time to set the optokoppler high or low
    3)convert the voltage in angle
    4)convert the voltage in zeit

    5)wait according to the given angle==> optokoppler « HIGH »

    6) wait according to the given Time ==> optokoppler « LOW »

    the given angle and time will be entered on a Graphical User Interface from Labview, later it would be converted in a voltage through the system of the compagny and the voltage will reach the arduino..

    So i need to know , how the arduino will recognize , that the reading voltage at the interrupt correspond to the entered angle angle or this time given by the user at the bigining?

    I wanted to detect first of all the zero of my signal , so that the microcontroller arduino Mega 2560 can start at the same point to read the signal and send the command to set the optokoppler high or low..how to do this?

    PS: For the input= the angle i have 5v correspond to 360 degre and for the other input for the time i have 5v who corresponds to 60s.

    The rectangular signal has a frequency for 50 Hz and the period of 20ms.

    Please could someone help me?

    Regards!

  3. Maestro
    27/01/2018 à 20:55

    vous pouvez aussi me repondre en francais

  4. Jean-Jo
    09/11/2018 à 17:02

    Richard a raison. Il faut bien déclarer dans le programme et pas dans le commentaire que l’on doit lire sur le pin 2.

  5. Michel CAILLET
    25/04/2019 à 16:13

    Bonjour,
    Ce post date un peu mais très instructif. Merci à son auteur !
    Cependant, je suis à la recherche d’un montage qui utilise plusieurs boutons (Par exemple 2). Si la partie logiciel me semble facile (2 attachInterrupt(), 2 fonctions…Etc), en revanche la partie câblage me semble beaucoup plus floue…
    Etant donné que la masse (GND) et le 5V vont être communs à tous les boutons poussoirs, je ne vois pas bien le schéma à réaliser avec les résistances de Pull-up et les condo anti-rebond.
    Sur le net, je trouve des schémas où plusieurs boutons partagent le même « attachInterrupt() » (avec une seule PIN) avec l’aide de diodes. Mais je trouve aucun schéma de cablage avec plusieurs boutons poussoir et autant de » attachInterrupt() » (avec autant de pin INTx)
    Si quelqu’un peut sortir son crayon et me faire un petit schéma, je suis preneur.
    Michel

    • 04/05/2019 à 22:43

      Bonsoir
      C’est simple.
      Il faut reproduire le même schéma (résistance et condensateur et bouton). Mais chaque bouton brancher sur une pin différente de l’arduino

  1. No trackbacks yet.

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :