fade-pwm.ino

Arduino Nano Every · Fichier : fade-pwm.ino · Langage : Arduino · Usage : Variation douce d'une LED en PWM

Le PWM du 4809 diffère du 328P (timers TCA/TCD au lieu de Timer0/1/2) mais l'API analogWrite reste identique : ce fade triangulaire 0-255 sur la broche 10 montre l'usage courant, avec la fréquence par défaut sans papillotement visible.

Matériel requis

Un Arduino Nano Every (ATmega4809 à 20 MHz, brochage identique au Nano, USB micro-B, convertisseur UART séparé, broches 5 V, pile de compatibilité avec le Nano classique). Nano Every, LED + résistance 330 Ω sur une broche PWM (D9, D10, D11, D3...).

Câblage

LED (+) → résistance → D10, cathode → GND ; les broches PWM portent le signe ~ sur le silicium.

Fonctionnement

analogWrite charge la consigne du timer : rapport cyclique 0-255/256. Le pas de 2 à 100 Hz donne une montée régulière ; le cycle complet fait ~2,5 secondes.

Exécution

Installez le package Arduino megaAVR Boards dans l'IDE, sélectionnez Arduino Nano Every, téléversez. Le Serial USB est séparé du Serial1 matériel (broches RX/TX) : le code série classique fonctionne tel quel.

Variantes

Sur le 4809 vous pouvez pousser la fréquence PWM bien plus haut (motorisation) via les registres TCA/TCD, ou piloter une base de transistor pour une puissance plus forte.

fade-pwm.ino

// Fade sur le Nano Every : analogWrite 8 bits sur broche PWM.
// Le 4809 permet aussi de changer la frequence PWM (TCA/TCD).
const int LED = 10; // broche PWM (marquee ~ sur le silicium)

int niveau = 0;
int pas = 2;
unsigned long dernier = 0;

void setup() {
  pinMode(LED, OUTPUT);
  analogWriteResolution(8); // 0..255 par defaut
  Serial.begin(9600);
}

void loop() {
  if (millis() - dernier < 10) return; // 100 Hz de rafraichissement
  dernier = millis();
  niveau += pas;
  if (niveau >= 255) { niveau = 255; pas = -2; }
  if (niveau <= 0)   { niveau = 0;   pas = 2; }
  analogWrite(LED, niveau);
  // le cycle complet dure ~2,5 s : visible a l'oeil, sans papillotement
  static int dernierPrint = -10;
  if (abs(niveau - dernierPrint) > 30) {
    dernierPrint = niveau;
    Serial.println(niveau);
  }
}

← Retour à la fiche