bonjour
j'ai trouvé la solution pour la mise en tuile des volets à l'aide d'une boucle
do {.actions.} while (conditions) :
la séquence est:
1 fermeture jusqu'à butée
2 ouverture pendant 3 secondes qui correspond à l'ouverture en tuile des battants.
ci dessous la vidéo de simulation avec Proteus.
ci dessous le code:
/* INITIALISATION DES BROCHES*/
// Association des entrées du L298N, aux sorties utilisées sur notre Arduino Uno //
#define borneENA 12 // j'associe la borne "ENA" du L298N à la pin D10 de l'arduino
#define borneENB 13 // j'associe la borne "ENB" du L298N à la pin D5 de l'arduino
#define borneIN1 8 // j'associe la borne "IN1" du L298N à la pin D9 de l'arduino
#define borneIN2 7 // j'associe la borne "IN2" du L298N à la pin D8 de l'arduino
#define borneIN3 6 // j'associe la borne "IN3" du L298N à la pin D7 de l'arduino
#define borneIN4 5 // j'associe la borne "IN4" du L298N à la pin D6 de l'arduino
/****************************Affectation des entrées boutons de commande et sortiess LED **************************/
int bp_ouverture = 2;
int bp_fermeture = 3;
int bp_arret = 4;
int bp_tuile = A2;
int led_ouv = 9 ;
int led_fer = 10 ;
int led_stop = 11;
int led_tuile = A3;
int led_intens = A4;
/* **************************variables de stockage des valeurs lues sur les broches analogiques***************************************/
float val_A0 = 0;
float val_A1 = 0;
/* *******************************variables de stockage des résultat de la conversion des précédentes valeurs en tension***************************************/
float U_A0 = 0;
float U_A1 = 0;
/*****************************************************************************************************************************************************************/
/* SETUP */
/*******************************************************************************************************************************************************************/
void setup()
/***************4 premier pinMode pour les boutons poussoir en entrée avec activation de la résistance de Pullup interne.*/
/*******************************la résistance de Pullup interne sert à éviter de mettre une résistance sur le circuit imprime*/
{
pinMode(bp_ouverture, INPUT_PULLUP);
pinMode(bp_fermeture, INPUT_PULLUP);
pinMode(bp_arret, INPUT_PULLUP);
pinMode(bp_tuile, INPUT_PULLUP);
/*********** Configuration des pins de l'Arduino en "sortie" (car elles attaquent les entrées du module L298N et les led)*************/
pinMode(borneENA, OUTPUT);
pinMode(borneENB, OUTPUT);
pinMode(borneIN1, OUTPUT);
pinMode(borneIN2, OUTPUT);
pinMode(borneIN3, OUTPUT);
pinMode(borneIN4, OUTPUT);
pinMode (led_ouv, OUTPUT);
pinMode (led_fer, OUTPUT);
pinMode (led_stop, OUTPUT);
pinMode (led_tuile, OUTPUT);
pinMode (led_intens, OUTPUT);
//cette ligne sert seulement pour développement afin de visualiser avec les moniteurs connectés Arduino et sur Poteus 8.0//
// sur les sorties tx et rx / 0 et 1 //
Serial.begin(9600);
}
//****************************************************************************************************************************************************************/
/************************************************** Boucle principale : LOOP qui appèle les sous fonctions ********************************************************/
void loop()
{
if (digitalRead(bp_tuile) == LOW) /****ordre de mise en tuile******/
{
tuile();
delay(500);
stop();
ouverture1();
Serial.println("ouverture pendant 3 sec");
delay(3000); /* temps d'ouverture "3 secondes" qui determine l'angle d'ouverture en tuile*/
stop();
}
else if (digitalRead (bp_ouverture) == LOW) /****ordre ouverture******/
{
delay(500);stop();
Serial.println();
Serial.println("commade ouverture");
digitalWrite(led_ouv, HIGH);
ouverture1(); //appel fonction ouverture
intens();
}
else if (digitalRead (bp_fermeture) == LOW) /****ordre fermeture******/
{
stop();
Serial.println();
Serial.println("commade fermeture");
digitalWrite(led_fer, HIGH);
delay(500);
fermeture1();
intens();
}
else if (digitalRead (bp_arret) == LOW) /****ordre Stop******/
{
Serial.println();
Serial.println("commade stop");
digitalWrite(led_stop, HIGH);
delay(500);
stop();
}
else /*>>>>>>>>>>>>>>>>>>>> verifier les sur-intensité et eteindre les led*/
{
intens();
digitalWrite(led_stop, LOW);
digitalWrite( led_fer, LOW);
digitalWrite(led_ouv, LOW);
digitalWrite(led_tuile, LOW);
}
}
/***************************************************************************************************************************************************************************/
/****************************Sous Fonctions : ouverture1, fermeture1, mise en tuile, stopA, stopB, stop total, detection intensité ****************************************/
/******************************************** Macro ouverture************************************************************************/
void ouverture1()
{
/***********************************Configuration du L298N en "ouverture", pour les moteurs. Selon sa table de vérité, il faut que :*/
digitalWrite(borneIN1, HIGH); // L'entrée IN1 doit être au niveau haut
digitalWrite(borneIN2, LOW); // L'entrée IN2 doit être au niveau bas
digitalWrite(borneIN3, HIGH); // L'entrée IN3 doit être au niveau haut
digitalWrite(borneIN4, LOW); // L'entrée IN4 doit être au niveau bas
digitalWrite(borneENA, HIGH); // Active l'alimentation du moteur 1
delay(500); // attend 0.5 secondes pour decaler les battants
digitalWrite(borneENB, HIGH); // Active l'alimentation du moteur 2
intens();
}
/******************************************** Macro fermeture************************************************************************/
void fermeture1()
{
// Configuration du L298N en "fermeture", pour les moteurs. Selon sa table de vérité, il faut que :
digitalWrite(borneIN1, LOW); // L'entrée IN1 doit être au niveau bas
digitalWrite(borneIN2, HIGH); // L'entrée IN2 doit être au niveau haut
digitalWrite(borneIN3, LOW); // L'entrée IN3 doit être au niveau bas
digitalWrite(borneIN4, HIGH); // L'entrée IN4 doit être au niveau haut
digitalWrite(borneENB, HIGH); // Active l'alimentation du moteur 2
delay(500); // attend 0.5 secondes pour decaler les battants
digitalWrite(borneENA, HIGH); // Active l'alimentation du moteur 1
intens();
}
/******************************************** Macro arret moteur 1************************************************************************/
void stop_A ()
{
digitalWrite(borneENA, LOW); // desactive l'alimentation du moteur 1
digitalWrite(borneIN1, LOW); // L'entrée IN1 au niveau bas
digitalWrite(borneIN2, LOW); // L'entrée IN2 au niveau bas
}
/******************************************** Macro arret moteur 2************************************************************************/
void stop_B ()
{
digitalWrite(borneENB, LOW); // desactive l'alimentation du moteur 2
digitalWrite(borneIN3, LOW); // L'entrée IN3 au niveau bas
digitalWrite(borneIN4, LOW); // L'entrée IN4 au niveau bas
}
/******************************************** Macro stop total************************************************************************/
void stop ()
{
digitalWrite(borneIN1, LOW); // L'entrée IN1 au niveau bas
digitalWrite(borneIN2, LOW); // L'entrée IN2 au niveau bas
digitalWrite(borneIN3, LOW); // L'entrée IN3 au niveau bas
digitalWrite(borneIN4, LOW); // L'entrée au niveau bas
digitalWrite(borneENA, LOW); // desactive l'alimentation du moteur 1
digitalWrite(borneENB, LOW); // desactive l'alimentation du moteur 2
digitalWrite(led_stop, LOW); // eteind le led_stop
digitalWrite( led_fer, LOW); // eteind le led_fer
digitalWrite(led_ouv, LOW); // eteind le led_ouv
digitalWrite(led_tuile, LOW); // eteind le led_tuile
}
/******************************************** Macro de mise en tuile************************************************************************/
void tuile()
{
Serial.println("tuile");
Serial.println();
Serial.println("fermeture jusqu'a butee avant mis en tuile");
stop();
digitalWrite(led_tuile, HIGH);
delay(500);
fermeture1();
/******************* boucle de détection de fermeture complète****do {instruction} While (condition)********************/
do
{
intens();
digitalRead (borneENA);
digitalRead (borneENB);
}
while ((digitalRead (borneENA) != LOW)||(digitalRead (borneENB) != LOW));
delay(500);
}
/******************************************** Macro de détection intensité fin de course ********************************************************/
void intens()
{
/********** lecture des valeurs d'intensite des moteur******/
val_A0 = analogRead(A0);
val_A1 = analogRead(A1);
/*********conversion en tension ds valeurs lues*********/
U_A0 = ((val_A0 * 5.0) / 1024);
U_A1 = ((val_A1 * 5.0) / 1024);
if (U_A0 > 2)
{
Serial.println ("fin de course_A");
Serial.println();
digitalWrite(borneENA, LOW);
digitalWrite(borneIN1, LOW);
digitalWrite(borneIN2, LOW);
}
if (U_A1 > 2)
{
Serial.println ("fin de course B");
Serial.println();
digitalWrite(borneENB, LOW);
digitalWrite(borneIN3, LOW);
digitalWrite(borneIN4, LOW);
digitalWrite(led_intens, HIGH);
}
}