1
Vos projets / Re : eclairage du reseau
« le: décembre 11, 2016, 10:40:48 am »
salut
pas mal du tout !
aurais tu un schéma de tout ca?
pas mal du tout !
aurais tu un schéma de tout ca?
Le forum LOCODUINO est consacré aux discussions ayant trait à l'utilisation de l'Arduino dans les automatismes et les animations pour le train miniature. Nous avons eu récemment quelques inscriptions de personnes ayant des projets plus généraux mais surtout inapplicables au train miniature. Si votre projet ou vos questions ne concernent pas le modélisme ferroviaire, ne vous inscrivez pas, vous perdriez votre temps et nous aussi.
Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.
#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
}