Auteur Sujet: Un train de table  (Lu 37393 fois)

peyo

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : Un train de table
« Réponse #15 le: août 10, 2020, 04:41:25 pm »
Alors voici mon travail de la matinée. ça fonctionne au poil !!
Si quelqu'un a une idée pour ajouter des leds qui clignotent lorsque le pont bouge, je suis preneur !
Merci d'avance
//Automate pour pont levant automatique.

int pinLedpont = 13;
int ILS1 = 2;
int ILS2 = 3;

// Configure l'état initial des LEDs
byte etatpinLedpont = LOW;

//gestion du pont en H
int IN1 = 5; // commande pont en H "1"
int IN2 = 6; // commande pont en H "2"

// Nombre de millisecondes entre deux changements d'état des LED
const unsigned long CLIGNOTANT = 1000;
 
int a; //rapport cyclique entre 0 et 255


 // tableau des machines à états
 enum {monte, descend } etatpont ;
 
 //////////////////////////////////////////////////////////////
void setup() {
 
  Serial.begin(9600);
 
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
 
  //leds pont

  pinMode(pinLedpont, OUTPUT);
  digitalWrite(pinLedpont, etatpinLedpont);
 
 
  // Bouton poussoir 1
  pinMode(ILS1, INPUT_PULLUP);
  pinMode(ILS2, INPUT_PULLUP);
 
   
  // initialisation du moteur vitesse à 255 sens descente (IN2)
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 0);
 
 // Initialisation des états
etatpont = descend ;
 
 // initialisation du facteur d'incrémentation moteur
 a=255;
 
}

void loop()
{  // Récuperer valeur des ILS
  int amont = digitalRead(ILS1);
  int aval = digitalRead(ILS2);

  // Si passage ILS1
  if (amont == HIGH)
  {
    a=0;
    analogWrite(IN2, 0);
    analogWrite(IN1, a);
    ACCELERATION_monte();
    etatpont = monte ;
    a=255;
    delay(10);
  }

  // Si passage ILS2
 
 
  if (aval == HIGH )
  {
    a=0;
    analogWrite(IN1, 0);
    analogWrite(IN2, a);
    ACCELERATION_descend ();
    etatpont = descend;
    a=255;
    delay(10);
  }
 
 }



void ACCELERATION_monte()
{
  while (a <=255)
  { // phase de montée.
   analogWrite(IN1, a);
   a = a + 1;
   delay(5);
 }
}


void ACCELERATION_descend()
{
 while (a <=255)
  { // phase descente.
   analogWrite(IN2, a);
   a = a + 1;
   delay(5);
 }
 }
 
 void task_led1() {
  static unsigned long previousMillisLed1 = 0;
  static byte etatpinLedpont = LOW;
 
  unsigned long currentMillis = millis();
 
  // Si BLINK_INTERVAL_1 ou plus millisecondes se sont écoulés
  if(currentMillis - previousMillisLed1 >= CLIGNOTANT) {
   
    // Garde en mémoire la valeur actuelle de millis()
    previousMillisLed1 = currentMillis;
   
    // Inverse l'état de la LED 1
    etatpinLedpont = !etatpinLedpont;
    digitalWrite(pinLedpont, etatpinLedpont);
  }
}


« Modifié: août 10, 2020, 09:43:04 pm par peyo »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3043
  • 100% Arduino et N
    • Voir le profil
Re : Un train de table
« Réponse #16 le: août 11, 2020, 08:57:44 am »
Citer
Si quelqu'un a une idée pour ajouter des leds qui clignotent lorsque le pont bouge, je suis preneur !

Tu mets un équivalent de task_led() dans ACCELERATION_monte() et ACCELERATION_descend().

Ce sera déjà pas mal, mais ce ne sera pas complet tant que tu ne connais pas l’état « bouge » à cause des contacts de fin de course que ton programme ne lit pas.
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3043
  • 100% Arduino et N
    • Voir le profil
Re : Un train de table
« Réponse #17 le: août 11, 2020, 09:03:43 am »
J’espère que tu nous montreras quelques vidéos du système en fonctionnement lors de ton mariage que je te souhaite très réussi et plein de bonheur ensuite  ;D ;D ;D

Cordialement,
Dominique

peyo

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : Un train de table
« Réponse #18 le: août 11, 2020, 11:58:45 am »
Merci Dominique pour ta réponse.
ALors j'ai fini mon code, j'ai même trouvé une solution pour la lumière même si j'aurais préféré qu'elle clignote..
Il me reste qu'un seul BUGG :
1 fois sur 10 lorsque le pont descend il se met à remonter tout seul... Même si j'enlève le train des rails.... bugg de la carte???
j'ai mis un delay 9000 pour bloquer le prog mais ça ne change rien... si quelqu’un a une idée......


Merci

//Automate pour pont levant automatique.

int pinLedpont = 13;
int ILS1 = 2;
int ILS2 = 3;


//gestion du pont en H
int IN1 = 5; // commande pont en H "1"
int IN2 = 6; // commande pont en H "2"

 
int a; //rapport cyclique entre 0 et 255


 // tableau des machines à états
 enum {monte, descend } etatpont ;
 
 //////////////////////////////////////////////////////////////
void setup() {
 
  Serial.begin(9600);
 
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
 
  //leds pont

  pinMode(pinLedpont, OUTPUT);
 
 
  // Bouton poussoir 1
  pinMode(ILS1, INPUT_PULLUP);
  pinMode(ILS2, INPUT_PULLUP);
 
   
  // initialisation du moteur vitesse à 255 sens descente (IN2)
  digitalWrite(IN1, 255);
  digitalWrite(IN2, 0);
 
 // Initialisation des états
etatpont = descend ;
 
 // initialisation du facteur d'incrémentation moteur
 a=255;
 
}

void loop()
{  // Récuperer valeur des ILS
  int amont = digitalRead(ILS1);
  int aval = digitalRead(ILS2);

  // Si passage ILS1
  if (amont == HIGH)
  {
     digitalWrite(pinLedpont, HIGH);
    a=0;
    analogWrite(IN2, 0);
    analogWrite(IN1, a);
    ACCELERATION_descend();
    etatpont = monte ;
    a=255;
    delay(9000);
  }

  // Si passage ILS2
 
 
  if (aval == HIGH )
  {
    a=0;
    analogWrite(IN1, 0);
    analogWrite(IN2, a);
    ACCELERATION_monte ();
    etatpont = descend;
    a=255;
    delay(10);
    digitalWrite(pinLedpont, LOW);
    delay(9000);
  }
 
 }

void ACCELERATION_monte()
{
  while (a <=255)
  { // phase de montée.
   analogWrite(IN1, a);
   a = a + 1;
   delay(5);
 }
}


void ACCELERATION_descend()
{
 while (a <=255)
  { // phase descente.
   analogWrite(IN2, a);
   a = a + 1;
   delay(5);
 }

}



Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3043
  • 100% Arduino et N
    • Voir le profil
Re : Un train de table
« Réponse #19 le: août 11, 2020, 12:09:25 pm »
Probablement une fausse détection d’un ILS. Il faut debouncer les ILS et antiparasiter le circuit: mettre des capas !
Cordialement,
Dominique

peyo

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : Un train de table
« Réponse #20 le: août 11, 2020, 12:15:41 pm »
euuu oui mais  on fait comment??

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3043
  • 100% Arduino et N
    • Voir le profil
Re : Un train de table
« Réponse #21 le: août 11, 2020, 01:27:11 pm »
Utilises la bibliothèque bounce2.

Cordialement,
Dominique

peyo

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : Un train de table
« Réponse #22 le: août 18, 2020, 10:52:33 pm »
Comme promis... ;)

peyo

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : Un train de table
« Réponse #23 le: août 18, 2020, 11:00:00 pm »
Et le fameux pont levant :

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3043
  • 100% Arduino et N
    • Voir le profil
Re : Un train de table
« Réponse #24 le: août 19, 2020, 09:14:07 am »
Bravo peyo,

C’est le mariage du train miniature (pas tant que ça) et des amoureux  :) ;) :D ;D :-*

C’est peut-être la porte ouverte à un nouveau job : animation ferroviaire de mariages, histoire de rentabiliser ton matériel  ;D ;D
« Modifié: août 19, 2020, 11:05:07 am par Dominique »
Cordialement,
Dominique

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Un train de table
« Réponse #25 le: août 19, 2020, 09:44:41 am »
Réalisation spectaculaire menée à son terme. Bravo !
Cordialement