0% ont trouvé ce document utile (0 vote)
301 vues7 pages

Programmation de La Carte Arduino

Ce document décrit les bases de la programmation embarquée avec Arduino, notamment la structure de base d'un programme Arduino, la déclaration de constantes, variables et définitions, l'utilisation du moniteur série, les conditions if/else et switch ainsi que des exemples de code.

Transféré par

alae ddine
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
301 vues7 pages

Programmation de La Carte Arduino

Ce document décrit les bases de la programmation embarquée avec Arduino, notamment la structure de base d'un programme Arduino, la déclaration de constantes, variables et définitions, l'utilisation du moniteur série, les conditions if/else et switch ainsi que des exemples de code.

Transféré par

alae ddine
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Programmation

Avancée
Embarquée:(S2) Programmation en C/Arduino
DE L’ARCHITECTURE À L’ARDUINO

Slim Ben Othman Hedi Abdelkrim

1 | Microcontrôleur : De l’architecture à l’Arduino 58 | Microcontrôleur : De l’architecture à l’Arduino

Structure de base d'un programme Structure de base d'un programme


Arduino Arduino

Carte de
.. 
développement
..
..
13
12 
11


59 | Microcontrôleur : De l’architecture à l’Arduino 60 | Microcontrôleur : De l’architecture à l’Arduino


Constantes et Variables Constantes et Variables
const int LED=13;
int attente=1000; //ceci est une variable globale
#define LEDON digitalWrite(LED,HIGH);
X Déclaration d’une constante #define LEDOFF digitalWrite(LED,LOW); type taille en byte (octet) valeurs stockées
X const type NOMDELACONSTANTE=valeur;
void setup() boolean 1 true ou false
{
char 1 un caractère ou un
X Déclaration d’une définition int i=0; //ceci est une variable locale
entier entre -128 et 127
X #define label definition // on l'utilise en écrivant juste son nom
pinMode(LED,OUTPUT); unsigned char 1 un entier entre 0 et 255
}
X Déclaration d’une variable byte 1 un entier entre 0 et 255
void loop()
X type nomVariable=valeur initiale { int 2 un entier entre -32768 et
// là encore. 32767
LEDOFF;
X Portée d’une variable unsigned int 2 un entier entre 0 et 65535
delay(Attente);
X Locale // et là encore. float 4 un décimal, précis à 7
X Globale LEDON; chiffres après la virgule
delay(Attente);
}
61 | Microcontrôleur : De l’architecture à l’Arduino 62 | Microcontrôleur : De l’architecture à l’Arduino

Moniteur série Condition


Code Condition testée
== égal
X Pour utiliser la possibilité de void setup() X if (condition) { code à excécuter }
communication entre { >= supérieur ou égal
// initialisation de la communication else { code à excécuter }
l'ordinateur et l'Arduino, on <= inférieur ou égal
[Link](9600);
procède en deux étapes :
// envoi d'un message > supérieur
[Link]("Communication initialisée");
< inférieur
}
X On initialise la communication
void loop() != différent (non égal)
(ça se fait dans le setup()).
{
X On communique (ça se fait //envoi d'un autre message ‡ pinMode (12, INPUT) ;
souvent dans la loop() mais [Link]("Je suis dans la boucle !"); ‡ booleen etatBouton = digitalRead (12) ;
possible dans le setup()). }
if (etatBouton ==LOW) if (! etatBouton )
X Afficher le message [Link]("Bouton appuié"); [Link]("Bouton appuié");
else else
[Link]("Bouton relaché"); [Link]("Bouton relaché");
63 | Microcontrôleur : De l’architecture à l’Arduino 64 | Microcontrôleur : De l’architecture à l’Arduino
Condition Condition
Exercice

void loop()
const int LED=13;
{booleen etatBouton = digitalRead (POUSS) ;
Const int POUSS=12; switch (expression) {
case (1) : Instruction1;
if (!etatBouton) {
void setup() break;
[Link]("Bouton appuié");
{ case (2) : Instruction2;
digitalWrite(LED,LOW);
[Link](9600); break;
}
pinMode(LED,OUTPUT); case (3) : Instruction3;
else {
pinMode(POUSS,INPUT); // break;
[Link]("Bouton relaché");
} }
digitalWrite(LED,HIGH);
}
}

65 | Microcontrôleur : De l’architecture à l’Arduino 66 | Microcontrôleur : De l’architecture à l’Arduino

Boucle void setup()


{
Boucle
}
[Link](9600);
Exercice
void loop()
X for (int t=0;t<10;t=t+1){ { X Inverser l’état de LED à chaque appuie sur POUSS
for (int compteur=0;compteur<=20;compteur=compteur+1)
code à exécuter { void loop () {
} [Link](compteur); // attendre un appuie
} while (! digitalRead (POUSS)) {
} delay (50);
}
void loop()
X while (condition){ { //Toggle
int compteur = 0; digitalWrite (LED,!digitalRead(LED))
faire tant que la While (compteur<=20){
condition est vraie [Link](compteur); // attendre relachement
compteur=compteur+1; while (digitalRead (POUSS) ) {
} } delay (50);
} }
}
67 | Microcontrôleur : De l’architecture à l’Arduino 68 | Microcontrôleur : De l’architecture à l’Arduino
Tableaux Fonction

X type nomTableau[nbr_éléments] X Déclaration


X Initialisation d’un tableau seulement à la déclaration X type nomDeLaFonction(type param1,type param2,type param3...){
X type nomTableau[nbr_éléments]={el1,el2,…} //code du programme de la fonction
}
X Exemple //On utilise des LEDs connectées sur les pins 2,4 et 6 booelen estVrai(int pin){
int pinLed[3] = {2, 4, 6}; X Appel return(!digitalRead(Pin));
void setup() }
{ X nomDeLaFonction(parametres); void setup()
//Boucle d'initialisation des modes et mise à 0V X X=nomDeLaFonction(parametres); {
for (int i = 0; i < 3; i++) { booleen etatBouton = estVrai(POUSS) ;
pinMode(pinLed[i], OUTPUT); // si type != Void …
digitalWrite(pinLed[i], LOW); }
}
}
69 | Microcontrôleur : De l’architecture à l’Arduino 70 | Microcontrôleur : De l’architecture à l’Arduino

Application Application
9DULHUO¶LQWHQVLWp
int dureeOn = 1; // 1 à 19 !
1RPEUHGHFOLJQRWHPHQWVVHORQGXUpHSRXVVRLU int cTime ; 5pGXLUHO¶LQWHQVLWp 3:0 #define MaxNbRepet 10 // 10x20ms = 0.2s
void loop() {
void loop() {
cTime = 0;
for (int nbRepet = 0 ; nbRepet <= MaxNbRepet); nbRepet++) {
while (! digitalRead (POUSS)) {
digitalWrite (LED,HIGH));
cTime++ ;
delay (dureeOn) ;
delay (20);
digitalWrite (LED,LOW));
}
delay (20-dureeOn) ;
while (cTime >0) {
}
digitalWrite (LED,LOW)); int dureeOn = 2; // 1 à 19 !
dureeOn++;
delay (200); void loop() {
if (dureeOn == 19+1) { dureeOn = 1; }
digitalWrite (LED,HIGH)); digitalWrite (LED,HIGH));
}
delay (200); delay (dureeOn) ;
cTime -= 25; digitalWrite (LED,LOW));
} delay (20-dureeOn) ;
} }

71 | Microcontrôleur : De l’architecture à l’Arduino 72 | Microcontrôleur : De l’architecture à l’Arduino


Résistance de tirage void setup () {
Résistance de tirage
pinMode (LED, OUTPUT);
pinMode (POUSS, INPUT);

} X Beaucoup de fabricants intègrent des résistances de tirage dans


void loop () { leurs microcontrôleurs
int val = digitalRead (POUSS) ;
digitalWrite (RED_LED, val); X La valeur est généralement d'environ 50 kOhm
}
X Avec ce montage et ce
programme, que va-t-on voir sur
la LED si le bouton est relaché :
X Elle sera éteinte
X Elle va clignoter X Activer la résistance de tirage sur une entrée
X Son état va fluctuer X pinMode (POUSS, INPUT_PULLUP);
X Elle sera allumée
X Une entrée non connectée
capte toute sorte de parasites

73 | Microcontrôleur : De l’architecture à l’Arduino 74 | Microcontrôleur : De l’architecture à l’Arduino

Fonctions utiles Fonctions utiles

X Saturation X On travaille sur un thermomètre


X if x > a) res = a ; médical. Le capteur donne une valeur
de 240 pour 32° et 680 pour 35°.
if (x < b) res = b ;
Ecrire la fonction qui donne y selon x.
X res = constrain (x, a, b) ;
X y = map (x, 240, 680, 32, 35) ;
X Minimum/Maximum
if (a < b ) res = a ; map(value, fromLow, fromHigh, toLow, toHigh) ;
X res=min(a, b) ;
if (a < b ) res = b ;
X res= max(a, b) ;

75 | Microcontrôleur : De l’architecture à l’Arduino 76 | Microcontrôleur : De l’architecture à l’Arduino


Fonctions utiles Fonctions utiles
long temps;
If ((millis()-temps)>1000) {
digitalWrite(LED,!digitalRead(LED));
temps=millis();//on stocke la nouvelle heure
PLOOLV X nombres pseudo-aléatoires
X } int nbAlea;
random(max); // retourne un entier void setup() {
X
X /D FDUWH $UGXLQR GLVSRVH G¶XQH IRQFWLRQ TXL PHVXUH O¶pFRXOHPHQW GX WHPSV entre 0 et et la valeur max précisée [Link](9600);
(non comprise) randomSeed(analogRead(0));//initialise la séquence
GHSXLV OH ODQFHPHQW GH O¶DSSOLFDWLRQ
X random(min,max); //retourne un aléatoire
X 6D JUDQXODULWp OD SUpFLVLRQ GH VRQ WHPSV HVW OD PLOOLVHFRQGH /D IRQFWLRQ entier entre les valeurs min et max }
précisées (max non compris)
PLOOLV QRXV VHUW j VDYRLU TXHOOH HVW OD YDOHXU FRXUDQWH GH FH FRPSWHXU void loop() {
X Initialisation de la séquence nbAlea=random(100); //construit le nombre aléatoire
X &H FRPSWHXU HVW FDSDEOH GH PHVXUHU XQH GXUpH DOODQW MXVTX¶j  MRXUV aléatoire [Link](nbAlea);//affichage du nombre
X randomSeed(unNombre); delay(500);//attente
X /D YDOHXU UHWRXUQpH GRLW rWUH VWRFNpH GDQV XQH YDULDEOH GH W\SH ³ORQJ´ }

77 | Microcontrôleur : De l’architecture à l’Arduino 78 | Microcontrôleur : De l’architecture à l’Arduino

Exercice Pratique Exercice Pratique


//boucle principale
//déclaration des variables void loop(){
//LEDs sur les pins 2 à 6 //test de l'état du bouton avec boolean etatBouton
//bouton sur le pin 7 if (le bouton est cliqué){
X Défiler sur les leds des valeurs aléatoires de 1 à 5 for... //boucle for qui temporise l'affichage de plus en plus lentement
avec la constellation du dé //initialisation {
void setup(){ //exctinction brève des LEDs (100ms)
X Ralentir peu à peu la fréquence de l’affichage //initialiser la séquence //tirage d'un nombre aléatoire avec la fonction random()
jusqu’à s’arrêter sur une valeur léatoire //appel de la fonction d'allumage des LEDs
//temporisation
X Redémarrer l’animation à l’appui d’un bouton //pin 2 à 6 en mode OUTPUT }
poussoir sur pin 7 }
//pin 7 en mode INPUT_PULLUP }

//appel de la fonction //déclaration de la fonction setZero()


//setZero() pour tout éteindre void setZero(){
} //code pour tout éteindre
}
//déclaration de la fonction d'allugmage
void allumage(int nombre){
//code pour l'affichage en fonction du nombre
}
79 | Microcontrôleur : De l’architecture à l’Arduino 80 | Microcontrôleur : De l’architecture à l’Arduino
Exercice Pratique
Solution

81 | Microcontrôleur : De l’architecture à l’Arduino

Vous aimerez peut-être aussi