mais mon objectif est plus humble... juste faire sonner et clignoter sans barrière .... puis ajouter la partie "DCC"
j'ai cumulé des codes pour arriver a cela :
#include <DFPlayer_Mini_Mp3.h>
#include <SoftwareSerial.h>
enum { ETEINT, EN_AUGMENTATION, ALLUME, EN_DIMINUTION };
struct FeuClignotant {
const byte pin;
byte etat;
unsigned long dateDernierChangement;
};
struct FeuClignotant feuPN = {3, ETEINT, 0 };
void gereFeuClignotant(struct FeuClignotant& feu)
{
unsigned long date = millis();
int valeurPWM;
switch (feu.etat)
{
case ETEINT:
analogWrite(feu.pin, 0);
// Attente de 200ms
if (date - feu.dateDernierChangement >= 200) {
// les 200ms sont passée, on change l'état du feu
feu.dateDernierChangement = date;
feu.etat = EN_AUGMENTATION;
}
break;
case EN_AUGMENTATION:
// La valeur de la PWM est donnée par la difference entre
// la date et la dateDernierChangement
valeurPWM = date - feu.dateDernierChangement;
if (valeurPWM <= 250) analogWrite(feu.pin, valeurPWM);
else {
// Les 250 ms sont passées, on change l'état du feu
feu.dateDernierChangement = date;
feu.etat = ALLUME;
}
break;
case ALLUME:
analogWrite(feu.pin, 250);
// Attente de 200ms
if (date - feu.dateDernierChangement >= 200) {
// les 200ms sont passée, on change l'état du feu
feu.dateDernierChangement = date;
feu.etat = EN_DIMINUTION;
}
break;
case EN_DIMINUTION:
// La valeur de la PWM est donnée par 250 moins la difference entre
// la date et la dateDernierChangement. Attention aux parenthèses
valeurPWM = 200 - (date - feu.dateDernierChangement);
if (valeurPWM >= 0) analogWrite(feu.pin, valeurPWM);
else {
// Les 250 ms sont passées, on change l'état du feu
feu.dateDernierChangement = date;
feu.etat = ETEINT;
}
break;
}
}
void setup() {
// put your setup code here, to run once:
pinMode(feuPN.pin, OUTPUT);
Serial.begin (9600);
mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module
delay(1);
mp3_set_volume (30);
pinMode(feuPN.pin, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
gereFeuClignotant(feuPN);
mp3_play (1); //play 0001.mp3
}
mes problèmes sont les suivants :
il faudrait que le son dure plus longtemps ? comment puis je faire ?
il faudrait que la LED commence a clignoter en même temps que le son .... or pour l'instant le son viens en premier et quand c'est fini la led clignote...
désolé si les questions sont bêtes ... mais je découvre le codage arduino