1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.

Outils Console Arduino à usage général

Discussion dans 'Arduino' créé par jpbbricole, 16 Juin 2016.

  1. jpbbricole

    jpbbricole Ouvrier

    Messages:
    462
    Inscrit:
    26 Mai 2016
    Localité:
    Corsier-sur-Vevey (Vaud)
    Département:
    1804
    Console Arduino à usage général
    Bonjour à tous
    Dans le même ordre d’idée que Console moteur PAP, je vous propose une console à usage général, qui fonctionne la même chose mais en bien plus simple, il s’appuie aussi sur le traitement des données reçues depuis le moniteur (port COMn) de l’IDE Arduino ou de n’importe quel émulateur de terminal. Cet outil vous permet, à titre d’exemple, de faire varier la période de clignotement de la fameuse LED 13 avec les ordres : LedOnMs=1000 LedOffMs=500.
    upload_2016-6-16_20-5-36.png
    Code:
    /*'****************************************************************
    '*  Name    : Console à usage général (COUG)                      *
    '*  Author  : jpbbricole                                          *
    '*  Date    : 12.06.2016                                          *
    '*  Version : 0.1                                                 *
    '*  Notes   : Utilisation du moniteur série de l'IDE Arduino      *
    '*            ou tout autre terminal sur le PC                    *
    '*            pour introduire des paramètres ou commandes pendant *
    '*           le déroulement de votre programme                    *
    '*                                                                *
    '* La structure des commandes est nomParametre=valeurParametre    *
    '* Les 2 commandes disponibles sont:                              *
    '*  LedOnMs=1000 LedOffMs=500                                         *
    '******************************************************************
    */
    #define ledInfoPin 13                                       // Pin du branchement de la LED information (LED 13 souvent "on board")
    int ledInfoTimerOn = 50;                                    // Temps d'allumage en millisecondes de la LED information
    int ledInfoTimerOff = 1500;                                 // Temps d'extinction en millisecondes de la LED information
    
    bool monCommandeNouvelle = false;                           // Si nouvelle commande reçue du moniteur
    String monCommande = "";                                    // Commande reçue
    
    
    void setup()
    {
        Serial.begin(9600);                                    // Démarrage du port série
        pinMode(ledInfoPin,OUTPUT);                            // Indication de la direction (out ou in) de la pin
    }
    
    void loop()
    {
        //serialEvent();                                       // Si le mode interrupt ne fonctionne pas, activer cette ligne
        if (monCommandeNouvelle)                               // Lecture du flag pour nouvelle commande
        {
            Serial.println("Echo " + monCommande);
            monCommandeTraitement(monCommande);
            monCommande = "";
            monCommandeNouvelle  = false;
        }
        digitalWrite(ledInfoPin, HIGH);
        delay(ledInfoTimerOn);
        digitalWrite(ledInfoPin, LOW);
        delay(ledInfoTimerOff);
    }
    /*--------------------------------------------------------------------------------------
    ' commRx: LedOnMs=250 veut dire temps allumage de la led = 250 millisecondes
    '-------------------------------------------------------------------------------------*/
    void monCommandeTraitement(String commRx)
    {
        int posEgale = commRx.lastIndexOf("=");                // Localiser le caractère séparateur =
        commRx.trim();                                         // Suppression des espaces inutiles, éventuels aux 2 bouts
    
        if (posEgale > 0)
        {
            String commNom = commRx.substring(0,posEgale);     // Extraire le nom de la commande, de la gauche jusqu'au caractère de séparation
            commNom.toUpperCase();                             // Mettre las valeur de la commande en majuscule pour éviter les abiguïtés
      
            String commValeur = commRx.substring(posEgale+1);  //  Extraire la valeur de la commande, depuis le caractère de séparation jusqu'à droite
      
            if (commNom == "LEDONMS")
            {
                ledInfoTimerOn = commValeur.toInt();           //  On met ledInfoTimerOn à la valeur commValeur transformée en chiffre par .toInt
            }
            else if (commNom == "LEDOFFMS")
            {
                ledInfoTimerOff = commValeur.toInt();
            }
            else
            {
                Serial.println("Commande -" + commRx + "- Inconnue!");
            }
        }
        else
        {
            Serial.println("Commande -" + commRx + "- Invalide!");
        }
    }
    /*--------------------------------------------------------------------------------------
    ' https://www.arduino.cc/en/Tutorial/SerialEvent
    ' Reception des données depuis le moniteur ou le PC
    ' Cette routine, dans la pluspart des Arduino, fonctionne en mode interrupt.
    ' C'est à dire qu'elle s'occupe seule de traiter chaque caractère reçu. Pendant ce temps,
    ' votre programme peut faire autre chose.
    ' Vous devez simplement surveiller la variable monCommandeNouvelle.
    '
    ' La chaîne reçue doit se terminer par le caractère ASCII NL Nouvelle Ligne code 10
    ' En bas du moniteur, à gauche de la vitesse, mettre nouvelle ligne.
    ' Donc l'introduction de la ligne de commande doit se terminer par la touche Enter
    '---------------------------------------------------------------------------------------
    */
    void serialEvent()
    {
        while (Serial.available())                                     // Boucle tant que des caractères sont disponibles dans le buffer
        {
            char monChar = (char)Serial.read();                        // Caractère reçu du moniteur
            if (monChar == '\n')                                       // Si nouvelle ligne reçu donc fin de la ligne de commande
            {
                monCommandeNouvelle  = true;                               // monCommandeNouvelle est vraie
            }
            else
            {
                if (monChar >= ' ') {monCommande += monChar;}          // Addition de chaque carattère reçu en suppromant les caractères < espace
                // dans le tableau ASCII afin de supprimer tout les caractères de contrôle
            }
        }
    }
    

    Incorporé, provisoirement dans votre développement, il vous permettra de faire varier des variables sans devoir recompiler le programme. Vous arriverez aisément à l'adapter à vos propres besoins .



    Toujours à votre disposition

    Cordialement

    Jpbbricole
    Voir la pièce jointe Kit_USIN_ConsoleUsageGen.zip
     
    Dernière édition: 16 Juin 2016
  2. pinou29

    pinou29 Compagnon

    Messages:
    1 014
    Inscrit:
    18 Mars 2009
    Localité:
    Toulon ( Var )
Chargement...

Partager cette page