Cours:ArduinoChenillard
L'objectif de ce Tp est de commander les différentes Leds de notre carte ShieldInfo, dont vous pouvez trouver le détail sur ce lien.
Il ne faut pas perdre de vue les points suivants :
- les leds s'allument lorsqu'un niveau logique haut est présent sur la sortie associée
- digitalWrite(s,v) permet d'attribuer une valeur (v) sur la sortie (s), comme précisé sur cette page
- il faut aussi préciser quelles sont les sorties
Sommaire
Ex 1: Découverte
Un début simpliste
Commençons simplement par allumer puis éteindre l'une des leds ! Le cadencement sera obtenu par la fonction delay().
Recopier le programme suivant, et exécuter le.
Vous devez ensuite modifier le programme pour faire clignoter les leds f4 et f1 selon le cycle 1s éteintes et 100ms allumées.
void setup()
{
pinMode(6,OUTPUT); // Déclaration des 6 sorties}
}
void loop()
{
digitalWrite(6,1);
delay(1000);
digitalWrite(6,0);
delay(1000);
}
Plus de leds
Vous avez à disposition sur votre 8 leds indépendantes. Nous souhaitons afficher 2 motifs différents sur cet ensemble de leds, à savoir :
En vous inspirant du programme précédent, faire un programme affichant successivement ces 2 motifs pendant 0,5s
Ex 2: Gestion des leds
Nous avons à disposition 8 leds, avec 2 états différents pour chacune. Nous utiliserons donc une variable de type unsigned char, ainsi chaque bit correspondra à l'état d'une led. Par exemple si val=B11001111, le tableau suivant résume l'état des leds :
val | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 |
---|---|---|---|---|---|---|---|---|
État led |
Vous allez devoir écrire une fonction, dont le prototype est donné ci après, qui prendra en paramètre une valeur de type unsigned char, et allumera en conséquence les leds.
void allumeLeds(unsigned char val);
Pour ce faire, nous utiliserons la structure de programme suivante, que vous devez compléter :
unsigned char patteLeds[8] = {13, 12, 11, ... } // se référer à la page ShieldInfo
void allumeLeds(unsigned char val)
{
char i;
unsigned char etat;
for (i=0;i<8;i++) // il y a 8 leds
{
etat = ????? // cette valeur dépend de val, mais aussi de i, cf plus bas
digitalWrite( ??? , etat); // modification de la sortie
.... // éventuellement quelques actions supplémentaires
}
}
Toute la difficulté réside dans la valeur de etat. Le tableau suivant va vous aider à trouver une méthode :
val | val>>1 | val>>2 | val>>3 | val>>4 | val>>5 | val>>6 | val>>7 |
11001111 | 01100111 | 00110011 | 00011001 | 00001100 | 00000110 | 00000011 | 00000001 |
Vous pourrez utiliser le programme suivant pour tester le bon fonctionnement de votre fonction :
char patteLeds[8] = {13, 12, 11, ... } // se référer à la page ShieldInfo
void allumeLeds(char val)
{
...
}
void setup()
{
char i; for (i=6;i<=13;i++) pinMode(i,OUTPUT); // Déclaration des 6 sorties}
}
void loop()
{
allumeLeds(B10101010);
delay(1000);
allumeLeds(B01010101);
delay(1000);
}