touche-capacitive.ino

Teensy 4.1 · Fichier : touche-capacitive.ino · Langage : Arduino · Usage : Détecter un doigt sur une broche grâce à touchRead (spécifique Teensy)

touchRead() est la fonction signature de Teensy : elle mesure la capacité d'une broche et détecte un doigt posé sur un simple fil, sans circuit 555 ni plaque capacitive dédiée. Idéal pour des interfaces tactiles improvisées.

Matériel requis

Un Teensy 4.1 (NXP i.MX RT1062, Cortex-M7 @ 600 MHz, logique 3,3 V, Ethernet et stockage flash additionnel) alimenté par USB. Un fil électrique nu (10-20 cm) ou une petite plaque métallique sur la broche 0 ; LED sur 13.

Câblage

Fil capteur sur la broche 0 (à rien d'autre), LED + 330 Ω sur 13 vers GND (3,3 V).

Fonctionnement

touchRead() renvoie une valeur sans contact proche de zéro et de plusieurs centaines avec un doigt. L'hystérésis est assurée par le seuil et l'état mémorisé.

Exécution

Teensyduino dans l'Arduino IDE, carte « Teensy 4.1 », Téléverser puis bouton du Teensy Loader. Broches 3,3 V ; le 4.1 ajoute Ethernet, USB host et broches supplémentaires.

Variantes

Plusieurs broches en capteurs (un tableau de valeurs) pour un pavé numérique capacitif, ou piloter un son via la bibliothèque Audio.

touche-capacitive.ino

// touchRead() : la broche devient un capteur capacitif sans circuit.
// Fonctionne sur une grande partie des broches Teensy (voir doc).
const int TOUCHE = 0;   // broche capteur (fil nu ou plaque metallique)
const int LED = 13;
const int SEUIL = 500;  // a calibrer avec la sortie serie

unsigned long derniereMesure = 0;
bool touche = false;

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (millis() - derniereMesure >= 50) {
    derniereMesure = millis();
    int valeur = touchRead(TOUCHE); // sans contact ~0, doigt ~500-1000

    Serial.print(F("touch = "));
    Serial.print(valeur);
    if (valeur > SEUIL && !touche) {
      touche = true;
      digitalWrite(LED, HIGH);
      Serial.print(F("  -> TOUCHE"));
    } else if (valeur < SEUIL && touche) {
      touche = false;
      digitalWrite(LED, LOW);
    }
    Serial.println();
  }
}

← Retour à la fiche