Lecture et traitement d'une ligne depuis Arduino rs232. Convertir int en chaîne. Fonctions et méthodes de la classe String


Texte de chaîne = "Temp : " + tempC + " C" ;

Malheureusement, cette technique ne fonctionne pas en C. Dans ce cas, le message peut être imprimé à l'aide de plusieurs instructions d'impression, comme indiqué ci-dessous :

lcd.print("Temp : "); lcd.print(tempC); lcd.print("C");

Cette approche élimine le besoin de copier les données en coulisses lors de la concaténation de chaînes, comme cela se produit dans d'autres langages modernes.

Une approche similaire utilisant plusieurs instructions de sortie peut être utilisée avec le moniteur série et les instructions Serial.print. Dans de tels cas, la dernière commande de la ligne est généralement la commande println, qui ajoute un caractère de nouvelle ligne à la fin.

Formatage des chaînes avec sprintf

La bibliothèque C standard de fonctions de chaîne (à ne pas confondre avec la bibliothèque Arduino String Object, abordée dans la section suivante) comprend une fonction très pratique, sprintf, qui formate les tableaux de caractères. Il insère des valeurs de variable dans une chaîne de modèle, comme le montre l'exemple suivant :

sprint(line1, "Temp : %d C", tempC);

Le tableau de caractères line1 est un tampon de chaîne contenant du texte formaté. Comme indiqué dans l'exemple, il a une capacité de 17 caractères, y compris le caractère nul supplémentaire à la fin. J'ai choisi le nom line1 car je vais montrer comment former le contenu de la ligne supérieure d'un écran LCD avec deux lignes de 16 caractères chacune.

Le premier paramètre transmet à la commande sprintf un tableau de caractères dans lequel le résultat doit être écrit. L'argument suivant est une chaîne de format contenant un mélange de texte brut tel que Temp: et de commandes de formatage telles que %d. Dans ce cas, %d signifie « entier décimal signé ». Les paramètres restants seront insérés dans la chaîne de format dans l'ordre dans lequel ils apparaissent à la place des commandes de formatage.

Pour afficher l'heure sur la deuxième ligne de l'écran LCD, elle peut être formée à partir des valeurs individuelles des heures, minutes et secondes, comme indiqué ci-dessous :

sprintf(line2, "Heure : %2d:%02d:%02d", h, m, s);

Si vous essayez de transmettre la ligne 2 vers un moniteur série ou un écran LCD, vous verrez le texte

La commande sprintf a non seulement inséré les nombres aux bons endroits, mais a également ajouté un zéro non significatif avant le chiffre 5. Dans l'exemple, entre les caractères : il y a des commandes pour formater les trois composantes temporelles. L'horloge correspond à la commande %2d, qui imprime un nombre décimal à deux chiffres. Les commandes de formatage pour les minutes et les secondes sont légèrement différentes (%02d). Ces commandes génèrent également des nombres décimaux à deux chiffres, mais ajoutent un zéro non significatif si nécessaire.

Cependant, gardez à l’esprit que cette technique concerne les valeurs int. Malheureusement, les développeurs Arduino n'ont pas implémenté la prise en charge d'autres types tels que float dans la bibliothèque standard C.

Détermination de la longueur d'une chaîne

Étant donné que les chaînes stockées dans les tableaux de caractères sont souvent plus courtes que les tableaux eux-mêmes, la bibliothèque propose une fonction pratique appelée strlen. Cette fonction compte le nombre de caractères dans un tableau précédant le caractère nul qui marque la fin de la chaîne.

La fonction prend un tableau de caractères dans son seul paramètre et renvoie la taille de la chaîne (hors caractère vide) qui y est stockée, par exemple la commande

renverra le numéro 3.

Bibliothèque d'objets de chaîne Arduino

L'IDE Arduino, à partir de la version 019, publiée il y a plusieurs années, inclut la bibliothèque String, qui est plus compréhensible et conviviale pour les développeurs utilisant Java, Ruby, Python et d'autres langages où la concaténation de chaînes peut être effectuée avec un simple opérateur +. Cette bibliothèque propose également de nombreuses fonctions d'assistance pour travailler avec des chaînes.

Bien entendu, cette bibliothèque ajoute plusieurs kilo-octets de code au croquis. De plus, il utilise un mécanisme d'allocation dynamique de mémoire avec tous les problèmes qui en découlent tels que l'épuisement de la mémoire. Par conséquent, réfléchissez bien avant de décider de l’utiliser. De nombreux utilisateurs d'Arduino préfèrent utiliser des tableaux de caractères classiques.

Cette bibliothèque est incroyablement facile à utiliser, et si vous avez déjà travaillé avec des chaînes en Java, vous vous sentirez comme chez vous avec la bibliothèque Arduino String Object.

Création de chaînes

Vous pouvez créer une chaîne à partir d'un tableau d'éléments char, ou à partir d'une valeur int ou float, comme indiqué dans l'exemple suivant :

Message de chaîne = "Temp : " ;

Chaîne temp = Chaîne (123);

Concaténation de chaînes

Les chaînes peuvent être combinées entre elles et avec d'autres types de données à l'aide de l'opérateur +. Essayez d'ajouter le code suivant à la fonction de configuration d'une esquisse vide :

Série.begin(9600);

Message de chaîne = "Temp : " ;

Chaîne temp = Chaîne (123);

Serial.println(message + temp + "C");

Notez que la dernière valeur ajoutée à la chaîne est en réalité un tableau de caractères. Si le premier élément de la séquence de valeurs entre les opérateurs + est une chaîne, les éléments restants seront automatiquement convertis en chaînes avant d'être concaténés.

Autres fonctions de chaîne

Dans le tableau 6.1 répertorie quelques fonctions supplémentaires pratiques de la bibliothèque String. Une liste complète des fonctions disponibles est disponible sur http://arduino.cc/en/Reference/StringObject.

Tableau 6.1. Quelques fonctions utiles dans la bibliothèque String

Fonction

Exemple

Description

char ch = Chaîne("abc")

La variable ch recevra la valeur "a"

Chaîne s = "abc" ;

Supprimera les espaces des deux côtés du groupe de caractères abc. La variable s recevra la valeur "abc"

Chaîne s = "123" ;

int x = s.toInt();

Convertit la représentation sous forme de chaîne d'un nombre en une valeur entière ou longue

Chaîne s = "abcdefg" ;

Chaîne s2 = s.substring(1, 3);

Renvoie un fragment de la chaîne d'origine. La variable s2 recevra la valeur "bc". Les paramètres passent : l'index du premier caractère du fragment et l'index du caractère suivant le dernier caractère du fragment

Chaîne s = "abcdefg" ;

s.replace("de", "DE");

Remplace toutes les occurrences de "de" dans une chaîne par "DE". La variable s2 recevra la valeur "abcDEfg"

Utilisation de l'EEPROM

Le contenu de toutes les variables utilisées dans le croquis Arduino est perdu lorsque l'alimentation est coupée ou qu'une réinitialisation est effectuée. Pour stocker les valeurs, elles doivent être écrites octet par octet dans la mémoire EEPROM. L'Arduino Uno dispose de 1 Ko de mémoire EEPROM.

NOTE

Cela ne s'applique pas à l'Arduino Due, qui ne possède pas d'EEPROM. Dans ce modèle, les données doivent être enregistrées sur une carte microSD.

Pour lire et écrire des données sur l'EEPROM, vous devez utiliser la bibliothèque incluse avec l'IDE Arduino. L'exemple suivant montre comment écrire un seul octet dans l'EEPROM, dans ce cas, l'opération est effectuée dans la fonction de configuration :

#inclure

valeur d'octetToSave = 123

EEPROM.write(0, valueToSave);

Le premier argument de la fonction d'écriture est l'adresse dans l'EEPROM où l'octet de données doit être écrit, et le second est la valeur à écrire à cette adresse.

Les chaînes de texte peuvent être déclarées de deux manières : vous pouvez utiliser le type de données String, qui est inclus dans le noyau depuis la version 0019 ; ou déclarez la chaîne comme un tableau de caractères terminé par un caractère nul. Cette page décrit la deuxième méthode. Pour plus d'informations sur l'objet String, qui fournit davantage de fonctionnalités au prix de plus de mémoire, consultez la page String - Object.

Exemples

Vous trouverez ci-dessous des exemples de déclarations de chaîne correctes.

Caractère Str1 ; char Str2 = ("a", "r", "d", "u", "i", "n", "o"); char Str3 = ("a", "r", "d", "u", "i", "n", "o", " char Str1; char Str2 = ("a", "r", "d ", "u", "i", "n", "o"); char Str3 = ("a", "r", "d", "u", "i", "n", "o" , "\0"); char Str4 = "arduino"; char Str5 = "arduino"; char Str6 = "arduino"); char Str4 = "arduino"; char Str5 = "arduino"; char Str6 = "arduino";

Opérations autorisées lors de la déclaration de chaînes

  • Déclarer un tableau de caractères sans l'initialiser (Str1)
  • Déclarez un tableau de caractères avec un élément redondant, le compilateur lui-même ajoutera le caractère nul requis (Str2)
  • Ajouter explicitement le caractère nul (Str3)
  • Initialisez le tableau à l'aide d'une constante chaîne entourée de guillemets ; le compilateur créera un tableau de la taille requise avec un caractère nul à la fin (Str4)
  • Initialiser un tableau à l'aide d'une constante chaîne, en spécifiant explicitement sa taille (Str5)
  • Initialiser un tableau surdimensionné, laissant de la place pour des chaînes plus longues (Str6)

Caractère de fin nul

Généralement, toutes les chaînes se terminent par un caractère nul (code ASCII 0), ce qui autorise des fonctions (comme Série.print()) déterminez la longueur de la chaîne. Sans ce symbole, ils continueraient à lire séquentiellement des octets de mémoire qui ne feraient plus réellement partie de la chaîne.

Essentiellement, cela signifie que la longueur de votre chaîne doit être supérieure d'un caractère à celle du texte que vous souhaitez y stocker. C'est pourquoi Str2 et Str5 doivent comporter 8 caractères, même si le mot "arduino" n'en occupe que 7 - la dernière position est automatiquement remplie par un caractère nul. La taille de Str4 deviendra automatiquement 8 - un caractère requis pour le null final. Dans la chaîne Str3, nous avons nous-mêmes spécifié le caractère nul (noté "\0").

Notez qu'il est généralement possible de déclarer une chaîne sans caractère nul final (par exemple, si vous définissez la longueur de Str2 sur 7 plutôt que 8). Cependant, cela brisera la plupart des fonctions de chaîne, vous ne devriez donc pas le faire intentionnellement. Cette erreur peut provoquer un comportement étrange ou l'apparition de caractères étrangers lors de l'utilisation de chaînes.

Guillemets simples ou doubles ?

Les chaînes sont toujours déclarées entre guillemets doubles ("Abc") et les caractères sont toujours déclarés entre guillemets simples ("A").

Envelopper de longues lignes

Les longues lignes peuvent être enroulées comme ceci :

Char myString = "Ceci est la première ligne" " ceci est la deuxième ligne" " etcetera";

Tableaux de chaînes

Lorsque vous travaillez avec de grandes quantités de texte (par exemple, dans des projets fonctionnant avec un écran LCD), il est souvent pratique d'utiliser des tableaux de chaînes. Puisque les chaînes sont elles-mêmes des tableaux, il s’agit en fait d’un exemple de tableau à deux dimensions.

Dans le programme suivant, l'astérisque après le type de données char "char*" indique que la variable est un tableau de "pointeurs". Tous les noms de tableaux sont en fait des pointeurs, l'astérisque est donc nécessaire pour créer un tableau de tableaux. Les pointeurs en C sont l’une des choses les plus difficiles pour les débutants, mais dans ce cas, une compréhension approfondie des pointeurs n’est pas nécessaire pour les utiliser efficacement.

Exemple

char* myStrings=("Ceci est la chaîne 1", "Ceci est la chaîne 2", "Ceci est la chaîne 3", "Ceci est la chaîne 4", "Ceci est la chaîne 5", "Ceci est la chaîne 6"); void setup())( Serial.begin(9600); ) void loop())( for (int i = 0; i< 6; i++){ Serial.println(myStrings[i]); delay(500); } }

Je suis arrivé à la programmation en général, et à la programmation Arduino en particulier, comme un zéro complet, il y a environ deux mois. Désormais, dans le cadre de mes activités actuelles, j'ai ressenti le besoin de maîtriser le traitement des chaînes sur Arduino. Un simple voyage d'information sur Google ne m'a pas plu avec un article où tout est écrit simplement et clairement pour les nuls. Et c’est pourquoi je suis ici pour parler de la façon dont l’analyse des chaînes à partir d’un port série a été implémentée et des pièges rencontrés en cours de route. Pour ceux que cela intéresse, merci de vous référer au chat.

Donc. Voici un exemple d'algorithme que j'ai suivi :

  1. Nous allons sur arduino.ru et cherchons dans la colonne type tout ce qui concerne les symboles.
  2. Nous décidons quelle forme de représentation nous utiliserons (j'ai opté pour la classe String car j'ai eu une expérience désagréable avec un tableau désordonné).
  3. Nous essayons frénétiquement d'écrire notre propre fonction avec des préférences et des grilles professionnelles
  4. Je recherche un cours.
  5. Nous recherchons les opérateurs nécessaires.
  6. Écrivons!
Et l'algorithme du corps principal du programme est simple :
  1. Nous vérifions cycliquement s'il y a un octet lisible dans le tampon du port com ; s'il y en a, nous le lisons.
  2. Si l'octet reçu est un caractère de saut de ligne ("\n"), alors nous appelons la fonction d'analyse auto-écrite, sinon, nous ajoutons l'octet reçu à la variable de type String créée.
  3. Enfin, analysez la chaîne.

    En fait, parce que Étant donné que l'utilisation pratique de l'analyse de chaînes ne fonctionne pas pour moi, cette fonction n'est que de nature démonstrative, comparant la chaîne résultante avec une chaîne constante déjà écrite en mémoire. Ainsi, en utilisant l'opérateur égal, nous comparons la chaîne reçue avec celle écrite, et si l'opérateur renvoie vrai, nous quittons la fonction gestionnaire sinon, nous la comparons avec la suivante ; Si les chaînes sont équivalentes, là encore, nous quittons la fonction de gestionnaire et renvoyons le résultat. Eh bien, si cette condition ne fonctionne pas, nous quitterons toujours la fonction et dirons que la ligne n'est pas vraie.

  4. En fonction du résultat accepté, utilisez switch case pour sélectionner celui souhaité.
  5. Nous réinitialisons la chaîne reçue afin de pouvoir ensuite recommencer à la collecter.

Et pour finir, voici le code :

#define led 13 String input_string = ""; const String Led_off = "éteindre la LED"; const String Led_on = "allumer la LED"; bool led_running; void setup() ( Serial.begin(9600); ) void loop() ( while (Serial.available() > 0) ( char c = Serial.read(); if (c == "\n") ( Serial .print("Input_string is: "); Serial.println(input_string); switch (parse(input_string, Led_off, Led_on)) ( cas 10 : led_running=false; Serial.println("La mise hors tension est terminée"); break; cas 11 : led_running=true; Serial.println("La mise sous tension est effectuée"); cas 0 : Serial.println("invalid String"); String Led_off, const String Led_on) ( if (input_string.equals(Led_off) == true) ( ​​​​return 10; ) else if (input_string.equals(Led_on ) == true) ( ​​​​​return 11; ) else return 0 ;


Alors, je ne comprends pas ce qui se passe ? Pourquoi la LED ne s'allume-t-elle pas ? Oh oui, comment ai-je oublié ça, dans la configuration vide, vous devez ajouter :

PinMode (led, SORTIE);

P.S. : Il est important de régler le moniteur du port COM dans l'IDE Arduino sur le mode « Nouvelle ligne », car dans tous les autres cas, la chaîne envoyée ne sera pas accompagnée de son caractère final "\n".

P.P.S. : Je ne vais pas participer au holivar sur le fait qu'Arduino n'est pas nécessaire ; je n'ai rien fait de mal en étudiant les bases de la programmation et de l'algorithmique.

P.P.P.S. : Si l'article est reçu de manière adéquate, j'écrirai le suivant sur ce que j'ai fait pour améliorer la fonctionnalité de la fonction d'analyse. Eh bien, avec Dieu ! .

Peu importe combien j’étudie Arduino, il ne cesse de m’étonner par sa simplicité. Par exemple, lors de l'assemblage et du test du système "maison intelligente", j'ai pensé que l'envoi de commandes depuis l'ordinateur serait la partie la plus difficile - vous devez recevoir une ligne du port série, la reconnaître et vous assurer qu'aucune erreur ne se produit. .. Cependant, il s'est avéré suffisant de lire le site Web Arduino.cc et de tester quelques exemples, comme il est devenu clair : les développeurs ont essayé de nous protéger contre l'écriture de code long et ennuyeux. D’ailleurs, j’ai finalement terminé la tâche le soir, en pensant même : « quelle autre commande pourrais-je ajouter ?.. »

Supposons donc que vous sachiez déjà programmer Arduino et que vous puissiez comprendre votre propre code ou celui de quelqu'un d'autre. L'un des concepts de base concerne les variables et leurs types. Eh bien, désinvolte ? byte, int, long, char, string... Les deux derniers sont essentiellement la même chose, car string est un tableau de variables de type char (quelqu'un devrait maintenant objecter que char est représenté comme un nombre d'octets, mais ce n'est pas le cas). indiquer ). Ainsi, tout ce qui est reçu du port série doit être lu comme char :

Char inChar = " "; octet z = 0 ; while (Serial.available()) ( inChar[z] = Serial.read(); z++; )

C'est le premier exemple qui pourrait venir à l'esprit. On crée une ligne vide, puis, s'il y a quelque chose à lire depuis le port série, on le remplit caractère par caractère. La fonction Serial.available() renvoie le nombre d'octets disponibles en lecture, et s'il est vide, alors 0, évidemment. Cela peut être utilisé pour connaître la longueur de la commande donnée, même si nous la connaissons déjà dans l'exemple donné - c'est la valeur de la variable z à la sortie de la boucle. Oui, une chaîne d'espaces (code d'espace ASCII - pas zéro !) est tolérable, mais ce n'est toujours pas très bon, évitez-le si possible. Et un lecteur à l'esprit vif pourra se féliciter s'il devine immédiatement ce qui doit être corrigé dans le code ci-dessus. Pour ceux qui n'ont pas deviné, un indice : char inchar est une chaîne de 6 caractères. Si une chaîne reçoit une valeur, le compilateur permet que sa longueur ne soit pas spécifiée explicitement, donc les crochets dans l'exemple sont vides.

Au fait, n'oubliez pas d'écrire dans setup()

Série.begin(9600);

Et dans le moniteur de port intégré, auquel les commandes seront effectivement envoyées, spécifiez la vitesse - 9600 bauds, sinon vous verrez des fissures.

Ensuite, que faire de la chaîne résultante ? Ceux qui proposent de comparer une chaîne octet par octet avec des valeurs connues (et une telle idée peut certainement venir à l'esprit de quelqu'un) après avoir lu l'article avanceront dans le temps de 20 ans par rapport au passé, je veux dire :)

Une recherche dans la documentation de l'IDE Arduino donne deux options pour savoir ce qu'est une chaîne. Il s'agit d'une chaîne elle-même en tant que chaîne de caractères, et String, qui est un objet. Selon Wikipédia, il s'agit d'une « entité dans l'espace virtuel qui a un certain état et un certain comportement, qui a des valeurs de propriétés spécifiées ». (attributs) et opérations sur eux (méthodes) ". En d'autres termes, une variable avec des fonctions intégrées qui font quelque chose avec cette variable. Pour commencer à travailler avec cet objet, écrivons quelque chose comme ceci :

Entrée de chaîne = "" ; while (Serial.available()) ( input += Serial.read(); )

Ici, de plus en plus de nouveaux caractères seront ajoutés à l'entrée jusqu'à ce que le tampon soit épuisé. Il sera alors possible d'analyser la chaîne résultante, par exemple, comme ceci :

Entrée.toLowerCase(); if(input.startsWith("pause")) ( String toWait = input.substring(5); toWait.trim(); int delaytime = toWait.toInt(); if(delaytime>0) ( if(delaytime<10000) { delay(delaytime); } } }

Le code utilise des fonctions très pratiques intégrées à l'objet String. Il s'agit de startWith(), qui renvoie un si la chaîne commence par ce qui est écrit entre parenthèses, substring(), qui renvoie un morceau de chaîne, en commençant dans ce cas par le 5ème caractère (compté à partir de zéro), trim() , qui supprime tout ce qui est inutile se trouve sur les bords de la ligne, et toInt(), qui transforme ce qui reste en un certain nombre de type Int. C’est également une bonne idée de vérifier ce nombre pour voir s’il se situe dans la fourchette attendue. En conséquence, si vous donnez la commande « PauSe 567 », alors le MK attendra exactement 567 millisecondes.

Cela vaut la peine d'écrire sur trim() séparément. Il est nécessaire non seulement de supprimer l'espace au début de la ligne résultante, mais surtout de supprimer les caractères à la fin. Ce sont des caractères de service ajoutés lors de l'envoi d'un message - NL (nouvelle ligne) et CR (retour chariot). Ils sont nécessaires uniquement pour signaler la fin de la commande, mais ils peuvent aussi interférer. Par conséquent, même si vous pouvez choisir dans le moniteur de port lequel de ces caractères envoyer ou rien envoyer, il est préférable d'être prudent. De plus, cela se fait en une seule ligne de code.

Et voici la liste des fonctions (méthodes) de l'objet String.

    charAt()- renvoie le caractère à la position spécifiée

    concat ()- fonction de concaténation, c'est-à-dire fusionner deux chaînes en une seule. Certes, string1 = string1 + string2 est identique à string1.concat(string1, string2), mais est écrit plus simplement et plus clairement.

    est égal()- en renvoie un si la chaîne est égale, caractère par caractère, à ce qui est écrit entre parenthèses. Il existe également equalsIgnoreCase(), qui ignore la casse (majuscule ou inférieure)

    se termine par()- qui fonctionne de la même manière que startWith()

    indexDe()- renvoyer l'emplacement dans la chaîne du caractère (ou de la chaîne) entre parenthèses. Recherche à partir de la fin et renvoie -1 s'il n'est pas trouvé.

    longueur()- afficher la longueur de la chaîne

    setCharAt()- exigeant une place et un caractère qu'il faut mettre à cette place, par exemple : string1.setCharAt(3, "d") mettra d comme troisième caractère de la ligne au lieu de ce qu'il y avait

  • Et quelques autres dont vous n'aurez probablement pas besoin si vous ne pouvez pas aller sur arduino.cc et en savoir plus :)

C'est tout ce que je voulais te dire. J'espère que cet article vous aidera à ne pas avoir peur de la POO et à apprendre à votre robot domestique sur Arduino à obéir aux signaux de l'ordinateur

Je suis arrivé à la programmation en général, et à la programmation Arduino en particulier, comme un zéro complet, il y a environ deux mois. Désormais, dans le cadre de mes activités actuelles, j'ai ressenti le besoin de maîtriser le traitement des chaînes sur Arduino. Un simple voyage d'information sur Google ne m'a pas plu avec un article où tout est écrit simplement et clairement pour les nuls. Et c’est pourquoi je suis ici pour parler de la façon dont l’analyse des chaînes à partir d’un port série a été implémentée et des pièges rencontrés en cours de route. Pour ceux que cela intéresse, merci de vous référer au chat.

Donc. Voici un exemple d'algorithme que j'ai suivi :

  1. Nous allons sur arduino.ru et cherchons dans la colonne type tout ce qui concerne les symboles.
  2. Nous décidons quelle forme de représentation nous utiliserons (j'ai opté pour la classe String car j'ai eu une expérience désagréable avec un tableau désordonné).
  3. Nous essayons frénétiquement d'écrire notre propre fonction avec des préférences et des grilles professionnelles
  4. Je recherche un cours.
  5. Nous recherchons les opérateurs nécessaires.
  6. Écrivons!

Et l'algorithme du corps principal du programme est simple :

  1. Nous vérifions cycliquement s'il y a un octet lisible dans le tampon du port com ; s'il y en a, nous le lisons.
  2. Si l'octet reçu est un caractère de saut de ligne ("n"), alors nous appelons la fonction d'analyse auto-écrite, sinon, nous ajoutons l'octet reçu à la variable de type String créée.
  3. Enfin, analysez la chaîne.

    En fait, parce que Étant donné que l'utilisation pratique de l'analyse de chaînes ne fonctionne pas pour moi, cette fonction n'est que de nature démonstrative, comparant la chaîne résultante avec une chaîne constante déjà écrite en mémoire. Ainsi, en utilisant l'opérateur égal, nous comparons la chaîne reçue avec celle écrite, et si l'opérateur renvoie vrai, nous quittons la fonction gestionnaire sinon, nous la comparons avec la suivante ; Si les chaînes sont équivalentes, là encore, nous quittons la fonction de gestionnaire et renvoyons le résultat. Eh bien, si cette condition ne fonctionne pas, nous quitterons toujours la fonction et dirons que la ligne n'est pas vraie.

  4. En fonction du résultat accepté, utilisez switch case pour sélectionner celui souhaité.
  5. Nous réinitialisons la chaîne reçue afin de pouvoir ensuite recommencer à la collecter.

Et pour finir, voici le code :

#define led 13 String input_string = ""; const String Led_off = "éteindre la LED"; const String Led_on = "allumer la LED"; bool led_running; void setup() ( Serial.begin(9600); ) void loop() ( while (Serial.available() > 0) ( char c = Serial.read(); if (c == "n") ( Serial. print("Input_string is: "); Serial.println(input_string); switch (parse(input_string, Led_off, Led_on)) ( case 10: led_running=false; Serial.println("La mise hors tension est terminée"); break; case 11 : led_running=true; Serial.println("La mise sous tension est effectuée"); break; case 0: Serial.println("invalid String"); ( led_running += c; ) ) analyse d'octets(String input_string, const String Led_off, const String Led_on) ( if (input_string.equals(Led_off) == true) ( ​​​​return 10; ) else if (input_string.equals(Led_on) == true) ( ​​​​renvoie 11 ; sinon renvoie 0 ;

Alors, je ne comprends pas ce qui se passe ? Pourquoi la LED ne s'allume-t-elle pas ? Oh oui, comment ai-je oublié ça, dans la configuration vide, vous devez ajouter :

PinMode (led, SORTIE);

P.S. : Il est important de régler le moniteur du port COM dans l'IDE Arduino sur le mode « Nouvelle ligne », car dans aucun autre, la chaîne envoyée ne sera accompagnée de son caractère final "n".

P.P.S. : Je ne vais pas participer au holivar sur le fait qu'Arduino n'est pas nécessaire ; je n'ai rien fait de mal en étudiant les bases de la programmation et de l'algorithmique.

P.P.P.S. : Si l'article est reçu de manière adéquate, j'écrirai le suivant sur ce que j'ai fait pour améliorer la fonctionnalité de la fonction d'analyse. Eh bien, avec Dieu ! .



Des questions ?

Signaler une faute de frappe

Texte qui sera envoyé à nos rédacteurs :