Cours:ArduinoChenillard : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
({{Bleu|Ex 1: Découverte}})
({{Bleu|Ex 2: Gestion des leds}})
Ligne 44 : Ligne 44 :
  
 
={{Bleu|Ex 2: Gestion des leds}}=
 
={{Bleu|Ex 2: Gestion des leds}}=
 +
{{Info|On constate dans la partie précédente, que la modification simultanée de l'état de plusieurs leds devient vite laborieux. Pour simplifier cela, vous allez écrire une fonction responsable de la modification des sorties.}}
  
 
Nous avons à disposition 8 leds, avec 2 états différents pour chacune. Nous utiliserons donc une variable de type [http://arduino.cc/en/Reference/UnsignedChar unsigned char], ainsi chaque bit correspondra à l'état d'une led.
 
Nous avons à disposition 8 leds, avec 2 états différents pour chacune. Nous utiliserons donc une variable de type [http://arduino.cc/en/Reference/UnsignedChar unsigned char], ainsi chaque bit correspondra à l'état d'une led.
Ligne 63 : Ligne 64 :
 
</source>
 
</source>
  
Pour ce faire, nous utiliserons la structure de programme suivante, que vous devez compléter :
+
{{Question|Pour ce faire, nous utiliserons la structure de programme suivante, que vous devez compléter :}}
  
 
<source lang=c>
 
<source lang=c>
Ligne 82 : Ligne 83 :
 
</source>
 
</source>
  
Toute la difficulté réside dans la valeur de etat. Le tableau suivant va vous aider à trouver une méthode :
+
{{Info|Toute la difficulté réside dans la valeur de etat. Le tableau suivant va vous aider à trouver une méthode :}}
  
 
{| class="wikitable"
 
{| class="wikitable"
Ligne 116 : Ligne 117 :
 
}
 
}
 
</source>
 
</source>
 +
 +
{{Question|Modifier ensuite le programme pour répondre à la question 1.2}}
  
 
={{Bleu|Ex 3: Chenillard}}=
 
={{Bleu|Ex 3: Chenillard}}=

Version du 14 septembre 2013 à 16:06

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 :

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().

Todo.jpg Recopier le programme suivant, et exécuter le.

Question.jpg 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 :

Leda.png Leda.png Lede.png Lede.png Lede.png Lede.png Leda.png Leda.png
Leda.png Lede.png Leda.png Leda.png Leda.png Leda.png Lede.png Leda.png

Question.jpg En vous inspirant du programme précédent, faire un programme affichant successivement ces 2 motifs pendant 0,5s

Ex 2: Gestion des leds

Info.jpg On constate dans la partie précédente, que la modification simultanée de l'état de plusieurs leds devient vite laborieux. Pour simplifier cela, vous allez écrire une fonction responsable de la modification des sorties.

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 Leda.png Leda.png Lede.png Lede.png Leda.png Leda.png Leda.png Leda.png

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);

Question.jpg 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
  }
}

Info.jpg 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);
}

Question.jpg Modifier ensuite le programme pour répondre à la question 1.2

Ex 3: Chenillard