1) sur la base du template que tu m'as donné, j'ai créé un fonction par son (je pense que ce sera plus lisible lorsque le son sera intégré dans le décodeur "NmraDcc".
2) Il y a certes plus de mémoires dans le Teensy (256 k), mais c'est malgré un peu juste. Je pense que pour être vraiment à l'aise, il faudrait entre 2 à 4 Mo. Il faut donc optimiser la taille des tableaux "son".
Le code en 3) donne le résultat de compilation :
Le croquis utilise 199700 octets (76%) de l'espace de stockage de programmes. Le maximum est de 262144 octets.
Les variables globales utilisent 3468 octets (5%) de mémoire dynamique, ce qui laisse 62068 octets pour les variables locales. Le maximum est de 65536 octets.
Même en déclarant les tableaux "son" en "const"
De plus sur le Teensy, contrairement à l'arduino, ce n'est pas évident de gérer" manuellement" la mémoire Flash.
3)
IntervalTimer myTimer;
const int StartLokBR99[] PROGMEM = { // from EncodeAudio
39, 26, 26, 62, 80, 97, 90, 59
};
const int BrakeLokBR99[] PROGMEM = { // from EncodeAudio
122, 143, 160, 164, 159, 143, 138, 131
};
const int SiffletLokBR99[] PROGMEM = { // from EncodeAudio
12, 68, 109, 132, 167, 195, 167, 142, 137, 174, 184,
};
const int MarcheLokBR99[] PROGMEM = { // from EncodeAudio
124, 128, 134, 124, 100, 100, 113, 110, 118, 145,
};
const int ClocheLokBR99[] PROGMEM = { // from EncodeAudio
130, 123, 118, 123, 128, 128, 128, 130, 135, 132, 130,
};
const int StandbyLokBR99[] PROGMEM = { // from EncodeAudio
130, 134, 135, 131, 124, 121, 122, 125, 129, 131
unsigned int echantillonCourant = 0;
void BrakeLok(){
analogWrite(A14, BrakeLokBR99[echantillonCourant++]);
if (echantillonCourant >= sizeof(BrakeLokBR99)/sizeof(int)) {
echantillonCourant = 0;
}
}
void SiffletLok(){
analogWrite(A14, SiffletLokBR99[echantillonCourant++]);
if (echantillonCourant >= sizeof(SiffletLokBR99)/sizeof(int)) {
echantillonCourant = 0;
}
}
void StartLok(){
analogWrite(A14, StartLokBR99[echantillonCourant++]);
if (echantillonCourant >= sizeof(StartLokBR99)/sizeof(int)) {
echantillonCourant = 0;
}
}
void MarcheLok(){
analogWrite(A14, MarcheLokBR99[echantillonCourant++]);
if (echantillonCourant >= sizeof(MarcheLokBR99)/sizeof(int)) {
echantillonCourant = 0;
}
}
void StandbyLok(){
analogWrite(A14, StandbyLokBR99[echantillonCourant++]);
if (echantillonCourant >= sizeof(StandbyLokBR99)/sizeof(int)) {
echantillonCourant = 0;
}
}
void ClocheLok (){
analogWrite(A14, ClocheLokBR99[echantillonCourant++]);
if (echantillonCourant >= sizeof(ClocheLokBR99)/sizeof(int)) {
echantillonCourant = 0;
}
}
void setup(){
analogWriteResolution(8);
myTimer.begin(StartLok, 500);
myTimer.begin(BrakeLok, 125);
myTimer.begin(SiffletLok, 125);
myTimer.begin(ClocheLok, 125);
myTimer.begin(StandbyLok, 125);
}
void loop()
{
}