Arduino et microcontrôleur, quelques informations.

Table des matières

° Introduction
° Le langage de programmation de l'Arduino
Des références et exemple du langage de programmation de l'Arduino, qui ressemble beaucoup au langage C.
° Installation de l'environnement de programmation de l'Arduino.

Des Liens, des Livres, des vidéos et où acheter en Suisse. Dans une nouvelle fenêtre.

Exemples de codes, Arduino, avec schémas associés. Dans une nouvelle fenêtre.

Ébauche d'explications de l'assembleur AVR de l'Arduino. Dans une nouvelle fenêtre.


Qu'est-ce qu'un micro contrôleur ?   TOP

Ce qui suit décrira surtout le micro contrôleur Arduino qui a la particularité d'être basée sur des schémas électroniques libres. Cela signifie que toute personne compétente peut construire une telle carte, la vendre et même modifier le schéma, tant qu'il publie les modifications.
Il existe donc plusieurs variantes d'Arduino. Voici les principales :
° Arduino Uno ;
° Arduino Nano qui est particulièrement petit ;
° Arduino Mega ayant plus de mémoire et plus d'entrées-sorties ;
° Arduino Due encore plus dévelopllé que la Mega, mais incompatible, car fonctionne en 3,3 V.
Pour une liste et description plus complète, c.f. le lien "Arduino" ci-dessus.

www.arduino.cc est le site officiel de référence concernant l'Arduino. En anglais.
Depuis ce site Web, on peut télécharger gratuitement le logiciel permettant de programmer un Arduino.

Je travaille principalement sous GNU/Linux, donc mes informations concernent plus ce système d'exploitation. Mais Arduino et son environnement de développement fonctionnent sur tous les systèmes d'exploitations courants.

Installaition de librairies.
Custom Character Generator for HD4478 LCD modules
Exemples de caractères pour le HD4478 LCD modules
Jeu de caractères du HD4478 LCD module. Il a a le jeu asiatique et européen.
Autre lien concernant le HD4478 LCD module.


Langage de programmation de l'Arduino. TOP
Il ressemble au langage C.

° Language Reference, en anglais, liste de toutes les instructions.

° Language Reference, ancienne version, que je préfère.

° Exemples de codes, Arduino, avec schémas associés.

Quelques instructions de bases.
Pour définir des fonctions qui permettent de sélectionner une partie d'un mot :
Se place généralement avant la fonction "setup()", lorsqu'on en a besoin.
#define LoWord(w) ((w) &0xffff)
#define HiWord(w) ((w) >> 16)
#define LoByte(w) ((w) &0x00ff)  //  Mieux, c.f.  lowByte(variable de n'importe quel type)
#define HiByte(w) ((w) >> 8)         //  Mieux, c.f.  highByte(variable de n'importe quel type)
// voir aussi la fonction  word(bHigh, bLow) qui convertit deux bytes en un word
bitRead(x, n)  permet de lire le nième bit de la variable x.

// Déclaration de variables
byte bEtat = 0; // un byte, nombre non signé sur 8 bits, compris entre 0 et 255
char cCaractere = 'a'; // un caractère codé sur 8 bits, correspond à un nombre signé sur 8 bits
short nBrightness = 0;  // Un entier signé sur 16 bits, compris entre -32768 et 32767
int nVal = 0;  // Un entier signé sur 16 bits sur l'Arduino Uno et sur 32 bits sur l'Arduino Due
unsigned int nwBrightness = 0;  // Un entier non signé sur 16 bits, compris entre 0 et 65535
word wValeur = 0;     // Un entier non signé sur 16 bits sur l'Arduino Uno et sur 32 bits sur l'Arduino Due
long lGrandNombre = 0; // Un entier signé sur 64 bits
unsigned long lwTimeStart = 0; // Un entier positif sur 64 bits, valeur maximale = 2^64 - 1 = 1.84467447 x 10^19
float vVirgule = 1.0; // Un nombre à virgule codé sur 32 bits. À éviter si possible, car gourmand en place.
double vVirgule = 1.0; // Un nombre à virgule codé sur 64 bits. À éviter si possible, car gourmand en place.
string :
char acTable[5] = {'a', 'b', 'c', 'd', 'e'}; // un tableau de caractères
char* acMieux[] = {"abcde"}; // Autre manière de déclarer un tableau de caractères
String strS = "Un objet qui traite mieux des chaînes de caractères";

pinMode(13, OUTPUT); // Initialise le PIN digital 13 comme OUTPUT
pinMode(12, INPUT);  // Initialise le PIN digital 12 comme INPUT
digitalWrite(bPin, bEtat); // écrit dans la PIN bPin (byte) l'état bEtat, qui est LOW ou HIGH.
byte = digitalRead(nPin); // Lecture de l'état d'une PIN. Soit 0 soit 1.
analogWrite(nPin, nIntensite); // Ecriture d'une valeur entre 0 et 255 faisant varier la durée à l'état HIGH d'une PIN oscillante
word = analogRead(analogInPin); // alanogInPin vaut A0 ou A1 ou A2 ou ... A5.  Lecture d'une PIN analogique en entrée.
delay(wTime) // attente de wTime millisecondes. wTime est un (word).
Serial.begin(9600); // Initialise la communication série à une vitesse de 9600 bps
   // Se place généralement dans le "setup()"
Serial.print(string ou un nombre) envoie par le port série une chaîne de caractères.
Serial.println(string ou un nombre) idem, avec un retour de ligne à la fin.
byte = Serial.available() indique s'il y a de l'information envoyée à la carte Arduino par le port série.
byte = Serial.read() lecture de l'information envoyée à la carte Arduino par le port série.
lwTimeStart = micros() // lecture du temps en micro secondes écoulé depuis la mise en marche de l'Arduino.

Conversion dans un strig
c.f. StringObject
char acStr[20]; // Pour conversion de nombre en un string.
String strS = "";
dtostrf(lwFrequ1/1000.0, 8, 3, acStr);
strS = acStr;
sprintf(acStr, "%4d ", sensorValue);
strS = strS + acStr;
sprintf(acStr, "%8ld ", lwValue);
strS = strS + acStr;

Il est possible de communiquer par le port série entre un Arduino et un programme en Python.
Exemple à venir---

En 2016, j'ai pu établir une communication entre un Arduino et un programme en javascript dans le navigateur Firefox. Pour cela, j'ai utilisé le plugin UART.
Mais en septembre 2017, cela ne fonctionnait plus.

Voici un programme minimaliste, qui fait clignoter la LED connectée à la pin 13.
/* Clignote
  Fait clignoter la LED de la pine 13, avec une période d'environ 2 secondes.
  La LED reste allumée 1 seconde, puis éteinte une seconde, puis recommence
 */

void setup() {
//============
// La fonction "setup()" est appelée une fois à la connexion de la carte
// ou au reset de la carte.
// Sur la plupart des cartes Arduino, la PIN 13 est connectée
// à une petite LED sur la carte.
pinMode(13, OUTPUT);  // Initialise la PIN 13 en mode "SORTIE"
} // setup

void loop() {
//===========
// La fonction "loop()" est appelée en boucle,
// juste après que la fonction "setup()" ait été exécutée.
digitalWrite(13, HIGH);   // Allume la LED de la PIN 13
delay(1000);              // attend une seconde
digitalWrite(13, LOW);    // Éteint la LED de la PIN 13
delay(1000);              // attend une seconde
} // loop
Les PINs 0 et 1 sont utilisés lors du transfert du programme de l'ordinateur à l'Arduino.


Installation de l'environnement de programmation de l'Arduino. TOP

Sous GNU/Linux, après l'installation, il faut taper depuis un Terminal :
sudo adduser bg dialout
Cela a pour effet d'ajouter l'utilisateur "bg" au groupe "dialout" et de permettre une communication entre l'ordinateur et l'Arduino.
Il faut ensuite redémarrer le système.

Pour transférer le programme de l'ordinateur à l'Arduino, il faut :
° Sélectionner le bon "Type de carte" : "Outils" > "Type de carte"
La liste qui suit dépend de la version installée.
° Sélectionner le bon port Série : "Outils" > "Port Série"
Chez moi le port série est : "/dev/ttyACM0"

Configuration chez moi, avec la version 1.0.5 :
Ne change pas fondamentalement avec la version 1.8.5 (avril 2018)
Pour télécharger sur un Arduino UNO :
Type de carte : Arduino UNO
Port série : /dev/ttyACM1
Programmeur : AVRISP mkll
Pour télécharger sur un Arduino MEGA :
Type de carte : Arduino MEGA 2560 or MEGA ADK
Port série : /dev/ttyACM1
Programmeur : AVRISP mkll
Pour le téléversement sur un chip ATmega328, utiliser :
Type de carte : Arduino mini w/ATmega328
Port série : /dev/ttyUSB1
Programmeur : AVRISP mkll
Pour le téléversement avec le chip CP2102 (FTDI 1412-G B8908572)
sur un chip ATmega328, utiliser :
Type de carte : Arduino mini w/ATmega328
Port série : /dev/ttyUSB1
Programmeur : AVRISP mkll
Connection :
USB (CP2101)
Converter     ATmega328
3V3 pin 1  --- NC  non connectée
Gnd pin 2  --- GND pin8 (et 22)
+5V pin 3  --- VCC pin7 (et 20 et 21)
TX  pin 4  --- Rdx pin2
RX  pin 5  --- Tdx pin3
DTR pin 6  --- Rst pin1  en série à traver un condensateur de 100 nF
Pour ajouter le "type de carte" "Arduino Due", aller dans :
Outils > Type de carte > Gestionnaire de Carte. Sélectionner : "Arduino SAM Boards (32-bits ARM Cortex-M3)


Plan du Site : Home   arrow   microcontroleur.html ( = http://www.juggling.ch/gisin/microcontroleur/microcontroleur.html )


Page mise à jour le 13 avril 2018 par Bernard Gisin     ( Envoyer un e-mail )
Hébergement par : www.infomaniak.ch