Par contre, mon programme n'a pas l'air de sortir de la fonction.
En gros, j'utilise un TLC5940 pour multiplier les sorties PWM.
Pour commencer très simple, j'active toutes les sorties du TLC5940 une par une (la led au bout de chaque sortie s'allume), puis j'éteins chaque led les unes après les autres dans le même ordre.
Sans utiliser de fonction, j'arrive très bien à le faire. Mais une fois mes fonctions créées avec 'void' dans mon .h, mes leds s'allument les unes après les autres, mais ne s'éteignent pas.
J'utilise un flag 'i', pour savoir si mon animation a été écrite ou effacée (ça fonctionnait très bien sans utiliser de fonctions). Quand i = 0, l'animation est lue; quand i = 1, l'animation est effacée.
Code Arduino:
#include <animations.h>
#include <Tlc5940.h>
const int zero = 0;
const int plein = 4095;
const int tempo = 500;
int i = 0;
int sortie = 0;
int animation = 0;
void setup()
{
Tlc.init();
}
void loop()
{
if (i == 0)
{
lireAniSimple(animation,sortie,plein,tempo,i);
}
if (i == 1)
{
effaceAniSimple(animation,sortie,zero,tempo,i);
}
}
Code animation.h:
#include <Tlc5940.h>
#include <WProgram.h>
unsigned int ani_simple[][15] = {
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14},
{14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0},
{4, 3, 2, 1, 0, 9, 8, 7, 6, 5, 14, 13, 12, 11, 10},
{10, 11, 12, 13, 14, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4}
};
void lireAniSimple(int animation, int sortie, int plein, int tempo, int i)
{
for (sortie = 0; sortie < 15; sortie++)
{
Tlc.set(ani_simple[animation][sortie],plein);
Tlc.update();
delay(tempo);
}
i = 1;
sortie = 0;
}
void effaceAniSimple(int animation, int sortie, int zero, int tempo, int i)
{
for (sortie = 0; sortie < 15; sortie++)
{
Tlc.set(ani_simple[animation][sortie],zero);
Tlc.update();
delay(tempo);
}
i = 0;
sortie = 0;
}
Désolé pour le code non commenté, c'est vraiment à titre d'essai.
Si vous galérez à le comprendre, je le commenterai.
Merci d'avance pour toute aide.