servo-angle.ino
Combo típico de Teensy: un toque capacitivo controla la velocidad de un servo de ángulo. La librería Servo del core funciona igual que en los Arduino, y touchRead() da un valor proporcional al contacto para una variación orgánica.
Hardware
Un Teensy 4.0 (NXP i.MX RT1062, Cortex-M7 @ 600 MHz, lógica de 3,3 V) alimentado por USB. 1 servo de ángulo (SG90/MG90S) + cable pelado para el toque capacitivo.
Cableado
Servo: señal al pin 9, + a 5 V (alimentación externa aconsejada), - a GND común. Toque: cable pelado en el pin 0.
Funcionamiento
touchRead() crece con la superficie de contacto; map() lo convierte en velocidad de giro y constrain() limita el ángulo a 0-180°. El servo recibe la posición cada 20 ms.
Ejecución
Con Teensyduino en el Arduino IDE, elige « Teensy 4.0 », Subir y confirma en el Teensy Loader. Los pines son de 3,3 V; el 4.0 es compatible en pines con el 3.2.
Variantes
Sustituye el toque por un potenciómetro, o añade un modo «volver al centro» tras 5 s sin contacto.
servo-angle.ino
// Servo d'angle commande par une touche capacitive (combo Teensy).
#include <Servo.h>
Servo myservo;
const int TOUCHE = 0;
const int SEUIL = 500;
int angle = 90;
unsigned long derniereEtape = 0;
void setup() {
myservo.attach(9); // signal servo sur la broche 9
myservo.write(angle);
Serial.begin(9600);
Serial.println(F("Touche capacitive = vitesse angulaire"));
}
void loop() {
if (millis() - derniereEtape < 20) return;
derniereEtape = millis();
int t = touchRead(TOUCHE);
if (t > SEUIL) {
// Plus le contact est grand, plus l'angle tourne vite.
int vitesse = map(t, SEUIL, 1024, 1, 6);
angle = constrain(angle + vitesse, 0, 180);
if (angle == 180) angle = 0; // rebouclage en douceur
myservo.write(angle);
Serial.print(F("touche=")); Serial.print(t);
Serial.print(F(" angle=")); Serial.println(angle);
}
}