Chapitre 1

 

Dans ce chapitre, on va essayer de mieux comprendre ce qui se passe entre le PC et l’Arduino.

Première idée fausse: C’est le PC qui commande l’Arduino

Lors du lancement du programme, ce serait le PC qui commanderait l’Arduino en lui envoyant au fur et à mesure les ordres. Le câble USB servirait de lien pour que le PC envoie ses ordres au fur et à mesure de l’exécution du programme.

En fait ça ne se passe pas comme ça. Le logiciel Arduino que l’on installe sur le PC permet :

– d’écrire de petits programmes
– de transformer ces programmes en code compréhensible par l’Arduino
– d’envoyer ce code vers l’Arduino via le câble USB

Dès que le code est chargé (cela demande quelques secondes) dans l’Arduino, il commence à s’éxécuter.

Deuxième idée fausse: si on débranche le câble USB le programme s’arrête

C’est plus compliqué que ça… Il y a plusieurs façons d’alimenter électriquement l’Arduino. Une des ces façons est d’utiliser un câble USB. Si c’est la seule alimentation électrique de la carte alors oui, si on débranche le câble le programme s’arrête.

Mais la carte peut-être alimentée d’autres façons : on peut se procurer par exemple un adaptateur 3-12v, (le régler sur 7,5v) muni d’une fiche 2,1 mm avec + au centre et brancher le connecteur sur la prise spéciale, près du port USB ; on trouve aussi des adaptateurs pour piles 9v.

Dans certains modèles, c’est l’alimentation du moteur qui pourra alimenter la carte (attention à ne pas mettre une tension trop élevée sous peine de griller la carte). Sur la carte DFRduino Roméo, il est préférable de retirer le cavalier VIN=M_VIN ; de cette façon on dit qu’on ne veut pas que la carte puise son alimentation sur celle des moteurs.

Mon conseil est d’alimenter l’Arduino par une alimentation indépendante qui ne soit ni le port USB du PC ni l’alimentation des moteurs (pour les modèles qui en ont) et de débrancher le câble USB si on n’en n’a pas besoin.

Du coup si l’Arduino est alimenté électriquement de façon indépendante, débrancher le câble USB n’arrête pas le programme.

Si on coupe l’alimentation de l’Arduino, le programme reste en mémoire, il n’est pas effacé. Dès que l’on remet le courant le programme repart.

Troisième idée fausse: une fois le programme chargé et l’Arduino alimenté électriquement de façon indépendante, le câble USB ne sert plus à rien

On peut s’en passer mais dans certains programmes ce câble est très utile : en effet il permet, en cours d’exécution du programme, de dialoguer entre le PC et la carte, par exemple afficher un message sur l’écran du PC, appuyer sur une touche du PC et déclencher une action particulière …

Pour cela il faut lancer l’interface de développement Arduino puis choisir Outils/Moniteur série.

Nous allons voir cela très bientôt dans la suite de ce chapitre.

Envoyer des données vers le PC


    /* Bonjour le monde
    *
    * Chapitre un : P1 comment afficher des données sur l'ordinateur
    *
    */

    void setup() // executée une seule fois au démarrage du programme
    {
    Serial.begin(19200); // on initialise la communication Arduino PC à la vitesse de 19200 bps

    Serial.println("Bonjour le monde !"); // afficher le message avec un saut de ligne à la fin
    }

    void loop() // exécutée sans fin, en boucle
    {
    // ici la procedure loop est vide, elle ne fait donc rien
    }

Fichier hébergé par Archive-Host.com

Au dessus du message « Bonjour le monde » se situe une fenêtre de saisie sur une ligne, suivie d’un bouton « Envoyer ».

Nous allons voir que c’est ici que l’on peut saisir des valeurs qui seront envoyées à l’Arduino, pendant que le programme tourne.

Chapitre un : saisir des caractères au clavier

A partir d’un programme du chapitre zéro, voici une amélioration qui lit le clavier, quand on entre un caractère dans la fenêtre de saisie du moniteur série et qu’on appuie sur le bouton Envoyer. (Voir l’image précédente).

Si on tape un + le moteur se met en marche avant, un 0, il s’arrête, un – il part en marche arrière.


    //Chap 1 P2 programme sur DFRDuino Romeo V1.1

    int E1 = 5; // Pin 5 controle de la vitesse du moteur M1

    int M1 = 4; // Pin 4 controle du sens de rotation du moteur M1

    int car_tape; // le caractère tapé dans la fenetre du moniteur serie (ne pas oublier d'appuyer sur le bouton "Envoyer")

    void marche_avant(int a)
    {
    analogWrite (E1,a);
    digitalWrite(M1,HIGH);
    }

    void marche_arriere(int a)
    {
    analogWrite (E1,a);
    digitalWrite(M1,LOW);
    }

    void arret(int d)
    {
    digitalWrite (E1,0);
    delay(d);
    }

    void attente(int d)
    {
    delay(d);
    }

    void setup() // executée une seule fois
    {
    pinMode(4, OUTPUT);
    pinMode(5, OUTPUT);
    Serial.begin(19200);

    }

    void loop() // executée en boucle
    {

    // Est-ce qu'il y a quelque chose à lire venant de l'interface serie ? (en fait USB)

    if (Serial.available() > 0) {
    // Qu'est ce qu'on a à lire ? on met le résultat dans la variable car_tape

    car_tape = Serial.read();

    // si on a tapé le caractère + dans le moniteur serie : marche avant

    if (car_tape == '+') {
    marche_avant(120);
    }

    // si on a tapé le caractère 0 dans le moniteur serie : arret moteur

    if (car_tape == '0') {
    arret(1000);
    }

    // si on a tapé le caractère - dans le moniteur serie : marche arrière

    if (car_tape == '-') {
    marche_arriere(120);
    }

    } // fin if serial.available

    } // fin loop