Vous êtes sur la page 1sur 22

P 44

Mthodes de la bibliothque arduino-pinchangeint.h.


Note place en page sur les interruptions dans SYNTAXE.
NOTE : Les ATMega328 peuvent galement grer des interruptions LES BIBLIOTHQUES
de changement dtat sur vingt de leurs broches. Mais leur traitement
nest pas aussi simple que pour les interruptions externes car il faut TABLE DES MATIRES
aiguiller le code aprs avoir dtermin d'ou vient le requte. La Bibliothque Serial pour la communication srie. ............................ P02
librairie Arduino arduino-pinchangeint.h a t dveloppe afin Mthodes de la bibliothque Wire.h. ................................................ P04
de permettre lutilisation de ces interruptions internes au P.
Complments relatifs la bibliothque Wire.h. ................................ P05
Synthse d'utilisation des diverses bibliothques. Mthodes de la bibliothque EEPROM.h. ........................................ P05
Librairie Serial : Communications srie USB avec la carte Arduino. La bibliothque I2Cdev.h. ................................................................. P06
Wire.h : Protocoles de communication Arduino par ligne I2C / TWI. Mthodes de la bibliothque LedControl.h. ...................................... P07
I2Cdev.h : Complte Wire.h pour des C.I. lectroniques spcifiques. La bibliothque SD.h. ...................................................................... P08
EEPROM.h : Lire et crire dans l'EEPROM du P d'Arduino.
Mthodes de la bibliothque Servo.h. .............................................. P14
LedControl.h : Gestion par la SPI d'un multiplexeur type MAX7219.
Servo.h : Pilotage angulaire de servomoteurs par PWM. Mthodes de la bibliothque Stepper.h.. .......................................... P15
Stepper.h : Pilotage "direct" des bobines d'un moteur pas pas. Mthodes de la bibliothque AFMotor.h ........................................ P16
AFMotor.h : Gestion d'une carte lectronique ADAFRUIT motors. La bibliothque complmentaire AccelStepper.h. ......................... P19

Page 1
AccelStepper.h : Complment de Stepper.h > Voir page 15. Mthodes de la bibliothque LiquidCrystal.h. ................................... P20
LiquidCrystal.h : Gestion d'afficheurs LCD avec "chipset HD44780". Mthodes de la bibliothque Perso_ST7565.h............................... P23
Perso_ST7565.h : Gestion de l'afficheur rtroclair RBV ST7565.
Mthodes de la bibliothque Adafruit_ssd1306syp.h. .................... P30
Adafruit_ssd1306syp.h : Gestion de l'afficheur OLED 128 x 64.
avr/eeprom.h : Remplace avantageusement EEPROM.h. Mthodes de la bibliothque avr/eeprom.h.................................... P32
avr/pgmspace.h : Stocker des constantes en mmoire de programme. Mthodes de la bibliothque avr/pgmspace.h. .............................. P34
SD.h : Permet de lire et d'crire sur des cartes mmoires SD et SDHC. CRER UNE BIBLIOTHQUE PERSONNELLE : ........................... P37
TERMINOLOGIE. Le format pde pour les fichiers source. ............................................ P41
Bibliothque : Ensemble de procdures utilitaires grant un domaine IMPORTER UNE BIBLIOTHQUE : ................................................. P42
de la programmation, et mises disposition des utilisateurs dArduino. Enlever une bibliothque importe de l'IDE. .................................... P43
Library est un faux ami. La traduction franaise est Bibliothque Mthodes de la bibliothque arduino-pinchangeint.h. ...................... P44
et non pas Librairie comme trop souvent rencontr. Synthse d'utilisation des diverses bibliothques ......................... P44
SHIELD (Bouclier.) : Petite carte lectronique spcifique ddie
une application dont l'agencement permet le branchement
"gigogne" directement sur les connecteurs d'une carte Arduino.
Breakout board (Carte contrleur.) : Module circuit imprim,
souvent de trs petites dimensions, ddi gnralement un circuit
intgr spcialis complexe pour le rendre directement utilisable
dans l'environnement d'Arduino.
Dimanche, 10 Aril, 2016 Fichier LIBRARY.PM5
FE6AAE
P2 P 43
Bibliothque Serial pour la communication srie. Dclarer les bibliothques utilises dans un programme.
La librairie Serial est utilise pour les communications par le port srie Deux syntaxes quivalentes sont possibles pour indiquer les dlimiteurs
entre la carte Arduino et un ordinateur ou d'autres composants. Toutes d'une bibliothque dont on veut utiliser les procdures :
les cartes Arduino ont au moins un port Srie qui communique sur les #include <Wire.h> #include "Wire.h"
broches 0 (RX) et 1 (TX) avec l'ordinateur via la ligne USB. Si cette #include <I2Cdev.h> OU #include "I2Cdev.h"
fonctionnalit est utilise dans le programme, les broches 0 et 1 en tant #include <MPU6050.h> #include "MPU6050.h"
qu'entres ou sorties numriques ne sont plus disponibles. Le terminal
srie intgr l'environnement Arduino, dont on peut dfinir le dbit, REMARQUE : Avec l'utilisation des dlimiteurs "<" les
communique directement avec une carte Arduino. Noter que la carte bibliothques par dfaut faisant partie de l'environnement d'Arduino
Arduino Mega , oute Serial sur 0 et 1 dispose de trois port srie passent en couleur marron dans l'diteur de l'IDE.
supplmentaires : Serial1 sur les broches 19 (RX) et 18 (TX), Serial2 Enlever une bibliothque importe de l'IDE.
sur les broches 17 (RX) et 16 (TX), Serial3 sur 15 (RX) et 14 (TX). Aller dans le dossier :
NOTE : Si une carte Arduino Mega est utilise, pour utiliser l'un des C:\Users\MICHEL\Documents\Arduino\libraries.
trois ports supplmentaires il suffit de faire suivre le mot clef Serial de On y trouve l'ensemble des bibliothques installes
1, 2 ou 3. Exemple : Serial1.begin(300); Serial2.begin(9600); par l'utilisateur.

Serial.begin(Dbit); . Y effacer les dossiers des


bibliothques que l'on
Fixe le dbit de communication en baud pour l'UART du P. Les 1

Page 2
dsire supprimer.
dbits standard sont respectivement 300, 1200, 2400, 4800, 9600,
14400, 19200, 28800, 38400, 57600, or 115200. On peut toutefois
Ouvrir un programme.ino quelconque, puis :
spcifier d'autres dbits pour communiquer sur les broches 0 et 1 avec
Croquis > Importer bibliothque... >
un composant qui ncessite une vitesse particulire.
En 1 nous avons les bibliothques par dfaut de
Serial.flush(); . l'IDE et en 2 les modules personnels qui ont t
Anciennement vidait le buffer de rception des donnes du port srie. ajouts. En 2 on ne doit plus trouver le nom des
Actuellement c'est une fonction "inhibante" qui permet de s'assurer bibliothques qui ont t supprimes. 2
que le tampon de transmission soit vide avant de repasser la main.
Utiliser facilement une bibliothque.
Serial.available(); .
Pour importer une bibliothque dans un programme, on peut
Fonction qui retourne le nombre d'octets disponibles pour lecture directement crire les lignes de dclaration indiques dans l'encadr
dans la file d'attente (Buffer) du port srie, ou 0 si elle est vide. Si une ci-dessus. Il est toutefois bien plus commode d'utiliser la suite de
donne est arrive, Serial.available() sera suprieur 0. La file commande liste ci-dessous :
d'attente de la PILE FIFO peut contenir jusqu' 63 octets. Cliquer sur Croquis >
Serial.read(); . Dplacer le curseur sur Importer bibliothque... >
Fonction de type int qui retourne le premier octet de donne entrant BGS sur le nom de la bibliothque incorporer au programme.
disponible dans le buffer du port srie, ou -1 si aucune donne n'est Quelle que soit la position actuelle du curseur dans l'diteur, la
disponible. L'octet lu est enlev de la file d'attente qui est de type dclaration sera place en tte de programme, avec ventuellement
FIFO. Le prochain appel Serial.read() lira l'octet suivant etc ... des bibliothques associes.
P 42 P3
IMPORTER UNE BIBLIOTHQUE : Serial.end(); .
Dsactive la communication srie, ce qui permet de se servir des
L es bibliothques sont constitues d'une collection de code pour
faciliter l'interfaage d'un module ou d'un capteur spcifique
sur une carte ARDUINO. Il existe des centaines de bibliothques
broches RX et TX comme entres /sorties gnrales. Pour ractiver la
communication srie, il suffit de rutiliser Serial.begin(Dbit).
supplmentaires disponibles gratuitement sur Internet en Serial.peek(); .
tlchargement. Pour utiliser des bibliothques supplmentaires, il Fonction de type int qui retourne le premier octet de donne entrant
faut les installer. Elles sont gnralement fournies sous la forme disponible sans l'extraire du FIFO de l'UART, ou -1 si aucune donne
d'un fichier ZIP ou d'un dossier. Le nom du dossier est le nom de n'est disponible. Des appels successifs peek() retournent le mme
la bibliothque. Dans le dossier se trouve un fichier de type cpp, caractre, tout comme le prochain appel la fonction read().
un fichier de type h et souvent un fichier keywords.txt, un dossier Serial.write(Donne); (Donne : Valeur ASCII ou Chane) .
dexemples et ventuellement dautres fichiers requis par la crit les donnes binaires sur le port srie. Ces donnes sont envoyes
bibliothque. comme un octet ou une srie d'octets. Pour envoyer les caractres
1) Tlcharger la d'une variable numrique utiliser la fonction Serial.print ().
bibliothque dans un >>> Pour les formats voir page 47 livret sur la SYNTAXE.
rpertoire quelconque,
2) Dcompacter le fichier 1 ;
Serial.print(Donne,Format) .
ZIP dans ce rpertoire. Affiche les donnes sur le port srie sous une forme claire pour un

Page 3
La librairie est gnralement fournie sous utilisateur Lambda. (Texte ASCII) Plusieurs formes sont possibles :
forme d'un dossier spcifique. Le nom de ce Les nombres entiers sont affichs de faon banale. .
dossier ne comporte que des lettres, des Les nombres virgules float sont affichs de la mme manire avec
chiffres, pas d'espace et ne doit pas par dfaut deux dcimales aprs "la virgule". .
commencer par un chiffre. Le nom du dossier Les types byte sont affichs sous la forme d'un caractre ASCII.
2 Les caractres 'C' et les chanes "CCC" sont affichs directement.
est aussi celui des fichiers cpp et h.
3) Placer le dossier de la bibliothque >>> Pour les formats voir page 47 livret sur la SYNTAXE.
dcompress dans le rpertoire personnel >>> Pour les caractres spciaux voir page 48 livret sur la SYNTAXE.
<C:\! ARDUINO\! Bibliothques importes>. NOTE : Pour les formats d'un float, utiliser BIN, OCT, DEC ou HEX
4) Ajouter la nouvelle bibliothque dans la liste disponible : va imposer un nombre de dcimales respectivement gal 2, 8, 10 et 16
> > > tout en limitant le nombre de chiffres significatifs sept ou huit.
Indiquer le chemin du dossier personnel sur le H.D. (Prcis en La procdure ddie serialEvent().
(2).) La bibliothque est alors ajoute dans le dossier personnel : Ce n'est qu'une petite subtilit : Si on donne une procdure
<C:\Users\MICHEL\Documents\Arduino\libraries> l'identificateur rserv "serialEvent()" cette dernire sera invoque
ou ventuellement dans automatiquement en tout dbut de la boucle de base Loop sans avoir
<C:\Users\user\Documents\Arduino\libraries>.
insrer une instruction pour son appel. (Attention la casse.) Rien
5) Recharger un croquis quelconque. Cliquer sur puis placer n'interdit de donner notre routine un nom diffrent, et en faire l'appel
le curseur de la souris sur : En 1 on trouve o bon nous semble dans code source du logiciel. Le petit programme
les bibliothques par dfaut et en 2 les bibliothques importes. ESSAI_de_SERIAL-EVENT.ino propose un exemple d'utilisation.
P4 P 41
Mthodes de la bibliothque Wire.h. (Complments en page 6) Le fichier KEYWORDS.txt
Cette librairie permet de communiquer avec des composants utilisant le
protocole I2C / TWI. (Communication srie sur 2 fils.)
Connexions. Sur la plupart des cartes Arduino :
S trictement optionnel, ce fichier permet l'IDE d'apprendre la
table des mots clef spcifiques la bibliothque pour activer
la coloration syntaxique. Quand les identificateurs sont spcifis
SDA (Ligne de donnes) est sur la broche analogique A4.
dans le fichier keyword.txt (Lettres majuscules ou minuscules.)
SCL (Signal d'horloge) est sur la broche analogique A5.
ces symboles seront alors affichs en couleur ocre dans l'diteur de
Sur Arduino Mega : SDA est sur Numrique 20 et SCLsur N21.
l'IDE comme pour tous les autres mots du langage. La syntaxe est :
Fonctions d'initialisation :
begin() initialise la communication avec un Arduino "matre". LCD_ST7565[TAB]KEYWORD1
begin(Adresse) initialise la liaison avec un Arduino "esclave". Envoyer_une_COMMANDE[TAB]KEYWORD2
Envoyer_une_DONNEE[TAB]KEYWORD2
Fonctions du "mode matre".
Contraste[TAB]KEYWORD2
requestFrom(Adresse, Quantit) : Demande de donnes un
Afficheur_en_veille[TAB]KEYWORD2
module esclave.
beginTransmission(Adresse) : Dbute la communication avec un Chaque ligne commence par le nom du mot-clef, suivi d'une
TABULATION, (Pas d'espaces, et UNE SEULE TABULATION.)
module esclave. (Ouvre le stockage de donnes envoyer avec write)
suivi par le type de mot-cl. KEYWORD1 prvu pour les classes
endTransmission() : Envoi des donnes vers l'esclave.
qui seront de couleur orange. KEYWORD2 pour les procdures et
write() : criture des donnes envoyer vers l'esclave.
les fonctions qui seront affiches en Ocre. (En version > 1.0 il
available() : Test si des donnes sont disponibles sur l'esclave.

Page 4
semble que 1 et 2 se traduisent tous les deux de la couleur ocre.) Il
read() : Lecture des donnes en provenance de l'esclave.
faut sortir puis redmarrer l'diteur Arduino pour que la table des
Fonctions du "mode esclave".
symboles soit prise en compte. Les lignes de commentaires doivent
write() : Envoie les donnes vers le matre aprs requte. commencer par le caractre # dans le fichier keyword.txt.
available() : Test si des donnes sont disponibles en provenance du
matre. (cf onReceive) Conventions sur les identificateurs : Les classes sont dsignes
read() : Lecture des donnes en provenance du matre. par des caractres majuscules. Les fonctions par des minuscules
onReceive(Fonction) : Dfinit la fonction appeler sur rception "titres" par des majuscules. Les constantes par conventions
de donnes en provenance du matre. d'criture seront avantageusement crites en majuscules.
onRequest(Fonction) : Dfinit la fonction appeler sur
requte du module matre. Choix du rpertoire pour dvelopper la bibliothque :
send() et receive() sont actuellement des fonctions obsoltes. Le plus simple consiste placer le dossier dans le rpertoire
MonPC\Documents\Arduino\Librairies\NomBibliotheque
Exemple d'utilisation : Les broches
#include <Wire.h> analogiques A4 et
void setup() { A5 sont imposes Le format pde pour les fichiers source.
... par l'usage de la Souvent, des exemples de programme Arduino sont donns au
Wire.begin(); bibliothque Wire.h format.pde qu'il faut transformer en textes compatibles avec
Le bus I2C est comment en dtails sur : Arduino. La mthode est simple. Il suffit de renommer le fichier
http://www.monnetamoi.net/articles.php?lng=fr&pg=352 pour remplacer le type pde par ino.
P 40 P5
Passage des paramtres utilisateur au constructeur. Complments relatifs la bibliothque Wire.h.
Cette librairie est documente en page 4.
B ien que les paramtres reprsentant les broches affectes aux
Entres/Sorties choisies par l'utilisateur de la bibliothque ne
vont pas changer, et sont gnralement des constantes, il faut
Il existe plusieurs volutions de la norme qui permettent de communiquer
des dbits toujours plus importants :
Standard mode : 100 kbit/s, Fast mode : 400 kbit/s,
obligatoirement leur rserver des emplacements pour qu'elle Fast plus mode : 1 Mbit/s, High-speed mode : 3,4 Mbit/s,
puissent exister dans le contexte. Dans le fichier d'entte : Ultra-fast mode : 5 Mbit/s
private : byte RST, A0, SCLK, ... Retro_Vert, SID; Pour nos ralisations nous allons surtout utiliser le Standard mode et
Il faut alors, dans le corps { ... } de PERSO_ST7565 tablir le lien ventuellement le "Fast mode". Pour Arduino, la bibliothque Wire.h
entre ces variables et les paramtres de l'instance logicielle : est par dfaut configure pour des changes en Standard mode.
RST=broche_RST; Les quipements connects au bus dialoguent suivant un mcanisme
A0=broche_A0; matre/esclave. Un quipement esclave ne rpond qu des demandes
SCLK=broche_SCLK; en provenance dun matre. Il peut y avoir N matres et N esclaves sur
Retro_Bleu=Retro_eclairage_Bleu; un bus commun. Attention cependant, en cas dutilisation de plusieurs
Dans tout le code source on utilisera ensuite les identificateurs matres, ces derniers doivent tre capables de dtecter quun autre matre
des variables du genre A0 et non des paramtres tels que utilise dj le bus avant dmettre. Un quipement ne peut pas tre la
broche_A0. La relation Paramtre/Variable tant tablie, on peut fois matre et esclave nanmoins il peut changer de rle au cours du
coder le programme source avec la syntaxe habituelle : temps. (Passer de matre esclave et inversement)

Page 5
pinMode(SCLK, OUTPUT); digitalWrite(SCLK, LOW); Toutes les spcifications du bus I2C sont dcrites sans le document :
Rsum de l'architecture de base du fichier.ccp http://www.diolan.com/downloads/i2c-specification-version-4.0.pdf
#include "PERSO_ST7565.h" // Par filiation "rcupre" les #includes de l'entte. Mthodes de la bibliothque EEPROM.h. (Voir @)
#define Contraste_Dynamique B10000001 L'EEPROM est une mmoire non-volatile (Un kilo-octet sur
#define LED_Arduino 13 l'ATmega328 : $0000 $0400) mise la disposition du programmeur
PERSO_ST7565::PERSO_ST7565(byte broche_RST, ... ) { pour y stocker des donnes "constantes" destines au long-terme.
Utilisation de la bibliothque EEPROM.h.
RST=broche_RST; Suite la dclaration #include <EEPROM.h> on peut utiliser :
Initialisations et
A0=broche_A0; Octet = EEPROM.read(ADR); .
configurations de
SCLK=broche_SCLK; Fonction qui lit la valeur contenue dans la cellule d'EEPROM
la classe.
... l'adresse ADR prsente dans le l'EEPROM d'Arduino. Pour le premier
pinMode(Retro_Bleu, OUTPUT); octet ADR = $0000. Les emplacements qui n'ont jamais t crit
pinMode(SCLK, OUTPUT); digitalWrite(SCLK, LOW); contiennent $FF. Elle retourne une donne de type byte.
Envoyer_une_COMMANDE(B10100010); EEPROM.write(ADR,OCTET); .
... Procdure qui crit le contenu du byte OCTET l'emplacement
Afficheur_en_service(); Effacer_Ecran(); Surbrillance(0); } EEPROM point par ADR. (Type int) L'EEPROM est limite environ
Puis suivent les diverses fonctions et procdures : 100 000 cycles d'criture. Donc ne pas l'utiliser comme une RAM.
void PERSO_ST7565::Envoyer_une_COMMANDE(byte OCTET) @ : Prfrer la bibliothque avr/eeprom.h dcrite en page 32 optimise en
{ ... traitement relatif la procdure ...} taille, en rapidit et qui permet de manipuler des donnes de tailles variables.
... / ...
P6 P 39
La bibliothque I2Cdev.h. Le fichier du code source.ccp

F ondamentalement, la Bibliothque de priphriques I2C est une


collection de classes homognes pour fournir des interfaces
simples et intuitives une varit toujours croissante de dispositifs I2C.
C ommenant comme le fichier d'entte par des directives pour
le prprocesseur, il contiendra l'ensemble du code
d'implmentation qui conduit aux mthodes excutables et
Chaque appareil est conu pour utiliser le code gnrique d'I2Cdev.h, commence normalement par #include "PERSO_ST7565.h" et en
qui permet de faire abstraction de la communication I2C au niveau du hrite des directives #include qui s'y trouvent. Par exemple du
bit et au niveau de l'octet. Non spcifique une classe d'appareil #include <Arduino.h> qu'il serait nfaste de ritrer provoquant
particulire, le code propre un systme est plus facile "transporter" des dfinitions multiples. Ensuite, on peut ventuellement trouver
sur diffrentes plates-formes. des directives #define qui permettent de dfinir des constantes.
Le code relatif I2Cdev.h est programm pour tre utilis de manire #define Allume_Tout B10100101 // Allume tous les points.
statique, ce qui rduit les besoins en mmoire si vous avez plusieurs
priphriques I2C inclus dans le projet en cours de dveloppement. Une On doit obligatoirement trouver la dclaration de la classe avant
seule instance de la classe I2Cdev est ncessaire. l'criture des mthodes. L'architecture ressemble :
PERSO_ST7565::PERSO_ST7565(Les paramtres) {
C ette bibliothque I2Cdev.h n'est pas autonome, elle fait appel
Wire.h et doit tre complte par une bibliothque spcifique
au composant en communication I2C avec le programme en cours de
...
Dclarations et instructions
dveloppement. La logique d'un programme utilisant ces trois ... }
La premire occurrence de PERSO_ST7565 dfinit un type classe

Page 6
bibliothques adopte une structure du type :
// Librairie requise pour communiquer avec des modules sur l'interface I2C. et Les paramtres sont strictement identiques en type, ordre et
#include "Wire.h" // (Bibliothque installe par dfaut sur Arduino.) identificateurs ceux de la dclaration de la classe dans public :
// Inclusion d'une bibliothque permettant de communiquer avec un PERSO_ST7565(byte broche_RST, ... byte broche_SID);
// module particulier communiquant travers I2C. du fichier d'entte. Ensuite, entre les dlimiteurs { et } on trouvera
#include "I2Cdev.h" tout ce que le compilateur devra faire quand dans le programme
// Inclusion d'une bibliothque intgrant de nombreuses fonctions utilisateur il y aura appel au constructeur de PERSO_ST7565 :
// permettant d'accder aux informations issues du module connect : Gnralement, quand on cre la classe, on doit configurer les
// Dans ce programme un capteur acclromtrique et gyroscopique 3 Entres/Sorties, les initialiser, envoyer des consignes au
// axes MPU6050. // (Librairy intgre dans le "paquet MPU6050.h") priphrique pilot pour une initialisation de base etc.
#include "MPU6050_6Axis_MotionApps20.h"
L'oprateur de rsolution de porte :: (Appel aussi double
Puis suivent les dclarations propres au capteur, les initialisations et
deux points.) pour simplifier, est utilis pour rfrencer des
enfin les procdures et fonctions du programme.
lments appartenant une classe et non un objet quelconque.
Voici les structures de donnes pour I2Cdev.h avec une description
disponible sur : http://www.i2cdevlib.com/docs/html/index.html La deuxime occurrence de PERSO_ST7565 dfinit le constructeur
PERSO_ST7565 qui par l'entremise de :: appartient cette classe.
Les procdures et fonctions qui suivent commencent naturellement
par void, mais il faut tablir leur appartenance la classe. La
description d'une mthode doit donc respecter l'criture :
Tlchargeable sur http://www.3sigma.fr/telechargements/I2Cdev.zip void PERSO_ST7565::MAJ_PTR(Paramtres) { Code source }
... / ...
P 38 P7
Toutes les dclarations relatives la classe concerne seront Mthodes de la bibliothque LedControl.h.
regroupes entre les dlimiteurs { } suivis en d'un point-virgule. Cette librairie facilite grandement la gestion par la SPI spcifique d'un
Enfin en le fichier d'entte termine par la directive #endif. multiplexeur spcialis pour les afficheurs 7 segments ou les matrices
Le corps des directives peut comporter d'autres dclarations comme de LED et ncessite un circuit intgr MAX7219 ou MAX7221.
les constantes et les variables utilises dans la bibliothque. Initialisations diverses.
Dans private : Variables dclares en gnral en LedControl Mon_afficheur = LedControl(Din,CLK,LOAD,Nb);
boolean Surbrillance; private pour les protger des Cre une instance de ledcontrol en utilisant un identificateur associ.
"contaminations" externes.
byte OCTET, BIT, PAGE; Les trois broches qui gnrent les signaux vers la ligne SPI du (des)
byte MEMOIRE[1024]; // Ici on dclare un grand tableau. MAX7219 sont listes dans l'ordre. Le nombre de modulesNb chans
avec Dout sur la SPI termine la liste des paramtres. Si plusieurs
Entres/Sorties dfinies par l'utilisateur.
multiplexeurs sont utiliss, il est plus logique de les chaner par la SPI
L aisser l'utilisateur la possibilit de rpartir sa guise les
broches de l'ATmega328 qui seront utilises pour piloter son
afficheur est un incontournable. Dans ce but, on doit dclarer dans
et utiliser un seul objet ledcontrol pour tous les contrler.
Mon_afficheur.shutdown(Num,tat);
Par dfaut, la mise sous tension le MAX7219 est en mode veille.
.

le fichier d'entte une instance logicielle de l'objet afficheur : Cette instruction permet de le rveiller avec false ou de le rendormir
Dans public : avec true. Num dsigne le module concern dans le chanage ventuel,
PERSO_ST7565(byte broche_RST, ... byte broche_SID); le premier tant le 0. Chaque circuit doit tre command sparment.
Une telle dclaration commence par le nom de l'objet qui est Mon_afficheur.setIntensity(Num,Clart); .
Ajuste l'intensit lumineuse de chaque module. Clart : De 0 15.

Page 7
identique celui de la bibliothque, suivi entre parenthses de la
liste des identificateurs pour les broches qui seront utilises. Comme Mon_afficheur.clearDisplay(Num); .
il s'agit d'un "passage de paramtre", les valeurs sont types. Efface (teint) l'intgralit de l'afficheur pilot.
Mon_afficheur.setScanLimit(Num,Limite); Par dfaut le balayage
NOTE : Plus gnralement, l'utilisateur de la bibliothque passera se fait sur les huit "DIGIT". Mais si la luminorit est trop faible, on
en paramtres diverses constantes, et pas forcment le numro des peut restreindre le balayage aux seuls afficheurs effectifs. Attention :
broches utilises par la classe dcrite dans le constructeur. Risque de destruction du MAX7219 par surintensit ! (Voir notice)
Protger ou accder une variable dans une classe. Modes d'affichage sur 7 segments ou sur Matrice de LED.
Mon_afficheur.setDigit(Num,Position,Chiffre,Dp); .
D' une faon gnrale il est fortement recommand de dclarer
en private : les variables d'une classe pour les protger.
La visibilit de ces dernires sera alors limit au "domaine" de la
S'utilise implicitement avec des afficheurs 7 segments sur lesquels on
dsire visualiser des chiffres. Le paramtre Dp qui vaudra true ou
classe instancie. Le mot clef public : prcise que les lments false allumera ou teindra le point dcimal du "DIGIT" associ. La
valeur de Position est comprise entre zro et sept.
dont la liste fait suite sont accessibles par toutes les fonctions et
Mon_afficheur.setLed(Num,Ligne,Colonne,tat); .
procdures y compris depuis le programme.ino qui inclus la classe. Instruction spcifique la mise en uvre de matrices de LED. Elle
Naturellement les mthodes "utilisateur" seront publiques. permet d'allumer ou d'teindre une LED individuelle de l'afficheur en
On peut si on dsire pouvoir les modifier dclarer des entits dans spcifiant ses coordonnes. Les valeurs de Ligne et de Colonne vont
le domaine public : leur utilisation imposant de faire rfrence de 0 7. tat conditionne la LED avec true ou false.
la classe pour leur affecter ou y lire des valeurs. Exemple : Mon_afficheur.setRow(Num,Range,Octet); .
Dans le fichier.h on crit : public : byte TEST; Instruction qui place directement les tats prciss par Octet dans
Et pour utiliser dans le croquis.ino : LCD.TEST = TEST + 25; l'alignement Range (Entre 0 et 7) de l'objet ledcontrol Num.
... / ...
P8 P 37
La bibliothque SD.h. CRER UNE BIBLIOTHQUE PERSONNELLE :
D rive de la bibliothque sdfatlib.h de William Greiman qui
propose davantage de fonctions, la bibliothque SD.h est
fournie en standard dans l'environnement IDE et s'avre dj
P rservs dans un dossier commun, les bibliothques Arduino
sont composes d'au moins deux fichiers : Un fichier d'en tte
(Le header.) d'attribut .h et un fichier de code source ayant pour
largement suffisante pour couvrir des attribut .cpp les deux ayant le mme nom identique celui du dossier
applications trs toffes. Le tableau qui hberge les modules. (.c en langage C standard et .cpp en
ci-dessous prcise les branchements version C++.) Le fichier d'en tte contient la liste des fonctions
vers ARDUINO imposs par la disponibles et le fichier source contient l'implmentation du code.
bibliothque, qui librent les deux la compilation la totalit du code sera analyse.
lignes TX et RX ainsi qu'un maximum de sorties de type PWM.
Le fichier d'entte.h (h comme Head)
CS Slection de la carte 10
DI
VSS
Entre srie SPI. (MOSI)
Masse. (GND)
11
GND
F ondamental, il sert dclarer l'intgralit des modules qui
seront impratif son bon fonctionnement : Les procdures
et les fonctions, les variables sans oublier la gestion des #include
VDD + Alimentation. (+3.3) Non branch ncessaires cette bibliothque. Pour que cette dernire puisse
CLK Horloge de la SPI. (SCK) 13
utiliser des fonctions propres Arduino il faut une dclaration
DO Donnes sries de la SPI. (MISO) 12 #include <Arduino.h> (Version > 1.00) qui fait partie du "core
La librairie SD.h permet de lire et d'crire sur des cartes mmoires Arduino" et n'a pas tre tlcharge sur Internet. On peut galement

Page 8
SD et SDHC. Supportant les systmes de fichier FAT16 et FAT 32 inclure des modules qui sont spcifiques la bibliothque et situs
sur les cartes mmoires SD standard et les cartes SDHC. L'ouverture dans son dossier. Dans ce cas les dlimiteurs sont des guillements.
simultanne de plusieurs fichiers est possible. Les noms de fichiers Par exemple #include "Ma_police_de_caracteres".
doivent respecter le format 8.3 au standard assez ancien. Les noms Le fichier d'entte comprendra au minimum :
de fichiers peuvent inclure des chemins spars par des slash "/", le #ifndef PERSO_ST7565_h // Si non dj dfinie. (1)
rpertoire de travail tant toujours la racine de la carte SD, un nom #define PERSO_ST7565_h // On la dfini.
se rfre au mme fichier, qu'il inclue ou non un slash. (Exemple :"/ #include <Arduino.h> // probablement indispensable.
Mon_Fichier.txt" est quivalent "Mon_Fichier.txt".) class PERSO_ST7565 {
public :
Cette librairie ouvre des possibilits de stockage de donnes
void Envoyer_une_COMMANDE(byte OCTET);
considrables puisque les cartes SD disposent facilement de 8Go
};
16Go d'espace. Elles peuvent tre lues directement sur un PC. En (1) Attention : "_" et non le "." pour dsigner l'identificateur.
enregistrant les donnes dans un fichier texte au format CSV, on #endif
rend possible un traitement des donnes enregistres directement Avant tout contenu, il faut en et viter que le fichier d'en tte
dans un tableur par exemple, avec ralisation de graphiques, etc... ne soit victime d'inclusions multiples. Donc on ajoute une protection
avec des directives de prprocesseur. Il est probable que l'on utilisera
Outre la directive incontournable #include <SD.h> on doit des procdures de l'IDE ce qui impose la dclaration . Comme pour
galement complter avec appel une bibliothque de gestion des une variable quelconque, il faut dclarer un objet : En on dfinit
protocoles de communication Arduino sur la ligne de dialogue I2C. Par la classe avec le mme nom que celui de la bibliothque. En
exemple on ajoutera un #include <SPI.h> en tte de programme. publicon va dclarer en au moins une mthode.
... / ...
P 36 P9
Traitement des chanes de caractres. Mthodes de la classe SD.
Impose pour la dclaration des chanes la syntaxe avec le "=" :
Sd2Card Carte_SSD ; Procdure qui instancie la classe SD.
PROGMEM const char Bonjour[] = "Bonjour "; Sd2Volume Contenu ; Identifie la "directory".
const char Les_Amis[] PROGMEM = "les Amis."; Sd2Card Racine ; Identifie la racine de la "directory".
L'utilisation des constantes chane oblige crire une procdure const byte ChipSelect = 10; Dclaration de l'identificateur utilis.
spcifique avec pour paramtre un pointeur :
Carte_SSD.init(Rapidit,ChipSelect); .
void Affiche_TEXTES_en_FLASH(char *PTR) { Fonction qui prcise par les identificateurs rservs la vitesse de
char I=0; char CarASCII=1; // Dif de 0 pour entrer en boucle. communication sur la SPI. Rapidit peut prendre les valeurs : .
while(CarASCII != '\0') { // Tant que non fin de chane : SPI_FULL_SPEED : Frquence CLK = Frquence CPU / 2.
CarASCII = pgm_read_byte(PTR + I); SPI_HALF_SPEED : Frquence CLK = Frquence CPU / 4.
if (CarASCII != 0) Serial.print(CarASCII); I++; } } QUARTER_SPEED : Frquence CLK = Frquence CPU / 8.
Traitement des tables d'OCTETs. Retourne true si l'initialisation a russie, false si non ralise.
Bien que PROGMEM fonctionne avec des variables lmentaires, SD. b e g i n ( ChipSelect) .
il est plus judicieux de s'en servir avec des blocs de donnes Fonction boolenne qui initialise la librairie SD et la carte SD et
stocker, comme des tableaux ou d'autres structures de donnes en active l'utilisation du bus SPI (Sorties binaires 11,12 et 13) et
langage C. L'exemple typique est celui d'un dessin de type LOGO, initialise la broche ChipSelect qui par dfaut est la broche
d'une table pour gnrer des caractres en matrice 5 x 7 etc. matrielle SS. (Broche 10 sur la plupart des cartes Arduino.)

Page 9
Exemple de dclaration pour des OCTETs : Mme si une broche de slection diffrente est utilise, la broche
PROGMEM const byte TABLE_ASCII[] = matrielle SS doit tre laisse en SORTIE, sinon les mthodes de
{B00000000, B00000000, B00000000, B00000000, B00000000, // ESPACE
la librairie SD ne fonctionneront pas correctement. Le paramtre
B00000000, B00000000, B01001111, B00000000, B00000000, // !
ChipSelect est optionnel si l'on conserve la broche 10 par dfaut.
B00000000, B00000011, B00000000, B00000011, B00000000, // "
L a f o n c t i o n r e t o u r n e t r u e si russite et f a l s e s i c h e c .
Exemple d'utilisation :
... ... ... ... ... ... ... ... ... ... ... ...
B00011100, B10100000, B10100000, B10100000, B01111100, // y if (!SD.begin(ChipSelect))
B01000100, B01100100, B01010100, B01001100, B01000100, // z { Serial.println("Echec de l'initialisation."); return; }
... ... ... ... ... ... ... ... ... ... ... ... Serial.println("Initialisation OK.");
B00000000, B01000001, B00110110, B00001000, B00000000, // }
SD. m k d i r ( " D O S S I E R / P r o v ") .
B00001000, B00001000, B00101010, B00011100, B00001000, // Flche D
Fonction qui cre un rpertoire sur la carte mmoire SD ainsi que les
B00001000, B00011100, B00101010, B00001000, B00001000 }; // Flche G
rpertoires intermdiaires qui n'existent pas encore. Retourne true si
Exemple de lecture des OCTETs : la cration du chemin a russi, et false s'il y a chec.
Impose d'crire une procdure pour "balayer" la matrice de caractre. SD. r m d i r ( " D O S S I E R " ) .
void Affiche_Caractere(byte ASCII) { Fonction boolenne qui efface tout un rpertoire, incluant les
int PTR = ASCII * 5; sous-rpertoires dlimits par des slashs "/". Le rpertoire doit
for(byte Colonne=0; Colonne<5; Colonne++) tre vide. Retourne true si le rpertoire a bien t effac, et false
{ Aff_Colonne (pgm_read_byte(&TABLE_ASCII[PTR])); s'il n'a pas pu tre effac. La valeur renvoye n'est pas spcifie si le
PTR++;} Aff_Colonne(0); } rpertoire n'existe pas.
... / ... ... / ...
P 10 P 35
File Mon_Fichier; . Les types de donnes utilisables.
Le constructeur File permet de dclarer un objet de type File pour la L'utilisation de certains types de donnes peuvent conduire des erreurs
librairie SD, objet qui reprsente un fichier. Un tel objet pourra recevoir nigmatiques. (Les float ne sont pas correctement traits.) Il importe
notamment l'objet File renvoy par la fonction SD.open(). donc de n'utiliser que les types de donnes dclars dans la bibliothque
Mon_Fichier = SD.open("ESSAI.TXT", Option) . avr/pgmspace.h soit char, int et long. (signed ou unsigned)
Fonction boolenne qui ouvre un fichier sur la carte mmoire SD. Quelques exemples de dclaration :
Si le fichier est ouvert pour criture, il sera cr s'il n'existe pas PROGMEM const char CaractereA ('A');
dj. (Le chemin de destination doit cependant exister.) . const unsigned char Car_F PROGMEM ('f');
Plusieurs fichiers peuvent tre ouvert : Voir note en bas de page. const byte Vingt PROGMEM = 20;
Les noms de fichiers prsenteront huit lettres au maximum, et PROGMEM const int Moins32000 (-32000);
ventuellement un point suivi au maximum de trois lettres. Le PROGMEM const unsigned int Plus65000 (+65000);
mode par dfaut est FILE_READ qui ouvre le fichier en PROGMEM const long Moins12345678 = -12345678;
positionnant le pointeur au dbut. FILE_WRITE ouvre le fichier PROGMEM const unsigned long Plus4Giga = +4000000000;
en lecture et criture, en dmarrant au dbut du fichier. La fonction Dans ces exemples les deux positions de PROGMEM dans la
retourne true si l'ouverture a russie, et false dans le cas contraire. dclaration sont utilises. Pour affecter une valeur la constante,
Mon_Fichier peut donc tre test comme un boolen classique. on peut utiliser deux critures quivalentes : Soit on fait suivre la
dclaration par le "=" de faon classique, soit on indique la constante
SD. e x i s t s ( " E S S A I . T X T ") . entre parenthses. L'indication const avant le type est obligatoire.

Page 10
Fonction boolenne qui teste la prsence d'un rpertoire (Dlimit par Noter que dclarer un caractre ASCII en unsigned char il devient
des slash "/".) ou d'un fichier dont on passe en paramtre le nom. un nombre, une instruction comme Serial.print affichera son code.
SD. r e m o v e ( " D O S S I E R / A v i d e r . t x t " ) .
Fonction boolenne qui efface un fichier de la carte mmoire. Utilisation des donnes places en mmoire programme.
Intimement lie la notion de pointeur et de passage de paramtre par
Retourne true si le fichier a t effac, et false s'il n'a pas pu tre
adresse, l'utilisation des constantes loges en mmoire FLASH en
effac. La valeur renvoye n'est pas spcifie si le fichier n'existe pas.
reprend plus ou moins directement la syntaxe d'criture. Dans les
Le nom du fichier peut inclure un chemin dlimit par des slashs.
exemples qui suivent, les mthodes spcifiques avr/pgmspace.h sont
Mthodes de la classe FILE. colories en rose et sont associes au type dclar pour la variable :
Mon_Fichier.available() . Serial.println(CaractereA);
Fonction boolenne qui vrifie si des octets sont disponibles en Serial.println(Car_F); // Affiche 102 le code ASCII de 'f'.
lecture dans le fichier. Retourne le nombre d'octets disponibles Serial.println(Vingt);
ou zro si le fichier est vide ou ferm. int ENTIER;
Mon_Fichier.close(); . ENTIER = pgm_read_word(&Moins32000);
Cette procdure ferme le fichier, et s'assure que toute donne crite unsigned int EntierPositif;
dans ce fichier est physiquement enregistre sur la carte mmoire EntierPositif = pgm_read_word(&Plus65000);
SD. Comme la librairie SD.h ne peut ouvrir qu'un seul fichier long DoubleOctet;
la fois, il faut fermer un fichier avant d'en ouvrir un autre. DoubleOctet = pgm_read_dword(&Moins12345678);
NOTE : Bien que non signal sur les documentations mises en ligne, unsigned long DoubleOctetPositif;
il semble parfaitement possible de travailler simultanment sur deux DoubleOctetPositif = pgm_read_dword(&Plus4Giga);
... / ... ... / ...
P 34 P 11
Mthodes de la bibliothque avr/pgmspace.h. ou plusieurs fichiers. Il suffit d'utiliser plusieurs fois le constructeur
Cette librairie est prvue pour loger en mmoire de programme des File avec des identificateurs diffrents.
constantes dans le but de librer de la place dans la SRAM. La mmoire M o n _ F i c h i e r. f l u s h(); .
Flash dite "de programme" est ddie au stockage du code objet Cette procdure s'assure que les donnes crites dans un fichier
compil envoy au microcontrleur au moment du "tlversement". ont t physiquement enregistres sur la carte mmoire SD. Ceci
Comme toutes les mmoires Flash, sa dure de vie se situe environ est fait automatiquement galement lorsque le fichier est ferm
100000 critures et effacements. LIDE en fait donc un usage particulier avec la fonction close();
: On ne peut y enregistrer des donnes quau moment du
"tlversement" du programme. Elle fonctionne ensuite en lecture M o n _ F i c h i e r. r e a d ( ) ; .
seule, donc on ne peut que lire des donnes et plus les modifier. Fonction qui lit un octet dans un fichier et retourne sa valeur sous
forme d'un byte. Positionne le pointeur sur le prochain octet du
Utilisation de la mmoire FLASH pour loger des donnes. fichier. Retourne -1 si octet indisponible.
Au mme titre que l'EEPROM, la mmoire FLASH prvue pour loger
le programme peut galement tre utilise pour y loger des donnes. M o n _ F i c h i e r. p e e k( ) ; .
D'un accs aussi rapide que celui de la RAM, elle conserve les donnes Fonction qui lit un octet dans un fichier et retourne sa valeur sous
sur coupure d'alimentation. La mmoire FLASH doit tre considre forme d'un byte. N'avance pas le pointeur sur le prochain octet du
comme une mmoire accessible uniquement en lecture de constantes. fichier. Retourne -1 si octet indisponible. (Plusieurs appels
Par prcaution le programme doit commencer par la directive successifs fonction peek(); renverront la mme valeur.)

Page 11
classique #include <avr/pgmspace.h> sachant qu'avec les M o n _ F i c h i e r. s i z e ( ) ; .
versions actuelle de l'IDE ce n'est pas un impratif. Fonction qui retourne la valeur de la taille du fichier en nombre
PROGMEM const type NomConstante (Valeur); . d'octets sous forme d'un long. Le fichier doit tre ouvert au moment
PROGMEM est un modificateur de variable, et ne peut s'utiliser o la fonction size() est invoque.
qu'avec les types restrictifs de donnes dfinis dans la librairie
avr/pgmspace.h qui impose au compilateur de placer les donnes Mon_Fichier.position(); .
dans la mmoire FLASH", au lieu de la SRAM, o elles devraient Fonction qui retourne la valeur du pointeur de position dans le
rsider en standard. (Voir types de donnes page suivante.) fichier sous forme d'un long. (Correspond la position o le
prochain octet sera lu ou crit.)
La directive PROGMEM tant un modificateur de variable, donc
en principe il n'y a pas d'emplacement obligatoire, et le compilateur M o n _ F i c h i e r. s e e k( ) ; .
d'Arduino devrait accepter toutes les dfinitions quivalentes. Cette fonction permet de placer le pointeur de lecture/criture
L'exprience montre que dans certaines versions anciennes il y a une nouvelle position, qui doit tre comprise entre 0 et la taille du
disfonctionnement si le mot clef PROGMEM est positionn aprs fichier. (Taille dclare inclusive.) Retourne true si russite et
le type et avant le nom de la variable : false s'il y a chec. Le fichier doit tre ouvert.
Type NomConstante[] PROGMEM = {}; // Accept.
PROGMEM Type NomConstante[] = {}; // Accept. NOTE : Pour effacer entirement le contenu d'un fichier, il
suffit de l'effacer avec l'instruction SD.remove puis de le
Type PROGMEM NomConstante[] = {}; // Ne pas utiliser. recrer avec SD.open.
... / ...
P 12 P 33
Mon_Fichier.write(Data); Fonction Lire un float
Mon_Fichier.write(Tableau, Nb); . . int Lire_un_Float_en_EEPROM(int ADRESSE) .
Procdure prvue pour crire des donnes Data dans un fichier {return eeprom_read_float((float *) ADRESSE);}
pralablement ouvert. Data peut tre un byte, un char ou une Exemple: REEL = Lire_un_Float_en_EEPROM(PTR_EEPROM);
"Chaine de caracteres". Exemples :
Procdure crire un float
const byte Octet = 65; // 'A' en ASCII. void Ecrire_un_Float_en_EEPROM(int ADRESSE, Float REEL)
char TABLEAU[5] {'5','4','3','2','1'}; {eeprom_write_float((float *) ADRESSE, REEL);}
Mon_Fichier.write(Octet); Exemple d'appel : Ecrire_un_Float_en_EEPROM(PTR,REEL);
Mon_Fichier.write('B');
Mon_Fichier.write("Texte");
Mon_Fichier.write(TABLEAU, 3); crire ou lire un BIT individuel en EEPROM :
Mon_Fichier.write(TABLEAU, 2); Ces mthodes ne sont pas prvues dans les routines proposes en
La directive on cre une donne de type byte. En on cre un standard par la bibliothque avr/eeprom.h mais elles ne sont pas
tableau de cinq caractres ASCII. En on crit la valeur d'Octet spcialement compliques coder :
dans le fichier. Puis en on y ajoute le caractre 'B' suivi en Fonction Lire un BIT individuel
d'une chane de caractres. En on copie les 3 premiers lments boolean Lire_un_BIT_en_EEPROM(int ADR, byte N) {
du tableau. Comme cette syntaxe lit toujours partir du dbut du return ((eeprom_read_byte((unsigned char *) ADR)) >> N) & 1;}

Page 12
tableau, en on rcrit les 2 premiers lments. Chaque criture L'ordre du BIT N doit tre compris entre [0 et 7].
dans Mon_Fichier incrmente le pointeur de Lecture/criture. Exemple d'utilisation :
boolean BIT; BIT = 3; PTR = 1020;
Mon_Fichier.print(Data); BIT = Lire_un_BIT_en_EEPROM(PTR, BIT );
Mon_Fichier.print(Data, BASE); . .
Procdure crire un BIT individuel
Procdure pour pour crire des donnes Data dans un fichier
pralablement ouvert. Data peut tre un byte, un char, un int, un void Ecrire_un_BIT_en_EEPROM(int ADR, byte N, boolean Etat)
long, un float ou une "Chaine de caracteres". Les nombres sont { byte Octet, Masque;
Octet = eeprom_read_byte((unsigned char *) ADR);
crits comme des squences de chiffres textuels ASCII. L'option
Masque = 1 << N;
BASE spcifie ventuellement la base dans laquelle est
if (Etat) Octet = Octet | Masque;
transforme le nombre : BIN, (Base 2) DEC, (Base 10 par dfaut)
else {Masque=~Masque; Octet = Octet & Masque;}
OCT, (Base 8) et HEX. (hexadcimal)
eeprom_write_byte((unsigned char *) ADR, Octet);}
Mon_Fichier.println(); L'ordre du BIT N doit tre compris entre [0 et 7].
Mon_Fichier.println(Data); L'tat du BIT peut tre true, false, "1" ou "0".
Mon_Fichier.println(Data, BASE); .. Exemple d'utilisation :
Procdure totalement analogue Mon_Fichier.print(Data), qui Ecrire_un_BIT_en_EEPROM(844, 7, 0);
crit des donnes Data dans un fichier pralablement ouvert et // L'emplacement relatif n844 verra son BIT n7 forc zro.
qui ajoure deux octets la suite : "Retour chariot" + "passage la
http://www.nongnu.org/avr-libc/user-manual/
ligne". Les formats d'criture sont strictement identiques.
group__avr__eeprom.html#ga2d4ee8b92a592c764785fb5e4af5662b
... / ...
P 32 P 13
Mthodes de la bibliothque avr/eeprom.h. Afficher le contenu d'un fichier.
Cette bibliothque remplace avantageusement EEPROM.h dcrite en
bas de la page 5. Il n'y a pas besoin de la dclarer avec un include ce
qui rsous pas mal de problme dans la rdaction de bibliothques
F aire afficher le contenu d'un fichier n'est pas prvu, car la
prsentation sera fonction de la nature des donnes qui y sont
contenues. L'criture d'une procdure ddie est assez simple :
personnelles. Le code gnr est plus compact et fonctionne plus
// On ouvre le fichier, ou on repositionne le pointeur au dbut :
rapidement. On peut lire et crire des entits de tailles diffrentes.
Mon_Fichier.seek(0); // 0 ou plus pour commencer plus loin.
Utilisation de la bibliothque : while (Mon_Fichier.available()
Il suffit dans le programme utilisateur d'ajouter les procdures et { Serial .write(Mon_Fichier.read()); };
les fonctions dont on a besoin puis d'y faire appel. Dans les exemples
Il faut galement vrifier l'existence du fichier. (Voir ci-dessous.)
qui suivent les identificateurs coloris en rose sont ceux de la
bibliothque avr/eeprom.h et il ne faut pas les modifier. Afficher le contenu de la carte mmoire.
Fonction Lire un octet
byte Lire_Octet_EEPROM(int ADRESSE)
{return eeprom_read_byte((unsigned char *) ADRESSE);}
. I ssue de la bibliothque sdfatlib.h de William Greiman
l'exemple de programme qui suit en utilise certaines
fonctionnalits facilitant le traitement de la "directory" et, en
Exemple d'appel : OCTET = Lire_Octet_EEPROM(PTR_EPROM); particulier, permet l'exploration des sous-dossiers.
Procdure crire un octet // Vrification de la prsence carte :
void Ecrire_Octet_EEPROM(int ADRESSE, byte OCTET) . if (!Carte_SSD.init(SPI_HALF_SPEED, ChipSelect)))

Page 13
{eeprom_write_byte((unsigned char *) ADRESSE, OCTET);} {Serial.println("Pas de carte SD."); return;}
else {Serial.println("Carte presente dans le lecteur.");
Exemple d'appel : Ecrire_Octet_EEPROM(PTR,Donne);
// Vrification des donnes :
Fonction Lire un entier
if (!Contenu.init(Carte_SSD))
int Lire_Entier_EEPROM(int ADRESSE) .
{Serial.println("Carte non pas formatee."); return;}
{return eeprom_read_word((unsigned int *) ADRESSE);}
// Afficher le contenu de la carte SD :
Exemple d'appel : Entier = Lire_Entier_EEPROM(PTR_EPROM); Serial.println("\nFichiers prsents sur la carte :");
Procdure crire un entier Serial.println("Nom / date / Heure / taille");
void Ecrire_Entier_EEPROM(int ADRESSE, int OCTET) . Racine.openRoot(&Contenu);
{eeprom_write_word((unsigned int *) ADRESSE, OCTET);} Racine.openRoot(Contenu); }Deux critures
possibles.
Exemple d'appel : Ecrire_Entier_EEPROM(PTR,Donne); Racine.ls(LS_R | LS_DATE | LS_SIZE);
Fonction Lire un long En cas d'chec en ou en il y a sortie anticipe de la procdure
int Lire_un_Long_en_EEPROM(int ADRESSE) . par le return, tout ce qui suit sera ignor. En les paramtres sont
{return eeprom_read_dword((unsigned long *) ADRESSE);} optionnels. LS_R si l'on dsire les sous-dossiers, LS_DATE si l'on
Exemple: Quatre_Octets = Lire_un_Long_en_EEPROM(PTR); veut la date et l'heure et LS_SIZE si l'on veut la taille des fichiers.
Procdure crire un long COMPLMENTS : Aller sur http://www.mon-club-elec.fr/
void Ecrire_un_Long_en_EEPROM(int ADRESSE, long QtrOct) pmwiki_reference_arduino/pmwiki.php?n=Main.LibrairieSD pour
{eeprom_write_dword((unsigned long *) ADRESSE, QtrOct);} avoir des informations complmentaires sur les fonctions name(),
Exemple d'appel : Ecrire_un_Long_en_EEPROM(PTR,Donne); isDirectory(), openNextFile() et rewindDirectory().
P 14 P 31
Mthodes de la bibliothque Servo.h. display.drawLine(Xd, Yd, Xf, Yf,WHITE); ..
Cette librairie permet une carte Arduino de contrler plusieurs Procdure qui trace une ligne entre les deux points dont on prcise les
servomoteurs de modlisme. En standard ils permettent de positionner coordonnes. WHITE ou BLACK prcise si on trace en blanc ou en
et de maintenir laxe diffrents angles, habituellement entre 0 et 180. noir. L'ordre de dfinition des extrmits est quelconque.
Sur les cartes autres que la Mega, lutilisation de la librairie Servo.h display.drawRect(Xo, Yo, Largeur, Hauteur,WHITE); (Voir Fig.1)
dsactive linstruction analogWrite() sur les broches 9 et 10, quil y Procdure qui trace un rectangle dont on prcise les coordonnes de
ait ou non un servomoteur branch sur ces sorties. l'Origine, la Largeur et la Hauteur. WHITE ou BLACK prcise si
on trace en blanc ou en noir. Largeur et hauteur peuvent avoir des
Le constructeur Servo dclare une variable de type Servomoteur. valeurs ngatives et sont alors tracs vers la gauche et vers le haut.
On peut dclarer autant de variable Servo quon utilise de moteurs. display.drawCircle(Xo, Yo, Rayon, WHITE); .
Ex : Servo Moteur_roulis ; Procdure qui trace un cercle dont on prcise les coordonnes du
L'instruction attach prcise la broche de commande. centre et la valeur du Rayon. WHITE ou BLACK prcise si on trace
Ex : Moteur_roulis.attach(3) ; en blanc ou en noir. Gre les dbordements de 127 x 63.
On peut dfinir les limites de l'impulsion de commande Affichages des textes.
correspondant aux rotations limites du moteur : display.setTextColor(WHITE); .
NomMoteur.attach(broche, impls_min, impus_max); Par dfaut Procdure qui dfinit la "couleur" du texte. (Noir si BLACK.)
les valeurs sont de 544 pour impuls_min et 2400 pour impuls_max. display.setTextColor(TEXTE,FOND); .
Ex : Moteur_roulis.attach(3,1000,2000) ; Procdure qui dfinit la couleur du texte puis du fond. Par exemple

Page 14
L'instruction detach dsassocie la variable Servomoteur de sa broche. display.setTextColor(BLACK, WHITE); fait passer le texte en
Si toutes les variables Servo sont libres, alors les broches 9 et 10 "surbrillance" par inversion criture en noir sur fond blanc.
peuvent tre utilises pour gnrer de la PWM avec analogWrite(). display.setCursor(X, Y); .
Ex : Moteur_roulis.detach() ; Positionne le curseur de la prochaine criture textuelle.
L'instruction write provoque sur un moteur standard son display.setTextSize(Taille); .
positionnement l'angle donn en paramtre. Langle exprim en Dfinit la taille des caractres, la plus petite valeur tant 1. .
degrs est compris entre 0 et 180. La largeur de limpulsion envoye 1 : Matrice 5x7, 2 : Le double, 3 : Le triple etc.
au servomoteur est ventuellement limite par les paramtres imposs display.print(Donne); display.println(Donne); .
au pralable avec linstruction attach(broche, impls_min, impls_max) Affiche la donne partir de la position actuelle du curseur. Gre les
Ex : Moteur_roulis.write(90) ; (Poritionne le moteur au neutre) dbordements de la fentre 127 x 63, le texte dpassant du domaine
L'instruction writeMicroseconds permet d'imposer la dure de affichable sera ignor. Le format de la Donne peut tre : .
l'impulsion au lieu de l'angle de positionnement. . display.println("Texte quelconque."); (1) .
Ex : Moteur_roulis.writeMicroseconds(1500) ; . display.print(PI,8); Valeur et en option le nombre de dcimales.
Sur les moteurs standards, un paramtre de valeur 1000 s est la display.println(1234, BIN); Valeur affiche en Binaire. .
position extrme dans un sens, 2000 est la position extrme dans le display.print(1234, HEX); Valeur affiche en Hexadcimal. .
sens inverse et 1500 est au centre. De nombreux fabricants dpassent display.println(1234, OCT); Valeur affiche en Octal.
ces valeurs entre 700 et 2300 raison pour laquelle linstruction attach() (1) : Les lettres, les chiffres et la ponctuation standard sont
initialise par dfaut entre 544 et 2400. Repousser ventuellement ces correctement affichs ainsi que 128 autres caractres particuliers.
valeurs limites tant que le servomoteur continue se positionner. (Matrices standard ASCII au format 5x7 pour le coefficient 1.)
P 30 P 15
Mthodes de la bibliothque Adafruit_ssd1306syp.h. Mthodes de la bibliothque Stepper.h.
Cette librairie ne fournit que trois procdures, mais ces dernires sont
S pcifique l'afficheur graphique monochrome miniature OLED
128 x 64, cette bibliothque est suffisante pour mettre
facilement en uvre ce produit aussi bien pour du trac gomtrique
tout fait suffisantes pour grer un moteur pas pas dans un
programme pour Arduino. Elles permettent de configurer les paramtres
que pour de l'affichage de textes. relatifs au moteur utilis, et d'imposer ce dernier des mouvements
aussi bien dans le sens direct que dans le sens rtrograde.
Initialisations diverses.
Initialisations des paramtres relatifs au moteur utilis.
Adafruit_ssd1306syp display(broche_SDA, broche_SCL);
Cette directive doit tre place avant void setup() et prcise les deux Stepper Mon_moteur(Resolution, S1, S2, S3, S4); .
sorties binaires d'Arduino qui seront utilises pour interfacer l'I2C. Il Cette procdure cre une instance de la classe Stepper qui identifie
n'est pas utile de configurer ces deux broches en sorties. Mon_moteur un moteur pas pas connect aux sorties binaires S1,
display.initialize(); delay(100); . S2, S3 et S4. Si seulement deux broches sont dfinies, c'est que le
Instruction placer dans void setup() moteur est de type unipolaire. Cette procdure doit tre rencontre
avant toute utilisation de l'afficheur. dans setup() ou dans loop() avant toute utilisation du moteur. Le
Cette instruction se charge de dfinir paramtre Resolution dfinit le nombre de pas pour effectuer un
les deux broches affectes la ligne tour sur le moteur. Il ne faut pas tenir compte de la prsence d'un
I2C en sorties. Les broches A0 A5 ventuel rducteur. La Fig.1 montre
sont parfaitement utilisables en sorties. (Dclarations 14 19.) dans quel ordre doivent
Principe des d'affichages. tre ralises les liaisons S2 IN1 50

Page 15
lectriques si le moteur S4 IN2
Qu'il soit graphique ou texte, un affichage se fait toujours en deux utilis est un modle de S1 50
phases. La premire action consiste placer les "pixels" dans la IN3 Fig.1
type bipolaire comme le 50
mmoire tampon 128 x 64 de l'afficheur. La deuxime action consiste S3 IN4
28BYJ-48 par exemple.
transfrer l'affichage sur l'cran LCD avec l'instruction 50
Vitesse possible de commutation.
display.update(); cette ligne tant indispensable mme pour
l'instruction display.clear(); d'effacement de l'cran. Mon_moteur.setSpeed(Nb_tours_par_Minute); .
La Fig.1 prcise les valeurs des coordonnes pour les pixels. Cette procdure prcise la vitesse de rotation acceptable par le moteur
sans risquer de perdre des pas. Elle ne fait pas mouvoir le moteur,
Affichages graphiques. mais dfinit simplement la vitesse laquelle il tournera lors de l'appel
display.drawPixel(X, Y, WHITE); . . la procdure step(). Nb_tours_par_Minute est un long.
Procdure qui permet de grer l'afficheur point par point. Elle allume
Faire tourner le moteur.
le pixel de coordonnes X et Y si le paramtre de lumire est WHITE
ou teint le point si le paramtre est BLACK. Mon_moteur.step(Nb_pas); .
Active le moteur pour lui faire raliser Nb_pas la vitesse de rotation
X 0,127 dtermine par l'appel le plus rcent setSpeed() ce qui permet au
0,0
Taille du
programme de pouvoir modifier convenance la rapidit de la rotation.
Origine du
rectangle Cette fonction est "suspensive", c'est dire qu'il faut attendre que le
rectangle
L,H moteur ait fini de raliser les Nb_pas avant de passer l'instruction
suivante dans le programme. Le paramtre Nb_pas est un nombre
0,63 Y Fig.1 63,127 entier sign. Si le signe est positif le moteur tourne dans le sens direct.

Si le signe est ngatif la rotation sera rtrograde.


P 16 P 29
Mthodes de la bibliothque AFMotor.h. LCD.S u r b r i l l a n;c e ( b o o l e a n ) .
Cette librairie est prvue pour grer des moteurs courant continu en Si "true" crit et affiche les textes et les nombres en surbrillance.
utilisant le Shield ADAFRUIT montr sur la Fig.1 et spcifiquement
ddie l'interfaage de puissance de petites motorisations. Aprs l'avoir Modifier des caractres spciaux.
dclare, AFMotor.h permet de contrler jusqu' quatre moteurs
courant continu en sens et en vitesse sur le Shield de d'ADAFRUIT.
Gestion des moteurs courant continu.
F ondamentalement il suffit de remplacer les cinq
octets qui dfinissent l'un des caractres spciaux
qui ne sera plus utilis. L'appel se fait toujours avec le
AF_DCMotor Mon_moteur(Port, Frquence PWM); . caractre textuel de son code ASCII. Par exemple on
Ce constructeur pour un moteur courant continu doit tre utilis pour dsire que 'Flche Gauche' de code ASCII 127 non utile pour le
chaque moteur inclus dans le projet. (Invoqu une seule fois par programme en cours de dveloppement aprs rcriture de ses cinq
moteur) Chaque instance doit avoir un nom diffrent. Le paramtre octets devienne ''. Le premier octet est relatif la colonne verticale
Port peut prendre les valeurs de 1 4 et prcise le port de branchement de gauche. Attention, le BIT de poids faible correspond au haut
du moteur. L'alimentation du moteur se fait en PWM, le paramtre de la matrice, et le poids fort au bas. L'inter caractres sur la 6 ime
Frquence PWM dfinit la frquence du signal rectangulaire gnr. colonne de droite est gnr automatiquement par la mthode
On peut utiliser les quatre options suivantes : concerne avec un octet gal B00000000, raison pour laquelle
chaque caractre n'est reprsent que par cinq OCTETs.
MOTOR12_64kHZ Pour notre exemple la dernire ligne du tableau devient :
MOTOR12_8kHZ 2kHZ n'est possible que sur #1 et B00111100, B01000000, B01000001, B00100010, B01111100};

Page 16
MOTOR12_2kHZ
MOTOR12_1kHZ
F #2 mais pas sur #3 et #4. La table de gnration des matrices de caractres se trouve dans le
fichier Perso_ST7565.ccp de la bibliothque.
Si le paramtre Frquence PWM n'est pas prcis, la frquence de Gnration d'une matrice de 6 colonnes.
1Khz sera utilise par dfaut pour le dcoupage du signal. On peut crer un "pav" complet sans modifier la
Cette instruction s'utilise aprs la dclaration de la bibliothque, hors bibliothque. La technique consiste crer une
de la procdure d'initialisation voidsetup{}. procdure spcifique dans laquelle la matrice 6 x 8 est
Exemple : dfinie dans un petit tableau local la procdure.
#include <AFMotor.h> Chaque nouveau caractre coute 110 octets de programme et 6 octets
AF_DCMotor Mon_moteur_DC(1, MOTOR12_64KHZ); en mmoire dynamique. Quand on veut afficher le caractre spcial,
Pas pas
// Cration du moteur #1 avec PWM 64KHz. dans le programme on fait appel cette procdure. Exemple :
#1
Remarque : Les frquences Appel dans le programme : Damier();
les plus leves produisent void Damier() {// Laisse PTR sur le prochain Octet de
DC souvent un sifflement MEMOIRE aprs de caractre.
DC #4 moins audible au byte CAR_Special1[6] {B01010101, B10101010,
#1 Fig.1 fonctionnement, mais B01010101, 10101010, B01010101, B10101010, };
DC peuvent entraner un byte BarreV;
DC #3 couple infrieur avec for(byte Colne=0; Colne<6; Colne++)
#2
Pas pas certains moteurs. {BarreV = CAR_Special1[Colne];
#2 LCD.Envoyer_une_DONNEE(BarreV);} }
P 28 P 17
Police de caractres en mmoire de programme FLASH. Mon_moteur.setSpeed(Vitesse); .
Actuellement la table de gnration des caractres construite pour Cette procdure peut dfinir tout moment la vitesse laquelle
des matrices 6x8 est loge en mmoire de programme pour librer tournera le moteur. La valeur du paramtre Vitesse sera comprise
totalement l'EEPROM et ne pas consommer de place en RAM entre les entiers 0 255. (0 : Plein ralenti / 254 : Vitesse maximale)
dynamique. De plus la bibliothque devient entirement Exemple :
"autonome". Si l'on dsire modifier des caractres spciaux, il faut Mon_moteur_1.setSpeed(254); // La vitesse du n1 sera maximale.
modifier leurs cinq octets gnriques dans PERSO_ST7565.ccp Mon_moteur_3.setSpeed(127); // La vitesse du n3 sera moyenne.
avec un quelconque diteur de texte. Remarque : La rponse d'un moteur courant continu n'est pas forcment
Les Mthodes TEXTUELLES. linaire et dpend du couple rsistant. La vitesse de rotation relle ne
LCD.CURSEUR(byte X, byte Y); . sera pas ncessairement proportionnelle la vitesse programme.
Impose les coordonnes logicielles de la prochaine Mon_moteur. run(Mode); .
criture d'un caractre sur l'cran. X et Y indiquent la Cette procdure peut dfinir tout moment le mode de fonctionnement
position du PIXEL situ en haut gauche de la matrice du moteur. Les paramtres Mode valides sont : .
qui dfinit le caractre. Contrairement la mthode FORWARD : Rotation dans le sens direct. .
LCD.Positionne_curseur(Colonne, Secteur); ddie au trac BACKWARD : Rotation dans le sens inverse. .
de "pavs verticaux", LCD.CURSEUR() qui gre des "matrices 6 RELEASE : Coupe l'alimentation du moteur. (quivalent
x 8" peut placer le caractre des coordonnes quelconques sur l'instruction SetSpeed (0).) Le circuit d'ADAFRUIT ne gre pas un
l'cran. La partie hors cran du caractre n'est pas affiche.

Page 17
freinage dynamique, le moteur entrain par inertie peut prendre un
LCD.C R L F ( ) ; . certain temps avant de s'immobiliser. .
Fait passer le curseur textuel en dbut de ligne suivante. Si le bas Exemple :
de l'cran est dpass provoque un "schrolling" cran. Mon_moteur.run(FORWARD); // Le moteur tourne dans un sens.
LCD.H O M E ( ) ; . delay(1000); // Durant une seconde.
Fait passer le curseur textuel en haut gauche de l'cran. Mon_moteur.run(BACKWARD); // Le moteur tourne dans l'autre sens.
LCD.Decale_MEMOIRE(); (Voir Page 26.) Gestion des moteurs PAS PAS.
LCD.Decale_ECRAN(); (Voir Page 26.) AF_Stepper Mon_pas_a_pas(Nb_Pas, Port); .
LCD.Affiche_TEXTE("Chane de caractres"); . Ce constructeur pour un moteur PAS PAS doit tre utilis pour
Affiche la chane de caractres partir de la position actuelle du chaque moteur inclus dans le projet. (Invoqu une seule fois par
curseur textuel. Gre un semi passage la ligne si dbordement. moteur). Chaque instance doit avoir un nom diffrent. Le paramtre
Un dbordement droite fait passer la ligne, mais coupe Port peut prendre les seules valeurs 1 et 2 et prcise le port de
ventuellement le caractre en cours. Si le dbordement se fait sur branchement du moteur. (1 pour #1 et #2 et 2 pour #3 et #4 : Voir la
la ligne du bas il y a gnration d'un "schrolling" cran. Fig.1) Le paramtre Nb_Pas prcise le nombre de pas par tour.
LCD.Affiche_NOMBRE(Valeur numrique, Nb_decimales);
Cette instruction s'utilise aprs la dclaration de la bibliothque, hors
Affichera une valeur numrique quel que soit son type. Le nombre
de la procdure d'initialisation voidsetup{}.
de dcimales souhait est prcis dans Nb_decimales. La valeur
Exemple :
sera comprise entre 0 et 2. Si on propose une valeur suprieure
#include <AFMotor.h>
2 elle sera ramene 2. Si la consigne est 0, il n'y aura aucune AF_Stepper Moteur1(48, 1); // 48 pas par tour / branch sur #1 & #2.
dcimale et le point dcimal n'est alors pas affich. AF_Stepper Moteur2(200, 2); // 200 pas par tour / branch sur #3 & #4.
... / ... ... / ...
P 18 P 27
Mthodes de la bibliothque AFMotor.h. (Suite) LCD.CADRE(int x, int y, int X, int Y,boolean Allume); .
Mon_pas_a_pas.step(Nb_Pas, Sens, Mode); . Trace un cadre (Rectangle creux.) dont on dfinit dans un ordre
Cette instruction commande la rotation du moteur pour Nb_Pas. Le quelconque les extrmits de l'une de ses deux diagonales. Traite
sens de rotation est prcis par le paramtre Sens qui peut prendre entirement l'ordre dans lequel on donne ces "angles" ainsi que les
les deux valeurs FORWARD et BACKWARD. Le paramtre Mode dbordements d'cran. (Dbut avec x et y et Fin avec X et Y.)
dfini le type de commutation des bobines. Les options valides sont : LCD.RECTANGLE_plein(int x, int y, int X, int Y,boolean Allume);
SINGLE : Une seule bobine est excite la fois. Trace un rectangle "plein" dont on dfinit dans un ordre quelconque
DOUBLE : Deux bobines sont alimentes pour avoir plus de couple. les extrmits de l'une de ses deux diagonales. Traite entirement
INTERLEAVE : Alterne entre simple et double pour gnrer un l'ordre dans lequel on donne ces "coins" ainsi que les dbordements
demi-pas "entre les deux". Gnralement le fonctionnement est plus d'cran. (Dbut avec x et y et Fin avec X et Y.)
LCD.CERCLE(int X, int Y, int R, boolean Allume); .
doux, mais le demi-pas rduit la vitesse et la rotation de moiti.
Trace un cercle dont on indique les coordonnes du centre avec X
MICROSTEP : Les bobines adjacentes sont alimentes ou libres par
et Y et la valeur du rayon avec R. Seule la partie "visible" sera trace
des rampes pour engendrer un certain nombre de "micro-tapes" entre
les dbordements d'cran tant entirement grs. Les coordonnes
deux pas complets. Il en rsulte une rsolution plus fine et une rotation
du centre peuvent tre ngatives sans problme.
plus lisse, mais le mouvement s'accompagne d'une perte de couple. LCD.ELLIPSE(int X, int Y, int RX, int RY, boolean Allume);
NOTE : L'instruction est "mobilise" dans une boucle de programme Trace une ellipse dont on indique les coordonnes du centre avec
tant que le moteur n'a pas effectu les Nb_Pas. Si on dsire un X et Y, le "rayon" horizontal avec RX et le "rayon" vertical avec RY.

Page 18
mouvement simultan des deux moteurs possibles, il faut gnrer Seule la partie "visible" sera trace les dbordements d'cran tant
la chronologie par utilisation de l'instruction onestep() insre dans entirement grs. Les coordonnes peuvent tre ngatives sans problme.
une boucle qui traite les deux moteurs en grant le nombre de pas LCD.ARC(int X, int Y, int R, int Angle_debut, int Angle_fin,
effectus par chacun d'eux. (Voir aussi l'encadr en bas de p19) boolean Allume); Trace un arc de cercle dont on indique les
coordonnes du centre avec X et Y et la valeur du rayon avec R. Les
Exemple : Angle_debut et Angle_fin sont indiqus en partant du "Nord" et
Moteur1.step(100, FORWARD, DOUBLE);
doivent tre POSITIFS. Seule la partie "visible" sera trace les
// Faire 100 pas dans le sens direct avec couple augment.
Moteur2.step(300, BACKWARD, MICROSTEP); dbordements d'cran tant entirement grs. Les coordonnes du
// Faire 300 pas dans le sens rtrograde avec rotation lisse. centre peuvent tre ngatives. Le trac est effectu dans le sens
Mon_pas_a_pas.setSpeed(RPM); . horaire tous les degrs donc, plus le rayon impos devient
Cette instruction qui peut tre invoque tout moment et convenance grand, plus les PIXELs reprsentatifs seront spars.
dans le programme dfinit la vitesse de rotation qui sera impose au Sur la Fig.2 ci-contre les
moteur pas pas. La valeur indique est exprime en tours par lments hors de la
minute. Elle ne sera respecte que si : . mosaque d'cran qui ne
Le nombre de pas par tout du moteur a t correctement dfinie. . seront pas "tracs" sont
Le couple rsistant ne dpasse pas le couple moteur. reprsents en jaune,
Fig.2 alors que la partie en
Exemple :
Moteur1.setSpeed(10); // Vitesse de 10 tours par minutes pour Moteur1.
rouge est celle qui
Moteur2.setSpeed(20); // Vitesse de 20 tours par minutes pour Moteur2. modifiera les PIXELs.
... / ... ... / ...
P 26 P 19
LCD.Blancking_Ecran(); . Mon_pas_a_pas.release(); .
Blanchi (Ou noirci en fonction du type d'afficheur.) entirement Cette instruction sans paramtre permet de supprimer le courant de
l'cran sans modifier [Colonne / Secteur]. maintien du moteur dans le but de rduire la temprature dissipe dans
LCD.Inverser_ecran(); . les bobines. Mais le moteur ne fournit aucun couple et la charge peut
Inverse l'tat des PIXELs de l'cran et conserve[Colonne / Secteur]. dans ce cas l'entrainer facilement. Exemple :
LCD.Remplir_et_affiche_Ecran(Octet); (Octet : Huit pixels.) Moteur1.release(); // Coupe l'alimentation des bobines du Moteur1.
Remplit l'cran de pavs sans modifier [Colonne / Secteur]. Mon_pas_a_pas. onestep(Sens, Mode); .
LCD.Afficher_MEMOIRE(); . Cette instruction commande la rotation du moteur pour un seul pas.
Rafraichi la mosaque de l'cran avec la totalit du contenu de Le sens de rotation est prcis par le paramtre Sens qui peut prendre
[MEMOIRE] sans modifier [Colonne / Secteur]. les deux valeurs FORWARD et BACKWARD. Le paramtre Mode
LCD.Decale_MEMOIRE(); . dfini le type de commutation et n'accepte pas MICROSTEP. De plus
Dcale la [MEMOIRE] d'un Secteur vers le haut sans afficher le la vitesse n'est plus gre par la procdure setSpeed(RPM). Il faut
rsultat. (Sera surtout utile pour du texte.) imposer un petit dlai entre chaque pas pour imposer la vitesse.
LCD.Decale_ECRAN(); . Exemple :
Dcale la mosaque de l'cran d'un Secteur vers le haut sans Moteur1.onestep(FORWARD, DOUBLE); delay(1);
modifier [Colonne / Secteur]. (Sera surtout utile pour du texte.) // Un pas en mode DOUBLE effectu sur Moteur1.

Les Mthodes GRAPHIQUES. Gestion des SERVOMOTEURS.

Page 19
Le circuit imprim de gestion des moteurs ne fait que dporter sur deux
NOTE : La notion de "Allumer" ou "teindre" sera directement connecteurs ddis aux servomoteurs la masse et le +5Vcc d'Arduino.
fonction du type d'afficheur ST7565 utilis. Pour rendre compatible Ces deux connecteurs ont trois broches. Deux pour l'alimentation du
les effets obtenus par rapport aux informations de ce document, il servomoteur et une pour son pilotage. Il faut donc utiliser la bibliothque
suffit dans void setup de faire appel la procdure Servo.h dcrite en page 14, usant en pilotage les sorties PWM 9 et 10.
LCD.Inverser_ecran(); si le modle utilis dans l'application
prsente une logique inverses. Pour toutes les mthodes le paramtre La bibliothque complmentaire AccelStepper.h.
Allume prcise si l'lment sera trac en "Blanc" si la valeur passe
Cette librairie qui inclut Stepper.h de la page 7 fournit une interface
la mthode est true ou 1, ou en "Noir" si elle vaut false ou 0.
oriente objet pour grer deux, trois ou quatre moteurs pas pas.
LCD.PIXEL(int X, int Y, boolean Allume); . Elle amliore la bibliothque de base de plusieurs faons :
Procdure qui modifie un PIXEL individuellement. Les coordonnes Gre les acclrations et les ralentissements.
du PIXEL X de 0 127 et Y de 0 63 peuvent tre quelconques, (Car Gre simultanment et indpendamment plusieurs moteurs.
utilises pour tracer les autres entits gomtriques.) mais il n'y aura Pilote des moteur de structures diffrentes.
pas d'action si elles sont hors de la mosaque d'cran. Prend en charge des pilotes de moteurs PAS PAS comme le
LCD.LIGNE(int x, int y, int X, int Y,boolean Allume); . "Sparkfun EasyDriver" bas sur le circuit intgr spcialis 3967.
Trace la ligne dont on spcifie les coordonnes du dbut avec x et y Les vitesses trs lentes sont prises en charge.
et de la fin avec X et Y. L'ordre dbut et fin peut tre quelconque, et Proposant des fonctions trs labores, l'auteur de cette librairie
les extrmits peuvent tre hors de la mosaque d'cran. Seule la donne un lien pour tlcharger une documentation complte sur :
partie "visible" sera trace les dbordements d'cran tant entirement http://www.airspayce.com/mikem/arduino/AccelStepper/
grs. Les coordonnes peuvent tre ngatives sans problme.
... / ...
P 20 P 25
Mthodes de la bibliothque LiquidCrystal.h. LCD.Afficheur_en_veille();
LiquidCrystal.h permet une carte Arduino de contrler un afficheur Procdure qui Passe l'afficheur en veille et teint les trois couleurs.
LCD pilot par un "chipset" de type Hitachi HD44780 ou un compatible (L'afficheur passe en consommation minimale.)
qui quipe sur la plupart des crans LCD alphanumrique. Elle autorise LCD.Afficheur_en_service;
en outre aussi bien la commande avec 4 bits que par le mode 8 bits. Ractive l'afficheur et allume les trois couleurs.
LiquidCrystal lcd(RS, RW, Enable, d0, d1, d2, d3, d4, d5, d6, d7); LCD.Envoyer_une_DONNEE(Octet); .
Dclaration globale pour crer un objet lcd de type LiquidCrystal. Procdure qui Affiche le pav vertical Octet aux coordonnes
RW : Paramtre facultatif. Dans ce cas relier RW la masse d'Arduino. [Colonne, Secteur] actuelles. (Voir Fig.1 en page 23) Comme
d0, d1, d2, d3 sont galement facultatifs. Si omis pilotage quatre bits. l'index horizontal interne de l'afficheur est automatiquement dcal
Les diverses syntaxes possibles qui sont diffrencies par le nombre d'une position droite, Colonne est incrmente pour pointer le
de paramtres donns la fonction sont : . prochain "pav vertical" sur la mosaque de l'cran.
LCD.Impose_PAGE(Secteur); (0 < Secteur < 8) .
LiquidCrystal lcd(RS, Enable, d4, d5, d6, d7);
Positionne verticalement la prochaine criture sur Secteur.
LiquidCrystal lcd(RS, RW, Enable, d4, d5, d6, d7);
LCD.Impose_COLONNE(Colonne); (0 < Secteur < 128)
LiquidCrystal lcd(RS, Enable, d0, d1, d2, d3, d4, d5, d6, d7);
Positionne horizontalement la prochaine criture sur Colonne.
LiquidCrystal lcd(RS, RW, Enable, d0, d1, d2, d3, d4, d5, d6, d7);
LCD.Positionne_curseur(Colonne, Secteur); ..
(Dans cet exemple lcd est l'identificateur de l'objet dclar)
Positionne l'emplacement d'criture du prochain "pav vertical" aux
lcd.begin(Cols,Lignes); (Dclaration dans void setup()) .

Page 20
coordonnes Colonne, Secteur dans la mosaque de l'cran. Les
Prcise les dimensions de la matrice de caractres de l'cran. . limites sont prcises ci-dessus ou sur la Fig.1 en page 23.
Doit tre appele avant les autres instructions de la bibliothque. LCD.Contraste(Contraste); .
lcd.setCursor(Col,Ligne); . Procdure qui impose la valeur du paramtre byte Contraste en
Dfinit la position du curseur o commencera la prochaine criture contraste dynamique. La documentation en ligne prcise des
sur l'cran. (0 est la premire ligne ou la premire colonne) valeurs comprises entre et 0x63. (Je conseille entre 27 pour le
Noir et 50 Maxi pour le Blanc, valeurs donnes en dcimal.)
lcd.cursor(); lcd.noCursor(); .
Valide ou supprime l'affichage du curseur de position d'criture. NOTE : L'afficheur ST7565 ne dispose pas d'une mmoire
lcd.home(); . interne accessible par l'utilisateur. Pour palier cette faiblesse
un tableau [MEMOIRE] est cr dans l'instance de l'objet LCD.
Place le curseur de la prochaine criture en haut et gauche.
En utilisation du programme, certaines mthodes agissent
lcd.clear(); . directement sur l'cran et mettent jour [MEMOIRE]. D'autres
Efface tous les caractres de l'cran LCD. . permettent de modifier directement le contenu de [MEMOIRE]
Comme pour home positionne le curseur en haut et Curseur de sans en visualiser le changement sur l'cran. Dans la description
Blink de la bibliothque, faire rfrence l'cran correspond
gauche de l'cran du module d'affichage.
l'affichage, alors que [MEMOIRE] correspond la modification
lcd.blink(); lcd.noBlink(); .
du tableau sans incidence sur l'cran sauf si c'est prcis.
Valide ou supprime l'affichage du gros curseur clignotant
qui remplit intgralement la matrice 5/8. Le curseur LCD.Effacer_Ecran(); .
simple reste visible en permanence s'il est valid. Efface entirement l'cran sans modifier [Colonne / Secteur].
F ... / ...
P 24 P 21
Crer une instance de l'objet Perso_ST7565.h . lcd. noDisplay(); lcd.display(); .
Le programme doit commencer par la directive : noDisplay efface l'cran et le curseur mais conserve l'tat en mmoire.
#include <PERSO_ST7565.h> display rtablit l'affichage du texte et du curseur s'il est valid.
Si l'on dsire pouvoir traiter librement le rtro-clairage il faut dfinir lcd.scrollDisplayLeft(); lcd.scrollDisplayRight(); .
les broches de pilotage par des identificateurs. Par exemple : Dcale l'intgralit de l'affichage, y compris le curseur d'une position
#define Retro_Bleu 9 NOTE : Ici 9,10 et 11 sont choisies gauche ou droite. Les caractres "entrants sont des "espaces".
#define Retro_Rouge 10 pour pouvoir les traiter en PWM.
#define Retro_Vert 11 lcd.leftToRight(); lcd.rightToLeft(); .
Dfinit le sens de dcalage du curseur de la gauche vers la droite
Ensuite on doit crer une instance (Nomme ici LCD.) de l'objet : (Valeur par dfaut) ou de la droite vers la gauche lors d'un affichage.
PERSO_ST7565 LCD = PERSO_ST7565
(6,7,8,Retro_Bleu,Retro_Rouge,Retro_Vert,12); lcd. autoscroll(); .
Chaque caractre sera crit la position actuelle du curseur,
Les paramtres dans l'ordre dsignent la broche qui pilotera RST, immdiatement suivi d'un dcalage d'une position pour tout l'cran.
A0, SCLK, Le Bleu, Le Rouge, le Vert et SID. Dans cet exemple Le dcalage de l'cran est fonction du sens impos par scrollDisplay
A0 est pilote par la sortie binaire 6, SCLK par 7 ... SID par 12. Left ou Right. Le recyclage interne des caractres n'est pas spcialement
(Dans cet exemple l'utilisateur regroupe toutes les broches de
vident. L'instruction lcd.noAutoscroll(); annule ce mode de
commande en laissant libre la LED Arduino 13 et en permettant de
fonctionnement et retourne au dfilement classique.
commander les trois sorties du rtroclairage en analogique PWM.)

Page 21
partir d'ici l'objet instanci est compltement initialis, les broches lcd. print(); .
sont configures, l'cran est mis en service et effac et l'on peut Cette fonction est analogue au print de la librairie Serial que l'on
convenance utiliser les diverses mthodes proposes par la pourra consulter et prsente un comportement similaire pour les
bibliothque. Par exemple LCD.ELLIPSE(0,0,60,30,1); divers formats reconnus. Elle permet d'afficher des textes et des
nombres reprsentatif des valeurs de variables sur un module LCD.
Mthodes de base.
lcd.print("Texte"); ou lcd.print('Caractre');
LCD.Envoyer_une_COMMANDE(Octet); .
lcd.print(Data); Affiche la valeur numrique de la variable Data.
Procdure qui envoie la commande prcise par Octet : .
lcd.print(Data, BASE); BIN : Binaire pur.
B11001000 : Balayage vertical normal du Haut vers Bas.
B11000000 : Balayage vertical invers du BAS vers le Haut. DEC : Dcimal.
L' option BASE
B10100000 : Balayage horizontal normal de Gauche Droite. est facultative. HEX : Hexadcimal.
B10100001 : Balayage horizontal invers de Droite Gauche. OCT : Octal.
B10100101 : Allume tous les points. . Data : char, byte, int, long, float ou string
B10100100 : Retour au mode normal. . lcd. write(); .
B11001000 : Passer en mode de contraste dynamique. Doit tre Cette fonction est oriente caractre. Elle fait afficher au module LCD
suivi de la valeur entre 32 et 41 en dcimal. (0 63 dans la doc.) le caractre dont on fournit le code ASCII en dcimal. Si la valeur
Exemple : LCD.Envoyer_une_COMMANDE(41); . du paramtre est prcde de B le code est alors exprim en binaire,
B10100110 : Ecran NORMAL. (criture allume, fond noir.) les zros en tte peuvent tre omis. Exemples de codage :
... / ... ... / ...
P 22 P 23

lcd.write(57); (Affiche "9" car par dfaut paramtre en dcimal) Mthodes de la bibliothque Perso_ST7565.h.
lcd.write(B111101); (Affiche "=", paramtre en Binaire)
lcd.write(B01000110); (Octet complet, affiche "F") S pcifique l'afficheur LCD avec
rtroclairage trichrome ST7565,
cette bibliothque gre globalement des
Il est tout fait possible de passer comme paramtre afficher un
tracs gomtriques et l'affichage de textes
caractre issu de la ligne srie USB :
et de variables numriques.
void loop() { // Attendre l'arrive d'un caractre sur le port srie. Gestion par pavs verticaux de l'cran.
if (Serial.available()) { Gomtriquement la matrice de points est constitue de 128
lcd.clear(); delay(100); COLONNEs et de huit SECTEURs nomm galement PAGEs dans
while (Serial.available() > 0) // Lire tous les caractres reus. certaines documentations. Pour modifier ce qui sera affich l'cran,
{lcd.write(Serial.read); } } } il faut intervenir directement sur les BITs des OCTETs dont on doit
lcd. createChar(Numro, Tableau); . indiquer les "coordonnes". Le traitement des coordonnes n'est pas
Les modules LCD permettent de se crer jusqu' huit caractres immdiat, mais la bibliothque s'en charge. Toutefois, comme la
personnaliss dsigns par Numro dont la plage va de 1 8. procdure Envoyer_une_DONNEE(Octet); dpose son paramtres
L'apparence de chaque caractre se dfinit par un tableau de huit aux coordonnes gres par la bibliothque, il importe de savoir
comment la rpartition gomtrique logicielle est effectue :
octets chacun relatif l'une des lignes. Seuls les cinq bits de poids
Considrons la Fig.1 sur laquelle on constate que les COLONNEs
faibles dcrivent les pixels de la matrice du caractre. Pour afficher un

Page 22
sont numrotes de 0 127, et les SECTEURs entre 0 et 7. Le tout
caractre personnalis sur lcran, utiliser linstruction : .
premier octet qui constitue le "pav vertical" colori en bleu se
lcd.write(Numro);
trouve en position [0,0]. Le
L'exemple de construction d'un caractre spcifique donn en Fig.1 est
rectangle rouge est contenu dans
relatif la gnration du caractre "". On peut coder le tableau de SECTEUR 0
l'octet de coordonnes [3,5] et
dfinition en binaire ou en dcimal. (Et mlanger les deux) En binaire il
ainsi de suite. Le dernier octet
est inutile de donner les zros en tte. Exemple pour le "" : SECTEUR 1 en bas tout droite se trouve en
byte Ccedille[8] = {0,14,17,16,17,14,4,6}; position [7,127].
byte Ccedille[8] = {0,B1110,B10001,B10000,B10001,14,4,6}; SECTEUR 2 Pour modifier un octet dans la
Le petit programme Caracteres_Speciaux_LCD.ino donne un Fig.1 mmoire d'cran, il faut au
exemple d'utilisation de gnration
Fig.1 Total = 15 de caractres personnaliss. Surtout
pralable positionner le curseur
16 8 4 2 1 aux coordonnes dsires dans
il intgre les tableaux relatifs aux COLONNE 127 "la surface de l'cran" avec la
Lignes du caractre
Lignes du curseur

accentus qui n'existent pas dans la procdure Positionne_curseur


liste initiale, et donne une meilleure ( Colonne, Secteur). Notez
prsentation aux caractres qu'il existe des afficheurs
minuscules "g", "j", "p", "q" et "y" COLONNE 0 logique d'illumination positive,
qui d'origine ne sont pas trs beaux. et des composants de type
NOTE : "Sur Internet" Numro est suppos SECTEUR 7 ngatif. "Noir" et "Allum"
varier entre 0 et 7 et non entre 1 et 8 . seront fonction du type utilis.
... / ... ... / ...

Vous aimerez peut-être aussi