1
Présentez vous ! / Bonjour a tous
« le: mars 24, 2020, 09:59:03 pm »
je suis tombé par hasard sur votre forum. il m'arrive fréquemment de faire de la programmation Arduino pour gérer des trains. Mon père est un amis son passionné. ils m'ont demandé de crée un programme pour gérer x servo programmer avec x bouton et x scénario.
le programme a l'air de fonctionner avec deux servo parce que j'en ai que deux et plusieurs scénario et quand il l'a piqué sur leur gare ça ne fonctionne pas correctement. je vous laisse le programme en PJ je n'ai pas utiliser la librairie servo pour pouvoir les faire fonctionner tous en même temps. merci d'avance pour le coup de main. de plus ça peut intéresser quelqu'un et c'est gratuit.
le programme a l'air de fonctionner avec deux servo parce que j'en ai que deux et plusieurs scénario et quand il l'a piqué sur leur gare ça ne fonctionne pas correctement. je vous laisse le programme en PJ je n'ai pas utiliser la librairie servo pour pouvoir les faire fonctionner tous en même temps. merci d'avance pour le coup de main. de plus ça peut intéresser quelqu'un et c'est gratuit.
Code: [Sélectionner]
//------------------------------------------------------------------- -------------------------------------------------------------------
int Aiguillage = 0;
int Senario = 0;
//------------------------------------------------------------------- -------------------------------------------------------------------
const int PinInBouton [] = {8, 9, 10, 11}; // declaration constante de broche
const int PinOutServo [] = {2, 3}; // declaration constante de broche
const int PinOutLed [] = {22, 23, 4, 5}; // declaration constante de broche
//------------------------------------------------------------------- -------------------------------------------------------------------
const int NbrSenario = (sizeof (PinInBouton) / sizeof (PinInBouton[0])); // le Nbr. de Senario = Nbr. de Bouton
const int NbrAiguillage = (sizeof (PinOutServo) / sizeof (PinOutServo[0]));
int SenarioActif [NbrSenario] [NbrAiguillage] = { 0 };
boolean EtatOutLed [NbrSenario] = { LOW };
const int SenarioInitial = 0; // Senario a activé aprés demarrage 0 pour le premier
//------------------------------------------------------------------- -------------------------------------------------------------------
const int ProgSenario [NbrSenario] [NbrAiguillage] = { {1, 2},
{2, 1},
{0, 1},
{0, 2} }; // 1 pour Voie A - 2 pour Voie B - 0 pour Rien faire
//------------------------------------------------------------------- -------------------------------------------------------------------
int AngleVoieA [NbrAiguillage] = {105, 105}; // La valeur de l'angle est entre 0° et 179°
int AngleVoieB [NbrAiguillage] = {65, 65}; // La valeur de l'angle est entre 0° et 179°
int AngleActuel [NbrAiguillage] = {90, 90};
//------------------------------------------------------------------- -------------------------------------------------------------------
int TempsClignotementLed = 150;
unsigned long MillisClignotementLed [NbrSenario] = { millis() };
int TempsAiguillage = 50;
unsigned long MillisAiguillage [NbrAiguillage] = { millis() };
//------------------------------------------------------------------- -------------------------------------------------------------------
void setup()
{
Serial.begin(115200);
for (Aiguillage = 0 ; Aiguillage < NbrAiguillage ; Aiguillage++) // On initialise les servo
{
pinMode(PinOutServo [Aiguillage], OUTPUT); // met la broche en sortie
}
for (Senario = 0 ; Senario < NbrSenario ; Senario++)
{
pinMode(PinOutLed [Senario], OUTPUT);
pinMode(PinInBouton [Senario], INPUT_PULLUP);
digitalWrite(PinOutLed [Senario], EtatOutLed [Senario]);
MillisAiguillage [Senario] = millis();
}
for (int I = 0 ; I < NbrAiguillage ; I++)
{
SenarioActif [SenarioInitial] [I] = 1;
}
Serial.print("Nbr Aiguillage : ");
Serial.print(NbrAiguillage);
Serial.print(" Nbr Senario : ");
Serial.println(NbrSenario);
for (Senario = 0 ; Senario < NbrSenario ; Senario++)
{
for (Aiguillage = 0 ; Aiguillage < NbrAiguillage ; Aiguillage++)
{
Serial.print(" S ");
Serial.print(Senario);
Serial.print(" A ");
Serial.print(Aiguillage);
Serial.print(" SenarioActif ");
Serial.print(SenarioActif[Senario][Aiguillage]);
Serial.print(" ProgSenario ");
Serial.print(ProgSenario[Senario][Aiguillage]);
}
Serial.println();
}
Serial.println(" Debut ");
}
//------------------------------------------------------------------- -------------------------------------------------------------------
void loop()
{
for (Senario = 0 ; Senario < NbrSenario ; Senario++)
{
for (Aiguillage = 0 ; Aiguillage < NbrAiguillage ; Aiguillage++)
{
ClignotementLed ();
SenarioMouvementServo ();
ActionBouton ();
}
}
}
//------------------------------------------------------------------- -------------------------------------------------------------------
void ClignotementLed ()
{
if (SenarioActif [Senario] [Aiguillage] == 1 and (millis() - MillisClignotementLed [Senario] >= TempsClignotementLed))
{
digitalWrite(PinOutLed [Senario] , !digitalRead(PinOutLed [Senario]));
MillisClignotementLed [Senario] = millis();
}
}
//------------------------------------------------------------------- -------------------------------------------------------------------
void ActionBouton ()
{
if (digitalRead(PinInBouton [Senario]) == HIGH)
{
for (int I = 0 ; I < NbrAiguillage ; I++)
{
SenarioActif [Senario] [I] = 1;
}
if (Senario&1)
{
for (int I = 0 ; I < NbrAiguillage ; I++)
{
SenarioActif [(Senario - 1)] [I] = 0;
}
digitalWrite(PinOutLed [(Senario - 1)] , LOW);
}
else
{
for (int I = 0 ; I < NbrAiguillage ; I++)
{
SenarioActif [(Senario + 1)] [I] = 0;
}
digitalWrite(PinOutLed [(Senario + 1)] , LOW);
}
}
}
//------------------------------------------------------------------- -------------------------------------------------------------------
void SenarioMouvementServo ()
{
if (SenarioActif[Senario][Aiguillage] == 1 and ProgSenario[Senario][Aiguillage] != 0 and (millis() - MillisAiguillage[Aiguillage] >= TempsAiguillage))
{
Serial.print(" S ");
Serial.print(Senario);
Serial.print(" A ");
Serial.print(Aiguillage);
Serial.print(" = ");
Serial.print(ProgSenario[Senario][Aiguillage]);
if (ProgSenario[Senario][Aiguillage] == 1 and AngleActuel[Aiguillage] < AngleVoieA[Aiguillage])
{
Serial.print(" + ");
AngleActuel[Aiguillage] = AngleActuel[Aiguillage]+1;
digitalWrite(PinOutServo[Aiguillage], HIGH); //active le servomoteur
delayMicroseconds(((AngleActuel[Aiguillage]*10) + 600)); //pause en microseconde
digitalWrite(PinOutServo[Aiguillage], LOW); //désactive le servomoteur
}
else
{
Serial.print(" /+ ");
}
if (ProgSenario[Senario][Aiguillage] == 2 and AngleActuel[Aiguillage] > AngleVoieB[Aiguillage])
{
Serial.print(" - ");
AngleActuel[Aiguillage] = AngleActuel[Aiguillage]-1;
digitalWrite(PinOutServo[Aiguillage], HIGH); //active le servomoteur
delayMicroseconds(((AngleActuel[Aiguillage]*10) + 600)); //pause en microseconde
digitalWrite(PinOutServo[Aiguillage], LOW); //désactive le servomoteur
}
else
{
Serial.print(" /- ");
}
if ((ProgSenario[Senario] [Aiguillage] == 1 and AngleActuel[Aiguillage] == AngleVoieA[Aiguillage]) or (ProgSenario[Senario] [Aiguillage] == 2 and AngleActuel[Aiguillage] == AngleVoieB[Aiguillage]))
{
Serial.println(" ° ");
for (int I = 0 ; I < NbrAiguillage ; I++)
{
SenarioActif [Senario] [I] = 0;
}
digitalWrite(PinOutLed [Senario] , HIGH);
}
else
{
Serial.print(" /° ");
}
MillisAiguillage [Aiguillage] = millis();
}
}
//------------------------------------------------------------------- -------------------------------------------------------------------