Cours Systèmes Embarqués
Fouad MOUTAOUAKKIL
Généralités et définitions
Système embarqué
Électronique Informatique
Carte électronique Programmable
Système embarqué
Système autonome en temps réel
Dédié à une tâche précise
Ses ressources sont généralement limitées spatialement(encombrement
réduit)
Consommation énergétique restreinte
Le cœur d’un système embarqué est un microprocesseur ou un
microcontrôleur
Intégrant une mémoire flash, mémoire RAM, EEPROM
Microcontrôleur vs Microprocesseur
Microcontrôleur Microprocesseur
comme un mini-ordinateur doté d’un Une puce intégrée au silicium avec
processeur, de RAM, de ROM, de ports
série, de timers et des périphériques E/S, uniquement une unité de traitement
le tout intégré sur une seule puce. centrale.
Les microcontrôleurs ont un grand Le microprocesseur a moins de
nombre de registres, ce qui facilite
l’écriture des programmes. registres, donc plus d’opérations sont
basées sur la mémoire.
est conçu pour effectuer des tâches
spécifiques aux applications nécessitant sont conçus pour des applications
un certain degré de contrôle, telles que
télécommande, écran à LED, montres générales telles que les opérations
intelligentes, véhicules, contrôle des feux logiques dans un système
de circulation, contrôle de température, informatique.
etc.
La mémoire
La mémoire Flash : c’est celle qui contiendra le programme à exécuter
(celui que vous allez créer !). Cette mémoire est effaçable et réinscriptible
(c’est la même que celle d’une clé USB par exemple).
RAM(Random Access Memory): c’est le mémoire dite vive, elle va
contenir les variables du programme. Elle est dite « volatile » car elle
s’efface si on coupe l’alimentation du microcontrôleur,
EEPROM (Electrically-Erasable Programmable Read-Only Memory
ou mémoire morte effaçable électriquement et programmable): c’est le
disque dur du microcontrôleur. On peut y enregistrer des informations qui
sont besoin de survivre dans le temps, même si la carte doit être arrêtée
et coupée de son alimentation. Cette mémoire ne s’efface pas lorsqu’on
le reprogramme
La mémoire
Les registres : c’est un type particulier de mémoire utilisé par le processeur.
Nous n’en parlerons pas tout de suite.
La mémoire cache: c’est une mémoire qui fait la liaison entre le registre et
la RAM.
Introduction à l’arduino
Arduino
Famille des cartes embarqué (realeases)
Fabriqué par la société italienne Smart Projects
Open source
un macro-composant dans des applications de prototypage
électronique
Un logiciel multi-platforme Arduino IDE
Le langage Arduino est basé sur les langages C/C++ , avec des fonctions
et des librairies spécifiques à Arduino
Domaines d’application
Défense / aéronautique (drones)
Domotique
Électronique industrielle
Informatique embarqué
le modélisme
Agriculture
Apprentissage et éducation
Domotique
contrôler l’éclairage de la habitation en paramétrant une interface sur le
téléphone qui vous permettra d’allumer et d’éteindre ou voir même choisir
son intensité
Contrôler les volets de la maison càd choisir quand les volets de la maison
doivent s’ouvrir et se fermer automatiquement en fonction de la météo
extérieure
gérer des caméras
Faire sa propre alarme
door locker / openner
Reconnaissance faciale / reconnaissance vocale
Autres possibilités d’usage
détecter un ou plusieurs événements (variation de
température, mouvement, présence, distance …)
en fonction de ces événements, agir sur le
monde réel à l'aide d'actionneurs (résistances
chauffantes, moteurs ...),
on peut tout faire : bras de robot, régulation de
température, effets lumineux, instruments de
musique, systèmes d'alarmes, ...
Les concurrents d’Arduino
Raspberry Pi Arduino
C’est un mini ordinateur avec un C’est un microcontrôleur qui exécute
raspberry OS qui exécute plusieurs le même programme.
programme
C’est simple à communiquer avec
C’est compliqué à communiquer d’autre modules ou cartes
avec différents capteurs et ça
demande des librairies spécifiques C’est pas cher
C’est cher Ça exige un hardware externe pour
Ça connecte à internet facilement connecter à l’internet
avec sa port Ethernet et le port USB
Avantages d’Arduino
Pas cher
Environnement de programmation clair et simple
Multiplateforme : tourne sous Windows, Macintosh et Linux
Nombreuses librairies disponibles avec diverses fonctions implémentées
Logiciel et matériel open source et extensible
Nombreux conseils, tutoriaux et exemples en ligne (forums, site perso
etc...)
Les plus populaires boards
Uno
Atmega328 processeur
cadencé à 16MHz
Mémoire flash: 32Kb
Mémoire RAM: 2Kb
EEPROM: 1Kb
14 broches d’E/S
6 entrées analogiques 10 bits
Prototypage et support des
autres modules( des simples
robot, voiture
télécommandée, console des
jeux…)
Nano
Atmega328 processeur cadencé
à 16MHz
Mémoire flash: 32Kb
Mémoire RAM: 2Kb
EEPROM: 1Kb
14 broches d’E/S
6 entrées analogiques 10 bits
Le moins cher
Ne peut pas connecter à
d’autre module
Petit espace, pas cher ( drones,
electronique portable…)
Due
Processeur ATSAM3X8E Cortex-M3
cadencé à 84MHz
Mémoire flash: 512Kb
Mémoire RAM: 96Kb
EEPROM: 1Kb
54 broches d’E/S
12 entrées analogiques 10 bits
2 sorties analogiques
Une des plus cher
Prototypage haute performance(
processeur de données de sources
multiples, automatisation des
maisons, contrôleur de machine…)
Mega 2560
processeur ATmega2560
cadencé à 16MHz
Mémoire flash: 256Kb
Mémoire RAM: 8Kb
EEPROM: 4Kb
54 broches d’E/S
16 entrées analogiques 10
bits
Haute exigences E/S avec
un stockage mémoire
intéressant ( automatisation
des maisons et des chaines
de production…)
Les plus populaires shields
“
Sheild Arduino
”
Un shield est une carte d'interface spécialement dédiée à l'Arduino. Ces
cartes ont des dimensions sensiblement voisines de la carte Arduino et
peuvent s'enficher directement sur les connecteurs de celle-ci.
Pour prototypage
Cette plaque permet
de câbler de
nombreux composants
sans faire de soudure
et garder le montage
entièrement
démontable.
Une fois enfichée sur la
carte Arduino,
ce shield reprend tels
quels les connecteurs
de part et d'autre de la
carte.
Pour affichage
Ce shield, en plus de
son écran LCD (deux
lignes de 16
caractères)
comporte cinq
boutons-poussoirs
programmables.
Pour la commande
des moteurs
Ce shield permet de
piloter jusqu'à deux
moteurs électriques
simultanément (idéal pour
un petit robot roulant à
deux roues motorisées
indépendantes)
Avec deux connecteurs
numériques utilisés par
moteur seulement, on
peut contrôler le sens et la
vitesse de rotation du
moteur.
Pour le contrôle du
température
Ce shield permet de
rendre disponible l'état
d'un capteur de
température sur un réseau
local Ethernet ou sur
Internet et transformer
Arduino en véritable
serveur web connecté sur
l'extérieur.
Il evolue avec une
bibliothèque très
complète et de nombreux
exemples de programmes.
Le langage Arduino
Définition
Une carte Arduino est une petite (5,33 x 6,85 cm) carte électronique équipée d'un
microcontrôleur. Le microcontrôleur permet, à partir d'événements détectés par des
capteurs, de programmer et commander des actionneurs ; la carte Arduino est donc une
interface programmable.
Capteurs Actionneurs
Le syntaxe de langage
Le syntaxe du code
Le syntaxe d’un langage de programmation est l’ensemble des règles d’écriture liées à ce langage.
Avec Arduino, nous devons utiliser un code minimal lorsque l’on crée un programme. Ce code permet de
diviser le programme que nous allons créer en deux grosses parties.
La Fonction Setup
Cette fonction setup() est appelée une seule fois lorsque le programme commence. C’est
pourquoi c’est dans cette fonction que l’on va écrire le code qui n’a besoin d’être exécuté
qu’une seule fois. On appelle cette fonction : fonction d’initialisation. On y retrouvera la
mise en place des différentes sorties et quelques autres réglages.
La fonction loop
Une fois que l’on a initialisé le programme il faut ensuite créer son "cœur", autrement dit le
programme en lui même. C’est donc dans cette fonction loop() où l’on va écrire le contenu du
programme. Il faut savoir que cette fonction est appelée en permanence, c’est-à-dire qu’elle est
exécutée une fois, puis lorsque son exécution est terminée, on la ré-exécute et encore et encore.
On parle de boucle infinie.
Syntaxe
Les instructions sont des lignes de code qui disent au programme : "fait ceci, fait cela,
…’’
Les points virgules terminent les instructions. Les points virgules ( ; ) sont synonymes
d’erreurs car il arrive très souvent de les oublier à la fin des instructions. Par conséquent
le code ne marche pas et la recherche de l’erreur peut nous prendre un temps conséquent .
Les accolades sont les "conteneurs" du code du programme. Elles sont propres aux
fonctions, aux conditions et aux boucles. Les instructions du programme sont écrites à
l’intérieur de ces accolades.
Les variables
Une variable
Le nom de variable accepte quasiment tous les caractères sauf :
,
.
é,à,ç,è
il n’accepte que l’alphabet alphanumérique ([a-z], [A-Z], [0–9]) et _ (underscore). Il ne
doit pas commencer par un chiffre.
Le type
Les types
Type Nombre qu’il Nombre maximale qu’il stocke Taille ( en bits) Taille ( en
stocke octets)
int Entier -32 768 à +32 767 16 bits 2 octets
long Entier -2 147 483 648 à +2 147 483 647 32 bits 4 octets
char Entier -128 à +127 8 bits 1 octets
float Décimale -3,4 * à 3,4* 32 bits 4 octets
double Décimale 1,7 * à 1,7 * 64 bits 8 octets
Les types
Si à présent notre variable "x" ne prend jamais une valeur négative (-20, -78, …), alors on utilisera
un type non-signé. C’est à dire, dans notre cas, un char dont la valeur n’est plus de -128 à +127,
mais de 0 à 255. Voici le tableau des types non signés, on repère ces types par le mot unsigned (de
l’anglais : non-signé) qui les précède :
Type Nombre stocké Plage des valeurs Taille (en Taille (en octets)
acceptés bits)
Unsigned char entier non négatif 0 à 255 8 bits 1 octet
Unsigned int Entier non négatif 0 à 65 535 16 bits 2 octets
Unsigned long Entier non négatif 0 à 4 294 967 295 32 bits 4 octets
Les types
Une des particularités du langage Arduino est qu’il accepte un nombre plus important de
types de variables.
type Nombre stocké Plage de valeurs Taille (en Taille (en
acceptés bits) octets)
Byte Entier non négatif 0 à 255 8 bits 1 octet
Word Entier non négatif 0 à 65535 16 bits 2 octets
Boolean Entier non négatif 0à1 1 bits 1 octet
Les types
Les variables booléennes sont des variables qui ne peuvent prendre que deux valeurs : ou
VRAI ou FAUX. Elles sont utilisées notamment dans les boucles et les conditions. Une
variable booléenne peut être définie de plusieurs manières :
Les types
Quand une variable vaut "0", on peut considérer cette variable comme une variable
booléenne, elle est donc fausse. En revanche, lorsqu’elle vaut "1" ou n’importe quelle
valeurs différente de zéro, on peut aussi la considérer comme une variable booléenne,
elle est donc vraie. Voilà un exemple :
Les types
Le langage Arduino accepte aussi une troisième forme d’écriture (qui lui sert pour utiliser
les broches de sorties du microcontrôleur) :
Les opérations
Les opérateurs
Un opérateur est un symbole qui indique au programme d’éxécuter des fonctions
mathématiques ou logiques spécifiques.
Arduino est riche avec des opérateurs intégrés parmi eux ces opérateurs:
Opérateurs arithmétiques
Opérateurs de comparaison
Opérateurs logiques
Opérateurs binaires
Opérateurs composées
Les opérateurs arithmétiques
On suppose que a=10 et b=20
Nom d’opérateur Symbole description Exemple
Affectation = Enregistre la valeur du variable à la droite a=b
de la signe dans la variable au gauche
addition + Additionne les deux opérandes a+b donne 30
Soustraction - Soustraire le 2éme opérande du premier a-b donne -10
multiplication * Multiplie les deux opérandes a*b donne 200
Division / Devise le numérateur du dénominateur b/a donne 2
modulo % Donne le reste de la division euclidienne b%a donne 0
Exemple
Exemple1 Exemple 2
float x = 0; float x = 0;
float y = 15; float y = 15;
float z = 0; int z = 0;
x = 12 / 2; x = 12 / 2;
Z= y / x; Z= y / x;
Opérateurs de comparaison
Nom d’opérateur Symbole Description
est égale à == Ce symbole, composé de deux égales, permet de tester
l’égalité entre deux variables
est inférieur à < teste l’infériorité d’une variable par rapport à une autre
est supérieur à > Teste la supériorité d’une variable par rapport à une autre
est inférieur ou égale à <= teste l’infériorité ou l’égalité d’une variable par rapport à
une autre
est supérieur ou égal à >= teste la supériorité ou l’égalité d’une variable par rapport à
une autre
est différent de != teste la différence entre deux variables
Les opérateurs logiques
Nom d’opérateur Symbole Description Exemple
Et && Si les deux opérandes sont (a&&b)=true
différents à zéro alors la condition
est ¨true¨
Ou || Si un des deux opérandes est (a||b)=true
différent de zéro alors la
condition est ¨true¨
Non ! Ça sert à inverser l’état logique !(a && b) = false
de l’opérande
Les opérateurs binaires
Nom d’opérateur Symbole Description
Et & Et logique copie un bit au résultat s’il existe au deux
opérandes
Ou | Ou logique copie un bit au résultat s’il existe à l’un des
opérandes
Ou exclusif ^ Ça copie un bit s’il existe dans un des opérateurs mais
pas les deux
non ~ Ça inverse les bits des opérandes
Décalage à gauche << L’opérande gauche est décalé à gauche par le nombre de
bits indiqué à l’opérande droite.
Décalage à droite >> L’opérande gauche est décalé à droite par le nombre de
bits indiqué à l’opérande droite.
Les opérateurs composés
Nom de l’opérateur Symbole Description
Incrémentation ++ Augmente la valeur entière avec 1
Décrémentation -- Diminue la valeur entière avec 1
Addition composé += Ça additionne l’opérande à gauche à celui à droite et
affecte le résultat au opérande gauche
Soustraction composé -= Ça soustrait l’opérande à gauche à celui à droite et affecte
le résultat au opérande gauche
Multiplication composé *= Ça multiplie l’opérande à gauche à celui à droite et affecte
le résultat au opérande gauche
Les opérateurs composés
Nom de l’opérateur Symbole Description
Division composé /= Ça divise l’opérande à gauche à celui à droite
et affecte le résultat au opérande gauche
Modulo composé %= Ça calcule le reste de la division euclidienne
de l’opérande à gauche sur celui à droite et le
stocke le résultat à l’opérande gauche
Ou binaire composé |= Ça affecte le résultat de ou binaire au opérande
à gauche
Et binaire composé &= Ça affecte le résultat de ou binaire au opérande
à droite
Exemple
Int a=10;
Int b=20;
Int c=30;
a++; a=11
b--; b=19
c-=a; c=19
c!=b; false
b+=a; b=30
Les conditions
Les conditions
C’est un choix que l’on fait entre plusieurs
propositions.
En informatique, les conditions servent à
tester des variables.
Le programme qui va gérer ça va faire appel à
un test conditionnel.
En informatique, on parle de condition. "si la
condition est vraie", on fait une action. En
revanche "si la condition est fausse", on
exécute une autre action.
If
Ça prend une expression entre parenthèse et une instruction ou plusieurs instruction entre
accolade.
Si la condition entre parenthèse est « true » alors les instructions sont exécutés sinon ils
sont ignorés et sautés
Exemple
Int a=5;
Int b=9;
Void setup (){
}
Void loop(){
If (a>b)
a++;
If ((a<b)&& (b!=0))
a+=b;
b--;
}
If…else
La condition if peut être suivi par un bloc optionnelle « else » qui s’exécute quand la
condition est « false »
If …else if…else
Le condition if peut être aussi suivi d’un condition if…else, qui est très utile pour tester
plusieurs conditions avec une seule boucle else if…else
Lors de l’utilisation de l’instruction if...else if…else, il faut savoir:
L’instruction if peut avoir zéro ou une instruction else et il doit être après tout instruction else if
L’instruction if peut avoir zéro ou plusieurs instruction else if et doivent être avant l’instruction
else
Une fois une instruction else if réussi, aucune des autres instructions else if se testent
Switch…case
C’est similaire à l’instruction if
L’instruction switch compare la valeur d’un variable spécifié aux instructions case.
Quand on rencontre une instruction case dont sa valeur est compatible avec la variable ,
donc le code dans cet instruction est exécuté
Le mot clé break engendre l’instruction switch à quitter le boucle.
Typiquement, le mot break est utilisé à la fin de chaque instruction case.
Sans le mot break, l’instruction switch va continuer à exécuter les instructions suivantes
jusqu’à trouver une instruction break ou arriver à la fin de boucle
Switch…case
Les Boucles
Les boucles
En programmation, une boucle est une instruction qui permet de répéter un bout de code.
Cela va nous permettre de faire se répéter un bout de programme ou un programme entier. Il
existe deux types principaux de boucles :
La boucle conditionnelle, qui teste une condition et qui exécute les instructions qu’elle
contient tant que la condition testée est vraie.
La boucle de répétition, qui exécute les instructions qu’elle contient, un nombre de fois
prédéterminé.
La boucle while
Problématique :Je veux que le volet électrique de ma fenêtre se ferme automatiquement
quand la nuit tombe (Nous ne nous occuperons pas de faire le système qui ferme le volet à
l’arrivée de la nuit). La carte Arduino dispose d’un capteur qui indique la position du volet
(ouvert ou fermé). Ce que nous cherchons à faire : c’est créer un bout de code qui fait
descendre le volet tant qu’il n’est pas fermé.
La boucle while
La boucle while s’exécute en continu jusqu’à la condition du boucle sera fausse.
La boucle do…while
Cette boucle est similaire à la précédente. Mais il y a une différence qui a son
importance ! En effet, si on prête attention à la place la condition dans la boucle while,
on s’aperçoit qu’elle est testée avant de rentrer dans la boucle. Tandis que dans une
boucle do…while , la condition est testée seulement lorsque le programme est rentré dans
la boucle :
La boucle do while
La boucle infinie
La boucle infinie est très simple à réaliser, d’autant plus qu’elle est parfois très utile. Il
suffit simplement d’utiliser une while et de lui assigner comme condition une valeur qui
ne change jamais. En l’occurrence, on met souvent le chiffre 1.
La boucle for
Cette boucle est exécutée X fois. Contrairement aux deux boucles précédentes, on doit lui
donner trois paramètres.
Initialisation de variable
Condition à laquelle la boucle s’arête
Le pas d’éxecution
Les fonctions
Les fonctions
Dans un programme, les lignes sont souvent très nombreuses. Il devient alors impératif de
séparer le programme en petits bouts. Standardiser les fragments de code en des fonctions a
plusieurs avantages:
Les fonctions permettent aux programmeurs de rester organiser et de concevoir le
programme
Les fonctions codent une action en une seule place de sorte qu’on le débogue qu’une seule
fois
Ils diminuent la probabilité d’avoir des erreurs si on fait des modifications du code
Les fonctions rendent le code plus petit et compact et plus lisible
Les fonctions
C’est le type de retour du C’est l’identifiant du Ce sont les paramètres du
variable retourné par la
fonction et ça pourrait être
fonction qu’on va fonction et ils peuvent être de
n’importe type d’Arduino l’appelé avec n’importe quel type
Type_de_retour nom_de fonction(argument1, argument2, …)
{
instructions
}
Les fonctions
Au sketch (programme) Arduino, on a deux fonctions primordiales setup() et loop() donc
en programmation Arduino on a deux familles de fonctions: les fonctions prédéfinis par
Arduino et celles qu’on doit crée nous même.
Une fonction doit être déclarée à l’extérieur d’une autre fonction au dessous ou au dessus
du fonction loop()
Une fonction ne renvoie qu’un seule résultat et peut ne pas renvoyer un résultat et elle
n’est pas obligé d’utiliser des paramètres.
Les fonctions
Pour déclarer une fonction, on a deux méthodes à suivre:
La première méthode consiste à déclarer en premier lieu une partie du fonction appelé le
prototype de fonction qui inclue le type de retour, le nom de fonction et le type des
paramètres. Le prototype de fonction doit être suivi par un point virgule. En second lieu,
on va déclaré le corps du fonction au dessous de la fonction loop().
La deuxième méthode consiste à déclarer la fonction entièrement avec la définition de
fonction. Cette déclaration se fait au dessus de la fonction loop().
Les fonctions
Int sum_function (int , int); Int sum_function (int x, int y){
Void setup(){ Int z=0;
Instructions; Z=x+y;
}
Return z;
Void loop(){
}
Int result=0;
Void setup(){
Result= sum_function(5,7);
Instructions;
}
}
Int sum_fuction(int x, int y){
Int z=0; Void loop(){
Z=x+y; Int result =0;
Return z; Result = sum_function(5,7);
} }
Les fonctions
Exemple 1
44
Exemple2
Erreur car son type de retour c’est void alors qu’elle
contient l’instruction return
Les fonctions
Exemple 3 : fonction typé non paramétré
440
Les fonctions
Exemple 4 : fonction typé paramétré
256
Les tableaux
Les Tableaux
Son but est de stocker des éléments de mêmes types en les mettant dans des cases.
Un tableau, tout comme sous Excel, c’est un ensemble constitué de cases, lesquels vont
contenir des informations. En programmation, ces informations seront des nombres.
Chaque case d’un tableau contiendra une valeur.
Un tableau réserve un espace mémoire, pour déclarer le type des éléments et le nombre
demandé par le tableau, on déclare un tableau comme suit:
Les tableaux
Position de l’élément dans le
tableau
L’illustration montre un tableau des nombres
relatives qui contient 11 éléments
On réfère à chaque éléments par le nom du
tableau suivi par la position du l’élément entre
deux crochets valeur
Cette position est appelé formellement indice
et il doit être entier Nom de
Le premier élément du tableau a un indice 0 l’élément
individuel
Les tableaux
Pour accéder à une case d’un tableau, il suffit de connaître l’indice de la case à laquelle
on veut accéder. L’indice c’est le numéro de la case qu’on veut lire/écrire. Par exemple,
pour lire la valeur de la case 10 (donc indice 9 car on commence à 0):
Les tableaux
Si on veut aller modifier cette même valeur, on fait comme avec une variable normale, il
suffit d’utiliser l’opérateur ' = ' :
L’initialisation d’un tableau peut se faire directement lors de sa création, comme ceci :
Les tableaux
On peut également initialiser le tableau dans une boucle. Dans ce cas, on va remplir les
cases par le même élément:
Les tableaux
Les tableaux
Total of array elements: 849
Les tableaux
Tableaux multidimensionnels
En C, un tableau à deux dimensions A est à interpréter comme un tableau (unidimensionnel)
de dimension L dont chaque composante est un tableau (unidimensionnel) de dimension C.
On appelle L le nombre de lignes du tableau et C le nombre de colonnes du tableau.
L et C sont alors les deux dimensions du tableau.
On dit qu'un tableau à deux dimensions est carré, si L est égal à C.
Les tableaux
Ci-dessous les principales caractéristiques des tableaux multidimensionnels:
pour identifier un élément particulier du tableau, il faut spécifier deux indices
Par convention, le premier indice identifie le ligne et le deuxième identifie le colonne
Les tableaux qui demande deux indices pour identifier un élément s’appelle tableau à
deux dimensions
Les tableaux multidimensionnels peuvent avoir plus que 2 dimensions
Les tableaux
L’illustration montre un tableau de deux
dimensions a.
Le tableau contient 3 lignes et 4 colonnes Colonne 0 Colonne 1 Colonne 2 Colonne 3
Chaque élément du tableau est exprimé par ligne0
son nom de la forme a[i][j]
Ligne1
Ligne2
Les tableaux
Pour initialiser un tableau multidimensionnel, c’est possible de remplir les cases une par
une. Par exemple, un tableau bidimensionnel avec les valeurs 1 et 2 dans la ligne 0 et les
valeurs 3 et 4 dans la line 1, est déclarée comme suit:
Les valeurs sont groupés entre accolades, donc 1 et 2 initialisent respectivement b[0][0] et
b[0][1] et 3 et 4 initialisent respectivement b[1][0] et b[1][1]. Si on n’a pas suffisamment
d’initialiseurs pour un ligne défini, les éléments restants de cette ligne sont initialisés à 0.
Les chaines de caractères
Les chaines de caractères
Les chaines de caractères « strings » sont dédiés à stocker un texte, ils peuvent être utilisés
par exemple à afficher un texte sur LCD.
Il y a deux méthodes à manipuler les chaines de caractères en Arduino:
Un tableau de caractère comme utilisé en langage C
Le String Arduino qui nous permet à utiliser un objet String dans un Sketch
Les chaines de caractère
On va étudier tout d’abord le premier type qui est la chaine de caractères qui est une série
de caractères. On a déjà vu qu’un tableau est un série consécutive de la même type de
variable stocké dans la mémoire. Donc , la chaine de caractères est un tableau des
variable de types caractères.
La chaine de caractère est un tableau spécial avec un élément extra à la fin de la chaine
qui a généralement la valeur ¨\0¨. Alors, Une chaîne de caractère doit impérativement
contenir un caractère spécial à la fin de la chaîne, appelé « caractère de fin de chaîne ».
Les chaines de caractère
Les chaines de caractères
Les chaines de caractères
L’autre méthode pour manipuler les chaines de caractères c’est de déclarer un objet string
Un objet string est un ¨construct¨ qui contient des fonctions et des informations.
L’objet string peut être créer comme un variable et on peut l’affecter une valeur
L’objet est déclaré au début de sketch comme suit:
Les chaines de caractères
toUpperCase(): c’est une méthode qui opère sur la chaine de caractère inclue dans la
variable, elle met tous les lettres de la chaine en majuscule.
Replace(): c’est une méthode dédié pour les chaines de caractère qui remplacent le
premier élément par le deuxième.
length() : c’est une méthode qui retourne la longueur de la chaine de caractère
Pour remplacer la chaine de caractère, on utilise l’opérateur d’affectation =
Les chaines de caractére
Tableau des caractères Objet string
C’est plus compliqué: on doit définir nous C’est plus simple : l’objet a des fonctions
même les fonctions dont on aura besoin prédéfinis qui effectue des opérations
On peut limiter le longueur du tableau et on Il utilise trop d’espace mémoire et peut
peut donc économiser l’espace mémoire consommer toute l’espace mémoire avec des
programmes volumineux qui résulte l’arduino
à bugger ou se comporter bizarrement.
La notion de temps
En arduino, on peut allumer une led ou afficher un message mais ou est la spécificité
d’arduino puisque on peut tout de même allumer un led avec une simple pile.
C’est la notion du temps qui fait la différence. En effet, on peut , avec arduino, faire
clignoter un led pendant un certain laps de temps.
Pour le faire, Arduino procure 4 différentes méthodes qui manipulent le temps.
Fonction delay()
La fonction admet un paramètre qui est le temps pendant lequel on veut mettre en pause
le programme. Elle accepte un seule paramètre donné en entier. Ce temps doit être donné
en millisecondes. C’est-à-dire que si vous voulez arrêter le programme pendant une
seconde, il va falloir donner à la fonction ce même temps, écrit en millisecondes, soit
1000ms. La fonction est simple à utiliser :
Fonction delay()
Donc si on veut faire clignoter un led, c’est
simple:
On allume le led
On met on pause le programme avec la
fonction delay()
On éteint le led
Et on met le programme en pause à nouveau
avec dealy()
Fonction delayMicroseconds()
La fonction delayMicroseconds() accepte un unique argument entier, c’est le temps en
micro secondes. Actuellement, la plus grande valeur qu’elle peut accepté c’est 16383.
donc pour une pause de plus que quelques kilos de microsecondes, on utilise plutôt
delay()
fonction Millis()
La fonction delay() et ses dérivés a l’inconvénient de mettre tout le programme en pause
donc elle va bloqué le programme pour un temps bien déterminé.
Donc si on veut par exemple clignoter un led sans arréter l’éxecution du programme , on
ne doit pas utiliser la fonction delay(). Dans ce cas on fait recours au fonction millis().
Fonction millis()
À l’intérieur du cœur de la carte Arduino se trouve un chronomètre. Ce chrono mesure
l’écoulement du temps depuis le lancement de l’application. Sa granularité (la précision
de son temps) est la milliseconde.
La fonction millis() nous sert à savoir quelle est la valeur courante de ce
compteur. Attention, comme ce compteur est capable de mesurer une durée allant jusqu’à
50 jours, la valeur retournée doit être stockée dans une variable de type "long".
Fonction millis()
Fonction micros()
La fonction micros() renvoie le nombre de microsecondes à partir du temps ou l’Arduino
a commencé a exécuté le programme actuel. Ce nombre déborde c.à.d. il retourne à 0
après approximativement 70 minutes.
Avec les cartes arduino de 16Mhz, cette fonction a une résolution de 4
microsecondes( donc la valeur retourné est toujours multiple de 4). Avec le cartes de
8Mhz, la résolution de fonction est de 8secondes.