Re: Un tableau de commande géré par arduino
Posté : 22 avr. 2021, 04:44
Programme bien écrit et optimisé.
Tu vas pouvoir me donner des cours.
Tu vas pouvoir me donner des cours.
Le forum des passionnés de trains miniature, de petites autos etc etc
https://forum-passionnement.fr/phpbb/
Tu as raison il ne faut pas s'abrutir....Donc, pour le moment, repos pour les neurones
Code : Tout sélectionner
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * Commande aiguillage passerelle * * * * *
* * * * * Commande les aiguillages RP 09 et RP 10 * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Programme opérationnel
* Deux servo
* Une entrée numérique commande les servo deux par deux
* entree : changement d'état par impulsion
1 2
------O------------O------ BP 1 2 3 4 5
/
3 O 0 1 1 0 1 1
/ 1 0 1 1 1 0
-----O------------O------
4 5
Led 2 et 4 permanent
Led 1 et 5 communes Sortie D8 Entrée analogique : BP A2
Led 3 Sortie D9
*/
#include <Servo.h>
const byte pinServo1 = 2; // Servo commandant l'aiguillage RP 09
const byte pinServo2 = 3; // Servo commandant l'aiguillage RP 10
const byte pinEntree = 5;
const byte Led1et5 = 6;
const byte Led3 = 7;
boolean Poussoir = LOW ;
//******************* Configuration des mouvements servo selon plan de voie **************
boolean Inverse = false ; // false Indique que le sens de rotation des 2 servo est le même
// true si le sens de rotation est inverse .
// Commutation par interrupteur sur D9
const byte pinInter = 9;
//**********************************************************************************************
int MiniMax1[2] = {600,900} ;
int MiniMax2[2] = {600,900} ;
int vitesse[2] = {-1,1} ;
Servo monServo1;
int Avance1;
int angle1;
int angleFinal1;
boolean Sens1;
Servo monServo2;
int Avance2;
int angle2;
int angleFinal2;
boolean Sens2;
boolean Mvt1;
boolean Mvt2;
boolean Mvt;
void setup()
{
pinMode (Led1et5, OUTPUT);
pinMode (Led3, OUTPUT);
pinMode (pinEntree, INPUT);
pinMode (pinInter, INPUT);
monServo1.attach(pinServo1);
monServo1.writeMicroseconds(750);
delay(500);
angle1 = 750;
Sens1 = false;
Mvt1 = true;
Avance1 = vitesse[Sens1]; angleFinal1 = MiniMax1[Sens1];
monServo2.attach(pinServo2);
monServo2.writeMicroseconds(750);
delay(500);
angle2 = 750;
Sens2 = Sens1^Inverse ;
Mvt2 = true;
Avance2 = vitesse[Sens2]; angleFinal2 = MiniMax2[Sens2];
Mvt = Mvt1 || Mvt2 ;
}
void loop()
{
if(Mvt) { }
else { Poussoir = digitalRead(pinEntree);
Inverse = digitalRead(pinInter);
if (Poussoir )
{
Sens1 = !Sens1;
Sens2 = Sens1^Inverse ;
}
monServo1.attach(pinServo1);
Mvt1 = true;
Avance1 = vitesse[Sens1]; angleFinal1 = MiniMax1[Sens1];
monServo2.attach(pinServo2);
Mvt2 = true;
Avance2 = vitesse[Sens2]; angleFinal2 = MiniMax2[Sens2];
}
if (angle1 == angleFinal1)
{
Avance1 = 0;
monServo1.detach();
Mvt1 = false;
}
else {
angle1 = angle1 + Avance1;
monServo1.writeMicroseconds(angle1);
}
if (angle2 == angleFinal2)
{
Avance2 = 0;
monServo2.detach();
Mvt2 = false;
}
else {
angle2 = angle2 + Avance2;
monServo2.writeMicroseconds(angle2);
}
Mvt = Mvt1 || Mvt2 ;
if(Mvt){ digitalWrite (Led1et5, LOW);
digitalWrite (Led3, LOW);
}
else { digitalWrite (Led1et5, !Sens1);
digitalWrite (Led3, Sens1);
}
delay(6);
}