Quelques exemples de programmation

Accueil/Quelques exemples de programmation
Quelques exemples de programmation 2016-12-20T11:37:56+00:00
Sur cette page, nous alons présenter et décortiquer différents codes utilisables sur l’arduino pour vous mettre petit à petit dans le bain. Les codes utilisés sont simples dans l’ensemble amsi l’important est de les comprendre. Vous devez avoir installé l’IDE arduino pour compiler et upload ces programmes sur votre carte.

 

Le matériel

Exécuter les exemples, il vous suffit d’avoir :

  • Une carte Arduino
  • Un câble USB
  • Un ordinateur

 

Faire clignoter une led

Le but de l’exercice est d’écrire un premier programme, le transférer dans la carte et de l’exécuter. Le cahier des charges est de faire s’allumer une lumière (LED) soudée directement sur la carte, branché au pin 13.

La carte Arduino possède une led (lumière) sur la patte numérique 13. Il n’ y a pas besoin de résistance pour réduire la tension passant dans la led, car elle est déjà présente : ce code pourra vous resservir dans tous vos programmes pour visualiser le passage du code dans un endroit particulier, en faisant clignoter la led un certain nombre de fois.

Voici le code :

int ledPin = 13;// initialisation
void setup()
{
// patte en sortie
pinMode(ledPin, OUTPUT);
}

// boucle sans fin
void loop()
{
// on allume la led
digitalWrite(ledPin, HIGH);
// on attends une seconde
delay(1000);
// on éteint la led
digitalWrite(ledPin, LOW);
// on attends une seconde
delay(1000);
// et on recommence (ne jamais oublier la dernière attente)
}

Dialoguer avec la carte

Le but est d’envoyer des commandes (un caractère) à la carte Arduino. On va donc utiliser une communication série, en utilisant la librairie « Serial » du langage Arduino.

void setup()

{

Serial.begin(9600);

}

void loop()
{
while (Serial.available())
{
char key = Serial.read();
switch (key)
{
default:
Serial.print("commande ");
Serial.print(key);
Serial.println(" non reconnue.");
break;
}
}
}

Compilez (CTRL+R pour aller vite) et chargez dans la carte. L’environnement Arduino propose une console « terminal série » (dernier bouton de la ligne, « Serial Monitor »), cliquez sur l’icone, sélectionnez la bonne vitesse (9600 dans l’exemple ci-dessus) et saisissez des caractères au clavier dans le champ de saisie à droite du sélecteur de vitesse, puis faites « entrer » au clavier ou cliquez sur le bouton « send » : la carte réagit en vous répondant que cette commande n’est pas reconnu. Comment cela est arrivé? Et bien la carte à détécté qu’il y avait  un caractère en attente de lecture avec Serial.available(); et la enregistré dans key grace à Serial.read(); puis dans un switch on la compare à des commandes connues ( actuellement aucune ), c’est donc par défaut que la carte va retourner cette phrase.

Il suffit ensuite d’écrire des cas différents selon ce que vous voulez associer comme commande en voila quelques exemples :

switch (key)
{
case 'l':
analogOutput(200);
break;
case 'r':
analogOutput(5);
break;
default:
Serial.print("commande ");
Serial.print(key);
Serial.println(" non reconnue.");
break;
}

Attention, n’oubliez pas l’instruction « break » qui sert à sortir du « switch », sinon vous enchaîneriez les différents cas (c’est parfois utile quand on veut écrire une séquence d’actions et pouvoir y entrer à n’importe quelle étape), par exemple avec une commande qui s’execute soit avec a b c ou d.

 

Controler un servo-moteur

Cet exemple nécessite de connecter un servo de modélisme comme décrit dans cet article d’introduction à la carte Arduino.

Voici le code pour la carte Arduino, on utilise la librairie servo, inclue dans l’IDE Arduino :

#include <servo.h>

#define INCR  1

// on déclare le servomoteur comme une variable typée
Servo servo1;

// l'angle actuel du servomoteur
int angle = 0;
// le sens actuel du servomoteur
int sens = 0;

/**
* Initialisation du programme
*/
void setup()
{
servo1.attach(9); // le servomoteur est sur une patte PWM, la 9
}

/**
* Boucle infinie qui va gérer la rotation et faire alterner le sens de rotation
*/
void loop()
{
// faire tourner le servomoteur
if (sens == 0)
{
angle += INCR;
}
else {
angle -= INCR;
}
// si on est arrivé à une extremité
if (angle == 0)
{
sens = 0;
}
if (angle == 180) {
sens = 1;
}
delay(10);
servo1.write(angle);
}

Compilez (touche triangulaire à gauche de la barre de menu) et chargez dans la carte (seconde icône de la barre de menu sur la dernière version du logiciel).

Si vous avez cette erreur à la compilation, c’est que vous avez une version trop ancienne de l’environnement et que vous n’avez pas installé la bibliothèque « Servo » : 19 : error : Servo.h : No such file or directory In function ’void setup()’ : In function ’void loop()’ : Il faut mettre à jour votre environnement vers une version plus récente qui intègre la bibliothèque Servo.

Comment ce code marche-t-il? Et bien on a déclaré l’existance d’un servomoteur branché sur le pin 9, et on lui dit régulierement quel angle adopter grace à servo1.write(angle);

 

Voila, j’éspère que cette petite mise en jambe vous aurra été profitable, n’hésitez pas à poser vos questions.