Faire un clavier avec le starter kit

Le forum du Snootlab Starter Kit

Faire un clavier avec le starter kit

Message non lude Bemolu » Sam 17 Mar 2012 23:07

Un petit montage simple pour faire un clavier avec seulement des interrupteurs (bouton poussoir) et résistances, en ne "consommant" qu'une ligne analogique. Le montage théorique peut supporter presque autant de touches que l'on veut.
Le principe est élémentaire: chaque bouton poussoir relie l'entrée analogique au point milieu d'un diviseur de tension. Selon le rapport du pont on peut en déduire quelle bouton a été utilisé (quelle 'touche" a été enfoncée).

En ajoutant un ampli op' (bascule tout ou rien) et en consommant la ligne d'interruption E2, on peut détecter l'appui de touche et la traiter comme on le souhaite.

Le schéma montre: 4 'touches', la réalisation physique (et le code): 2 'touches' (car je me suis limité aux composants du starter kit), mais en pratique on peut aller jusqu'à dix touches au moins. Il suffit de choisir les valeurs pour que les tensions générées soient bien réparties.

Schéma:
ClavierResistif-scheam_schem.png
Schéma théorique
ClavierResistif-scheam_schem.png (54.06 Kio) Vu 1762 fois


Réalisation:
ClavierResistif_bb.png
Cablage starter kit
ClavierResistif_bb.png (39.66 Kio) Vu 1762 fois


Code:
Code: Tout sélectionner
/*
Utiliser un "clavier" à plusieurs touches en ne "consommant":
- qu'une ligne analogique
- et la ligne d'interruption selon le besoin
Nécessite:
- une résistance
- par "touche": un bouton poussoir + une résistance
Si besoin:
Un AOP (amplificateur opérationnel)
*/

// Nom des connexions utiles
const int ClavierAnalogique = A0;  // la sortie du "clavier"

int ValeurClavierBrute = 0;  // la lecture de la valeur du clavier - pour l'exemple
int Touche = 0;        // la "touche" lue
int Actif = 0;         // Une touche est activée?

void setup()
 {
  // initialise série à 9600 bps:
  Serial.begin(9600);
  attachInterrupt(1, fct_mode, RISING);   // pour déclencher un évènement lorsqu'on acive une touche
 }

void loop() {
  // Un programme qui sert uniquement à afficher la valeur "lue" sur le clavier, et son interprétation
  if (Actif > 0)
   {
    Serial.print("Valeur lue " );                       
    Serial.print(ValeurClavierBrute);
    Serial.print(" => TOUCHE: ");
    Serial.println(Touche);
    Actif = 0;
   };
  delay(100);                     
}

void fct_mode(void)
 {
   detachInterrupt(1);
   ValeurClavierBrute = analogRead(ClavierAnalogique);
   // pour lire la valeur sur le port série:
   //Serial.println(ValeurClavierBrute);
   if (ValeurClavierBrute > 490 && ValeurClavierBrute < 530)
     {
      Touche = 1;
      Actif = 1;
     }
    else if (ValeurClavierBrute > 900 && ValeurClavierBrute < 960)
     {
      Touche = 2;
      Actif = 1;
     }
    else
     {
      Actif = 0;
     }
   
   delay(10);
   attachInterrupt(1, fct_mode, RISING);
 }


Pour choisir les plages de valeurs à mettre dans le code, on peut lire les valeurs générées par chaque touche en enlevant les commentaires devant la ligne dans la procédure d'interruption.
Note: on peut aussi ajouter une 'touche' dont la résistance est nulle sans danger.

Limitation:
Ca ne marche plus si on appuie sur 2 touches simultanément, ou si on appuie sur une nouvelle touche avant d'avoir relaché la première.
Dernière édition par Bemolu le Mer 21 Mar 2012 22:26, édité 1 fois.
Bemolu
 
Messages: 63
Inscription: Mer 8 Fév 2012 21:19

Re: Faire un clavier avec le starter kit

Message non lude Stéphane » Lun 19 Mar 2012 10:20

Bonne initiative,

petite application sympa, merci d'avoir partagé tout ça :)
Avatar de l’utilisateur
Stéphane
 
Messages: 179
Inscription: Lun 2 Mai 2011 09:40


Retourner vers Starter Kit

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron