Vous êtes sur la page 1sur 103

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.

Vous aimerez peut-être aussi