0
Petit test de Persistence of Vision avec Arduino
J'ai été contacté par le CI pour faire un projet de persistance de vision pour la Revue des Ingénieurs ! Ça m'a tout de suite motivé à faire un petit test : mon Arduino UNO, son protoshield et 5 LEDs.
Principe de la persistance de vision
Vous connaissez sans doute le principe de la persistance de vision : en faisant clignotter rapidement des LEDs qui se déplacent on peut imprimer des images dans l'oeil qui ne sait pas distinguer de si courts clignottements.
Grâce à mon Arduino j'ai donc fait un petit script qui fait clignotter les 5 LEDs selon un schéma me permettant d'afficher des images ou des textes.
Résultat
Code Arduino
// Pin numbers of the leds
int ledPins[] = {2,4,6,8,10};
int ledNum = sizeof(ledPins)/sizeof(int);
int drawing[] = {
1,1,1,1,1, 0,1,1,1,0, 1,1,1,1,1, 0,1,1,1,0,0,
0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 1,0,0,0,1,0,
0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 1,0,0,0,1,0,
0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 1,0,0,0,1,0,
0,0,1,0,0, 0,1,1,1,0, 0,0,1,0,0, 0,1,1,1,0,0,
};
int colNum = sizeof(drawing)/sizeof(ledPins);
void setup() {
for(int led=0; led<ledNum; led++) {
pinMode(ledPins[led], OUTPUT);
}
}
void loop() {
// Loop thru each column
for(int col=0; col<colNum; col++) {
// Loop thru each led
for(int led=0; led<ledNum; led++) {
digitalWrite(ledPins[led], drawing[(led*colNum)+col]);
}
// Wait a bit before next column
delay(5);
}
// Wait a bit before restart
delay(200);
}
int ledPins[] = {2,4,6,8,10};
int ledNum = sizeof(ledPins)/sizeof(int);
int drawing[] = {
1,1,1,1,1, 0,1,1,1,0, 1,1,1,1,1, 0,1,1,1,0,0,
0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 1,0,0,0,1,0,
0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 1,0,0,0,1,0,
0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 1,0,0,0,1,0,
0,0,1,0,0, 0,1,1,1,0, 0,0,1,0,0, 0,1,1,1,0,0,
};
int colNum = sizeof(drawing)/sizeof(ledPins);
void setup() {
for(int led=0; led<ledNum; led++) {
pinMode(ledPins[led], OUTPUT);
}
}
void loop() {
// Loop thru each column
for(int col=0; col<colNum; col++) {
// Loop thru each led
for(int led=0; led<ledNum; led++) {
digitalWrite(ledPins[led], drawing[(led*colNum)+col]);
}
// Wait a bit before next column
delay(5);
}
// Wait a bit before restart
delay(200);
}