Variateur de lumière 8 canaux 230V

Hello

Dans le genre "trucs et astuces pour gagner en perf", tu peux manipuler directement des états des pins en donnant des valeurs (binaires ou hexadécimal) aux variables PORTB PORTC et PORTD. Cela permet de se passer des fonctions pinMode(pin, mode) et digitalWrite(pin, state). Tu peux faire commuter plusieurs pins en même temps, et grandement gagner en poids et perfs sur le programme compiler.
C'est, je pense, très efficace pour des programmes comme le tient, où il faut définir ou commuter un grand nombre de sorties.
De plus, on peut l'utiliser en complément des fonctions classiques des librairies arduino.

Un petit exemple, pour mieux comprendre, avec ton setup.
Supposons que tu as 6 canaux sur le port B (pins 8 à 13).
( J'utilise exprès 6 canaux au lieu de tes 8 car cela est plus facile a manipuler pour mes exemples. )
Donc, dans ton setup, tu as une boucle for pour sélectionner chaque pin, et définir son statut et son état. Avec la manipulation des ports, ça prend 2 lignes, et cela devrait éliminer le "flash" des ampoules au démarrage de la carte.

DDRB = B1;
PORTB = 0b0;

Explication :
Première étape, assigner le port en output :

DDRB = B1; // Définie le port entier en output
// DDRB = B111110;  // Définie les pins 9 à 13 en output et la pin 8 en input

Tu passes ensuite toutes les pins a 0:

PORTB = 0b000000;

ou

PORTB = 0;

D'autres exemples :
Si tu ne veux que les pins 8 et 10 en high:

PORTB = 0b000101;

ou

PORTB = 0x05;

Tu veux une pin précise (la 10) à HIGH:

PORTB |= 0b000100;

ou

PORTB |= 1 << 2;

ou

PORTB |= _BV(2);

A noter que 2 est la position de la pin sur le port ( donc 0=8, 1=9, 2=10, etc)

La même à l'état LOW:

PORTB &= ~0b000100

ou

PORTB &= ~(1<<2)

ou

PORTB &= ~_BV(PB2);

ou

PORTB &= ~_BV(2);

ou

PORTB &= ~0x4;

Pour plus d'info:

http://www.playarduino.fr/2009/11/booster-le-temps-de-reponse-de-votre-arduino.html