pwm-respiration.ino

Teensy 4.0 · Archivo : pwm-respiration.ino · Lenguaje : Arduino · Uso : Respiration de LED avec PWM et fréquence personnalisable

El LED respira con una curva gamma 2,2 adaptada a la percepción del ojo. En Teensy, analogWriteFrequency() permite elegir la frecuencia PWM (aquí 3 kHz) para evitar el silbido audible de los drivers de LED.

Hardware

Un Teensy 4.0 (NXP i.MX RT1062, Cortex-M7 @ 600 MHz, lógica de 3,3 V) alimentado por USB. 1 LED + resistencia de 330 Ω (calculada para 3,3 V).

Cableado

Ánodo del LED al pin 5 mediante 330 Ω, cátodo a GND. La mayoría de pines Teensy son PWM.

Funcionamiento

analogWriteFrequency() reconfigura el temporizador hardware; analogWrite() aplica el ciclo de trabajo 0-255. El valor pasa por una potencia 2,2 para una subida natural.

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

Controla el brillo con touchRead() o un sensor de luz, o amplía a varios LED respirando desfasados.

pwm-respiration.ino

// Respiration LED : analogWrite() + analogWriteFrequency() (Teensy).
const int LED = 5; // broche PWM (la plupart des broches Teensy le sont)

float niveau = 0.0;
float pas = 0.02;
unsigned long derniereEtape = 0;
const unsigned long PERIODE = 10; // ms entre deux paliers

void setup() {
  pinMode(LED, OUTPUT);
  analogWriteFrequency(LED, 3000); // 3 kHz : au-dessus du sifflement
  analogWriteResolution(8);        // consignes 0..255
  Serial.begin(9600);
}

void loop() {
  if (millis() - derniereEtape < PERIODE) return;
  derniereEtape = millis();

  niveau += pas;
  if (niveau >= 1.0) { niveau = 1.0; pas = -pas; }
  if (niveau <= 0.0) { niveau = 0.0; pas = -pas; }

  // Gamma 2.2 : la perception visuelle est non lineaire.
  float gamma = pow(niveau, 2.2);
  analogWrite(LED, (int)(gamma * 255));
  Serial.println((int)(gamma * 255));
}

← Volver a la ficha