\documentclass{enunepage}

\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}
        \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 d'une carte Arduino Uno}
        \label{tab:carac}
    \end{center}
    \begin{center}
        \includegraphics[width=.42\textwidth]{img/carte.png}
        \captionof{figure}{Représentation d'une carte Arduino Uno}
        \label{fig:ard}
    \end{center}

    Ce type de carte se programme en utilisant un langage très inspiré 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 floats par exemple. 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 led 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 cable 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 la fonction \verb&delay&
    \begin{verbatim}
Serial.println("DEL allumée");
Serial.println("DEL éteinte");\end{verbatim}
Le langage étant un dérivatif de 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.

    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}
