\begin{exercise}[subtitle={Découverte de la carte Micro:bit}, step={1}, origin={Ma tête}, topics={ Programmation Python et microbit }, tags={ Python, Programmation, Architecture }]
    \begin{enumerate}
        \item Observer la carte micro:bit puis identifier les éléments présents en les reportant sur le schéma ci-dessous
            \begin{center}
                \includegraphics[scale=0.5]{./fig/micro-bit}
            \end{center}
        \item Classer ces éléments dans l'une des trois catégories suivantes: capteur, actionneur, autre. Imaginer une utilité possible de ces éléments.
        \item Trouver la documentation officielle (en français) de la programmation de cette carte en python (micropython ici).
    \end{enumerate}
\end{exercise}

\begin{exercise}[subtitle={Matrice Led}, step={2}, origin={Ma tête}, topics={ Programmation Python et microbit }, tags={ Python, Programmation, Architecture }]
    Dans cette exercice, vous apprendrez à utiliser la matrice de led.

    Page de la documentation officiel traitant des images: \url{https://microbit-micropython.readthedocs.io/fr/latest/tutorials/images.html}

    La documentation nous invite à essayer ce premier programme

    \begin{center}
        \begin{minipage}{0.5\linewidth}
            \lstinputlisting{./scripts/02_image.py}
        \end{minipage}
    \end{center}

    \begin{enumerate}
        \item Écrire le programme proposé et le déposer sur la carte pour voir le dessin affiché.
        \item Affichage d'images pré-dessinées
            \begin{enumerate}
                \item En vous basant sur la documentation, modifier le programme précédent pour faire afficher d'autres images.
                \item Pour afficher plusieurs image les unes à la suite des autres, il faut faire une pause entre.
                    \begin{center}
                        \begin{minipage}{0.5\linewidth}
                            \lstinputlisting{./scripts/02_image_time.py}
                        \end{minipage}
                    \end{center}
                    Modifier le programme précédent pour faire tourner une aiguille comme une montre.
            \end{enumerate}

        \item Affichage d'images personnelles
            \begin{enumerate}
                \item Lire la suite de la documentation pour afficher des images personnelles.
                \item Reproduire quelques caractères du tableau suivant
                    \begin{center}
                        \includegraphics[scale=0.8]{./fig/5x5-charmap}
                    \end{center}
            \end{enumerate}

        \item Affichage de texte: La méthode \texttt{display.scroll(....)} permet de faire défilé du texte.

        Faire défiler votre nom sur la matrice.
    \end{enumerate}
\end{exercise}

\begin{exercise}[subtitle={Quelques capteurs}, step={2}, origin={Ma tête}, topics={ Programmation Python et microbit }, tags={ Python, Programmation, Architecture }]
    Comme sur dans le premier exercice, la carte micro:bit est composé de quelques capteurs.
    \begin{enumerate}
        \item Pour accéder au capteur de température, il faut utiliser la commande \texttt{temperature()}.

                Écrire un programme qui fait défiler la température.
        \item Pour accéder au capteur de la boussole, il faut utiliser la commande \texttt{compass.heading()}.

            Écrire une programme qui fait défiler la direction de la boussole.

        \item Écrire un programme qui affiche une image, puis la température et enfin la direction de la boussole.

        \item Critiquer les deux qui viennent d'être écrits. Pourquoi ne sont-ils pas satisfaisants?
    \end{enumerate}
\end{exercise}

\begin{exercise}[subtitle={Boucles infinies}, step={3}, origin={Ma tête}, topics={ Programmation Python et microbit }, tags={ Python, Programmation, Architecture }]
    Pour mettre à jour de façon continue une valeur, il faut utiliser une \textbf{boucle infinie} pour mesurer la valeur puis éventuellement l'afficher.
    \begin{center}
        \begin{minipage}{0.5\linewidth}
            \lstinputlisting{./scripts/03_temperature_infinie.py}
        \end{minipage}
    \end{center}
    \begin{enumerate}
        \item Décrire ce que fait chaque ligne du programme.
        \item Écrire un programme qui indique la direction dans laquelle pointe la carte à tout moment.

            \textit{Pour calibrer la boussole, vous pouvez utiliser \texttt{compass.calibrate()} avant la boucle infinie.}
        \item Dessiner deux coeurs, un petit et un gros, puis faire apparaitre un coeur qui bat sur la matrice.
        \item Le planeur est le plus petit vaisseau qui peut apparaitre dans le Jeu de la vie de Conway. Faire défiler un planeur sur la matrice.
    \end{enumerate}
\end{exercise}

\begin{exercise}[subtitle={Boucles finies avec condition}, step={3}, origin={Ma tête}, topics={ Programmation Python et microbit }, tags={ Python, Programmation, Architecture }]
    La boucle \texttt{while} vue dans l'exercice précédent peut aussi s'arrêter à une certain condition.
    \begin{center}
        \begin{minipage}{0.5\linewidth}
            \lstinputlisting{./scripts/03_while_condition.py}
        \end{minipage}
    \end{center}
    \begin{enumerate}
        \item Décrire ce que fait chaque ligne.
        \item Écrire un programme qui fait un décompte en partant de 5 puis qui affiche un coeur.
    \end{enumerate}
\end{exercise}


\begin{exercise}[subtitle={Boucle finie}, step={4}, origin={Ma tête}, topics={ Programmation Python et microbit }, tags={ Python, Programmation, Architecture }]
    Il est possible aussi de faire des boucles sur des ensembles définis à l'avance.

    Par exemple faire déplacer un point sur la matrice.

    \begin{center}
        \begin{minipage}{0.7\linewidth}
            \lstinputlisting{./scripts/04_for_led.py}
        \end{minipage}
    \end{center}

    \begin{enumerate}
        \item Faire parcourir au point toute la matrice led.
        \item Faire clignoter 5 fois chaque led de la première colonne de la matrice.
        \item (*) Faire 5 relevés de température à une seconde d'intervalle, ajouter ces 5 valeurs, puis afficher la température moyenne sur les 5 secondes écoulées.
    \end{enumerate}

    On peut aussi faire une boucle sur des éléments d'une liste

    \begin{center}
        \begin{minipage}{0.5\linewidth}
            \lstinputlisting{./scripts/04_for_list.py}
        \end{minipage}
    \end{center}
    \begin{enumerate}
        \setcounter{enumi}{3}
        \item Changer les images affichées.
        \item Afficher une aiguille qui tourne.
    \end{enumerate}
\end{exercise}


\begin{exercise}[subtitle={Capteurs}, step={5}, origin={Ma tête}, topics={ Programmation Python et microbit }, tags={ Python, Programmation, Architecture }]
    Il est aussi possible d'utiliser les deux boutons à côté de la matrice led.

    \begin{center}
        \begin{minipage}{0.5\linewidth}
            \lstinputlisting{./scripts/05_boutons.py}
        \end{minipage}
    \end{center}

    \begin{enumerate}
        \item Modifier le programme pour qu'il affiche la température si le bouton a est préssé et la direction de la boussole sinon.
        \item (*) Écrire un programme qui montre un visage content sauf quand on secoue le microbit où le visage devient triste.
        \item (*) Écrire une programme qui permet de faire circuler des images dans une liste avec les boutons a et b.
    \end{enumerate}
\end{exercise}

\begin{exercise}[subtitle={Plus ou moins}, step={5}, origin={Classique}, topics={ Programmation Python et microbit }, tags={ Python, Programmation, Architecture }]
    Écrire un programme qui compte le nombre de fois où vous avez appuyé sur le bouton A et sur le bouton B et qui affiche les symboles:
    \begin{itemize}
        \item "=": si vous avez autant appuyé sur A que sur B.
        \item ">": si vous avez plus appuyé sur A que sur B.
        \item "<": si vous avez moins appuyé sur A que sur B.
    \end{itemize}
\end{exercise}

% ---- Miniprojets


\begin{exercise}[subtitle={Queulorior}, step={6}, origin={Pydefi}, topics={ Programmation Python et microbit }, tags={ Python, Programmation, Architecture }]
    \begin{minipage}{0.15\linewidth}
        \includegraphics[scale=0.2]{./fig/queulorior-pedia}
    \end{minipage}
    \begin{minipage}{0.7\linewidth}
        Le Queulorior a ceci de particulier que de la peinture s'écoule au bout de sa queue. Ainsi, lorsqu'il se déplace, il laisse une trace.
    \end{minipage}

    Sacha sait que vous avez un Queulorior et pour communiquer avec vous, il vous envoie des instructions à donner au Queulorior. Ces instructions forment une séquence assez longue composée de 4 lettres : N, S, O et E. La lettre N indique au Queulorior de faire un pas vers le nord, la lettre S lui indique de faire un pas vers le sud, la lettre E un pas vers l'est et la lettre O un pas vers l'ouest.

    Par exemple, donnez ces instructions au Queulorior :

    \begin{center}
        NNEESOOEES
    \end{center}

    Il va faire deux pas vers le nord, deux pas vers l'est, un pas vers le sud, deux pas vers l'ouest, deux pas vers l'est et un pas vers le sud, ce qui dessinera un A approximatif :

    \begin{center}
        \includegraphics[scale=1]{./fig/trajet_queulorior}
    \end{center}

    Écrire un programme où le message est stocké dans une variable et où le message décodé s'affiche sur l'écran.
\end{exercise}

\begin{exercise}[subtitle={Snake}, step={6}, origin={Classique}, topics={ Programmation Python et microbit }, tags={ Python, Programmation, Architecture }]
    On souhaite coder un prototype du jeu snake sur le micro:bit. Vous pouvez le commencer seul ou suivre les étapes suivantes
    \begin{enumerate}
        \item Pour le moment le serpent a une taille de 1 pixel. Le faire avancer en ligne droite sur la matrice. Quand il sort de la matrice, tout l'écran doit clignoter.
        \item On veut pouvoir le faire tourner à droite ou à gauche avec les boutons A et B. Ajouter cette possibilité de changement de direction.
        \item Ajouter une choses à manger (un pixel). La matrice doit afficher un cœur quand la chose est touché par le serpent puis la chose réapparait à un autre endroit.
        \item (*) Faire en sorte que le serpent face 2 pixels de long.
        \item (*) Le serpent doit s'allonger de 1 pixel à chaque fois qu'il mange un pixel.
        \item (*) La partie doit être perdue quand la tête du serpent touche une partie de son corps.
    \end{enumerate}
\end{exercise}

% ---- Pure Python

\begin{exercise}[subtitle={Pure Python}, step={7}, origin={}, topics={ Programmation Python et microbit }, tags={ Python, Programmation, Architecture }]
    Ci-dessous quelques exercices techniques pour se faire la main avec Python. À vous de choisir les bons outils dans le corpus pour les résoudre.

    Les exercices peuvent être faire dans l'ordre de votre choix.
    \begin{enumerate}
        \item \textbf{Mot de passe:} Étant donné un mot de passe stocké dans une variable. Le programme demande à l'utilisateur de rentrer un mot de passe tant que ce dernier n'est pas identique à celui stocké. Quand le mot de passe est trouvé, on afficher "accès autorisé"
        \item \textbf{Plus ou moins}: Étant donné un nombre stocké dans une variable. Le programme demande à l'utilisateur de le deviner. Tant qu'il ne la pas trouvé, le programme lui dira si la proposition est plus grande ou plus petite que la valeur stockée.
        \item \textbf{Questionnaire à une question:} Étant données une question et la réponse associée stockées dans deux variables. Le programme demande à l'utilisateur la réponse à la question et affiche si la réponse est bonne ou non. \textit{(On pourra amélioré ce programme en stockant plusieurs réponses possibles)}.
        \item \textbf{QCM:} Étant donnée une liste de questions fermées (qui se répondent pas oui ou non). Le programme pose les questions successivement et à la fin donne le nombre de bonnes réponses.
        \item \textbf{Table de ...:} Étant donné un nombre ainsi qu'une limite. Affiche tous les multiples de ce nombre juqu'à atteindre la limite.
        \item \textbf{Table de multiplication:} Étant donné un nombre limite. Affiche la table de multiplication de tous les nombres de 0 à cette limite.
        \item \textbf{Multiples de 3 ou 5:} Étant donné un nombre limite. Afficher tous les multiples de 3 ou de 5 inférieur à cette limite.
        \item \textbf{Pyramide de lettres:} Étant donnée une chaine de caractères. Afficher un fois la première lettre, puis deux fois la deuxième puis 3 fois la 3e...
        \item \textbf{Moyenne interactive:} Le programme demande des nombres jusqu'à ce que l'utilisateur entre "s" (pour stop) puis affiche la moyenne des nombres entrés.
        \item \textbf{Max interactif:} Le programme demande des nombres jusqu'à ce que l'utilisateur entre "s" (pour stop) puis affiche le max des nombres entrés.
    \end{enumerate}
\end{exercise}
