Télécommande 7 Segments
Troisième tuto sur l'utilisation d'un Category:Capteur Category:Infrarouge et une télécommande pour piloter un afficheur.
Le but est d'afficher la valeur du bouton d'une télécommande (de zéro à neuf) sur un afficheur 7 segments.
Composants
Pour ce tuto vous aurez besoin des composants suivants:
- un Arduino Uno (ou Mega, peu immporte)
- le câble d'alimentation USB de l'Arduino
- un Capteur_infrarouge
- une télécommande
- un afficheur 7 segments
- un registre 74HC595
- des jumpers (des câbles)
Note : la télécommande utilisée ici est la même que celle-ci : [1]
Les branchements
Suivre les branchements décrits dans le premier tutoriel Tutoriel Arduino & afficheur 7 segments
Ensuite ajouter le capteur sur le breadboard comme dans le tuto n°2 : Tutoriel Arduino & capteur infrarouge. Brancher le pin de gauche sur l'entrée 10 de l'Arduino.
Programme
aff_digits_IR.ino
//**************************************************************//
// Name : Afficheur 7 segments piloté par télécommande
// Author : F. Lassinot
// Inspiré de :
// shiftOutCode, Hello World
// Author : Carlyn Maw,Tom Igoe, David A. Mellis
// Date : 25 Oct, 2006
// Modified: 23 Mar 2010
// Version : 2.0
// Et de :
// IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
// An IR detector/demodulator must be connected to the input RECV_PIN.
// Version 0.1 July, 2009
// Copyright 2009 Ken Shirriff
//****************************************************************
#include <IRremote.h>
//déclaration et définition des variables
int RECV_PIN = 10;
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;
// valeurs envoyées au registre pour afficher les leds
int mesValeurs[] = {63, 12, 91, 94, 108, 118, 119, 28, 127, 126};
int valeurIR = 0;
const int v0 = 16738455;
const int v1 = 16724175;
const int v2 = 16718055;
const int v3 = 16743045;
const int v4 = 16716015;
const int v5 = 16726215;
const int v6 = 16734885;
const int v7 = 16728765;
const int v8 = 16730805;
const int v9 = 16732845;
const int vRejeu = 4294967295;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
//set pins to output so you can control the shift register
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
void loop() {
// Réception du signal
if (irrecv.decode(&results)) {
// Affichage de la valeur
Serial.println(results.value, HEX);
Serial.println(results.value);
valeurIR = results.value;
irrecv.resume(); // Receive the next value
// Correspondance de la valeur reçue et du chiffre à afficher
switch ( valeurIR ) {
case v0:
affDigit(mesValeurs[0]);
break;
case v1:
affDigit(mesValeurs[1]);
break;
case v2:
affDigit(mesValeurs[2]);
break;
case v3:
affDigit(mesValeurs[3]);
break;
case v4:
affDigit(mesValeurs[4]);
break;
case v5:
affDigit(mesValeurs[5]);
break;
case v6:
affDigit(mesValeurs[6]);
break;
case v7:
affDigit(mesValeurs[7]);
break;
case v8:
affDigit(mesValeurs[8]);
break;
case v9:
affDigit(mesValeurs[9]);
break;
case vRejeu:
// on ne change pas la valeur
break;
default:
break;
}
delay(100); // on attend un dixième de seconde
}
}
// fonction d'affichage du chiffre
// nombre : un int à envoyer à l'afficheur pour afficher le chiffre
void affDigit(int nombre) {
// take the latchPin low so
// the LEDs don't change while you're sending in bits:
digitalWrite(latchPin, LOW);
// shift out the bits:
shiftOut(dataPin, clockPin, MSBFIRST, nombre);
//take the latch pin high so the LEDs will light up:
digitalWrite(latchPin, HIGH);
// pause before next value:
delay(500);
}
Explication du code
Le code se divise en 4 parties :
- déclaration et définition des variables - le setup - La récupération du signal envoyé par la télécommande - L'interprétation du signal et l'envoi vers le registre
Le fonctionnement de l'affichage sur le 7 segments à l'aide du registre est identique au tuto n°1. La lecture du signal est identique au tuto n°2.
La seule vraie différence est dans le traitement du signal :
// Correspondance de la valeur reçue et du chiffre à afficher switch ( valeurIR ) { case v0: affDigit(mesValeurs[0]); break; case v1: affDigit(mesValeurs[1]); break;
Le switch permet d'envoyer la valeur de "mesValeurs" à afficher correspondant à "valeurIR" lue à partir de la télécommande. C'est la fonction affDigit qui se charge d'afficher chaque valeur.
Foire Aux Questions
Si vous avez des questions, posez-les ici!