1
Présentez vous ! / Re : Bonjour a tous
« le: mars 30, 2020, 12:15:13 am »
j'ai trouvé mon erreur mes boucles For ont l'a même variable i. Merci à vous.
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.
//------------------------------------------------------------------- -------------------------------------------------------------------
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();
}
}
//------------------------------------------------------------------- -------------------------------------------------------------------