Utilisateur:Robin/teensy

De Disposition de clavier bépo

Bonjour à tous. Pour l'instant, cette page est à l'état d'ébauche. Elle évoluera en même temps que mon projet de clavier. Je liste ici un ensemble de conseils pour quiconque (y compris mon moi du futur :) voudrais programmer un teensy.

Licence

Tout les codes source présent sur cette pages sont sous licences AGPLv3.0. Afin d'éviter d'alourdir la page, j'inclue donc ici l'en-tête de la licence, et je ne le répèterai pas ailleurs.

   Teensy Tutorial
   Copyright (C) 2015 Robin Moussu
   
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU Affero General Public License as
   published by the Free Software Foundation, either version 3 of the
   License, or (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU Affero General Public License for more details.
   
   You should have received a copy of the GNU Affero General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.

Teensy

Le microcontrôleur que j'utilise est un teensy 3.1. Il peut se faire passer pour un clavier. La programmation se fait avec teensyduino, un dérivé d'arduino.

Il faut utiliser les pages de pjrc, et non pas celle de l'arduino Leonardo pour avoir les bonnes infos sur les codes de touches.

Utilisation des touches modificatrices

Lors de la programmation du teensy, le layout par défaut est en qwerty. Pour des tests de bases, c'est amplement suffisant. Le premier problème que j'ai rencontré était d'utiliser les touches modificatrices. Comme dit dans l'introduction, il ne faut pas utiliser la documentation de l'arduino Leonardo, mais celle de teensy (notament le paragraphe « The micro management way »).

En résumé, voici comment faire un « ctrl + a »

   int led = 13;
   int bp = 2;
   
   void setup() {
       pinMode(2, INPUT_PULLUP);
       pinMode(led, OUTPUT);
       
       Keyboard.begin();
   }
   
   void loop() {
       // On allume la LED au démarage
       digitalWrite(led, HIGH);
   
       // On attend que le pin 2 soit relié à la masse
       while (digitalRead(2) == HIGH) { }
       
       // Pendant qu'on fait des trucs, la led est éteinte
       digitalWrite(led, LOW);
       
       // On envoie ctrl + a
       Keyboard.set_modifier(MODIFIERKEY_CTRL);
       Keyboard.set_key1(KEY_A);
       Keyboard.send_now();
   
       // On remet le clavier à son état d'origine
       Keyboard.set_modifier(0);
       Keyboard.set_key1(0);
       Keyboard.send_now();
       
       // On attends un peu pour être sur de ne pas recommencer accidentellement la boucle
       delay(1000);
   }

Utiliser le teensy en bépo

Par défaut, le teensy est détecté comme ayant un mappage us, ce qui n'est pas pratique si on veut l'utiliser pour faire du bépo (à cause des nombreux caractères du bépo non présent sur le mappage us, nottament les caractères accentués).

Pour l'instant, voici la solution que j'ai adopté (sous linux). Il faut avoir une console ouverte avant de mettre la patte 2 à la masse.

   int led = 13;
   int bp = 2;
   
   void setup() {
       pinMode(2, INPUT_PULLUP);
       pinMode(led, OUTPUT);
       
       Keyboard.begin();
   }
   
   void loop() {
       // On allume la LED au démarage
       digitalWrite(led, HIGH);
   
       // On attend que le pin 2 soit relié à la masse
       while (digitalRead(2) == HIGH) { }
       
       // Pendant qu'on fait des trucs, la led est éteinte
       digitalWrite(led, LOW);
   
       // Bien évidement les deux lignes qui suivent peuvent être
       // enregistrées sous forme de macro dans le clavier final !!!
       Keyboard.println("setxkbmap fr bepo");
       delay(100);  // on attend un peu que le bépo soit chargé
       
       // on s'assure que tout s'est bien passé
       
       // les mots qui suivent sont tapés sur un clavier us
       // par conséquent, la version "texte" est illisible
       Keyboard.println("ud'");    // « ud' » en qwerty = « vim » en bépo
       Keyboard.print("d");        // i -> passer en mode insertion
       Keyboard.println("qwer");   // insère « bépo » + un retour à la ligne
       
       // On attends un peu pour être sur de ne pas recommencer accidentellement la boucle
       delay(1000);
   }

Liens

Voici des liens vers des pages interessantes du projet bépo :