\documentclass{enunepage}
%publié

\usepackage{multicol}
\usepackage{svg}
\title{En une page... les cartes Arduino}

\begin{document}

\begin{multicols}{2}

    \maketitle

    \begin{abstract}
        Au laboratoire, pour contrôler des expériences ou des dispositifs complexes, il serait parfois plus qu'utile de faire appel à un programme informatique.
    \end{abstract}

    Une carte Arduino Uno version 3\footnote{Fiche technique d'une carte Arduino Uno : \url{https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf}} (figure \ref{fig:ard}\footnote{By PhilippHenkel - Own work, CC BY-SA 4.0, \url{https://commons.wikimedia.org/w/index.php?curid=74273108}}) est une carte électronique animée par un microcontrôleur ATmega328P \SI{8}{bits} capable d'échanger de l'information avec l'extérieur par le biais d'entrées/sorties, dites I/O pour input/output. Au regard d'un ordinateur conventionnel, cette carte possède des ressources extrêmement limitées (tableau \ref{tab:carac}), mais plus que suffisantes pour interagir avec un circuit électrique, des capteurs ou envoyer des consignes à des composants. Toutefois, les variables globales seront souvent préférées aux variables locales, en particulier pour les tableaux, de manière à éviter la duplication de grandes quantités de données. Il pourra alors être intéressant de s'intéresser à la notion de pointeur qui permet justement de pointer une case dans ce tableau.
    \begin{center}
        \includegraphics[width=.42\textwidth]{img/carte.png}
        \captionof{figure}{Représentation d'une carte Arduino Uno}
        \label{fig:ard}
    \end{center}
    \begin{center}
        \begin{tabular}{|l|c|}
            \hline
            Caractéristique & Valeur \\
            \hline
            \hline
            Fréquence processeur & \SI{16}{MHz} \\
            Mémoire RAM & \SI{2}{ko} \\
            Mémoire flash & \SI{32}{ko} \\
            I/O analogiques & 6 \\
            I/O numériques & 19 \\
            I/O interrupt & 2 \\
            Courant continu par I/O & \SI{20}{mA} \\
            \hline
        \end{tabular}
        \captionof{table}{Caractéristiques de la carte}
        \label{tab:carac}
    \end{center}

    Ce type de carte se programme en utilisant un langage proche du langage C, dont l'éditeur de développement est librement téléchargeable\footnote{Éditeur Arduino : \url{https://www.arduino.cc/en/software}}. Pour l'essentiel, nous pouvons considérer que les deux langages sont identiques\footnote{Documentation du langage : \url{https://docs.arduino.cc/programming/}}, à l'exception notable des tailles des entiers et des nombres à virgule flottante. Deux fonctions de type void, qui ne renvoient rien, seront considérées comme étant indispensables, \verb&setup& et \verb&loop& qui sont exécutée respectivement à l'initialisation et en boucle jusqu'à la coupure de l'alimentation de la carte. Donnons l'exemple qui consiste à faire clignoter une DEL :
    \begin{verbatim}
// Utilise la DEL sur la broche 13
int led = 13;

void setup() {
  // La broche DEL est une sortie
  pinMode(led, OUTPUT);
}

void loop() {
  // Allume la DEL avec une tension haute
  digitalWrite(led, HIGH);
  // Attend une seconde en millisecondes
  delay(1000);
  // Éteint la DEL avec une tension de zéro
  digitalWrite(led, LOW);
  delay(1000);
}\end{verbatim}
    Le logiciel ainsi créé sera compilé puis téléversé sur la carte par la liaison série via le câble USB. Elle peut également servir à transférer de l'information de la carte vers le moniteur série de l'ordinateur. Pour informer l'ordinateur de l'état de la DEL à chaque commutation, il serait possible d'ajouter dans la fonction \verb&setup&
    \begin{verbatim}
Serial.begin(9600);\end{verbatim}
    puis respectivement, avant et après la fonction \verb&delay&
    \begin{verbatim}
Serial.println("DEL allumée");
Serial.println("DEL éteinte");\end{verbatim}
Le langage étant un dérivatif du langage C, on fera attention à bien mettre un \verb&;& à chaque fin d'instruction.

Parfois, un appui sur un bouton doit déclencher une instruction sur le champ. La notion d'interruption et la fonction \verb&attachInterrupt& seront alors à considérer. Celle-ci permet de mettre en pause le code en cours d'exécution et de traiter immédiatement la fonction demandée par l'appui sur le bouton\footnote{Il faudra impérativement connecter le bouton ou le capteur aux broches 2 ou 3 de la carte Arduino Uno, ce sont les seules à supporter physiquement ce type d'action.}.

    Pour étendre les possibilités de la carte, il sera possible d'utiliser des bibliothèques qu'il est possible de gérer directement dans l'éditeur.

\end{multicols}

\end{document}
