Bonjour ,
Je recommence tout.
J'ai dans l'idée à presque 50 ans et sans aucune connaissance dans ce domaine d'automatiser ma porte de poulailler avec une carte UNO ,2 capteurs de fin de course(haut et bas) et une LDR.
Pour le moment ne sont connecté sur la breadboard que:
la carte UNO
les 2 capteurs
la LDR
j'utilise le code en pièce jointe
La phase d'initialisation se déroule sans pb
Ensuite j'ai un cycle d'ouverture par rapport à la LDR
Je déclenche bien mon capteur de position bas
Je déclenche bien la fermeture par rapprt à la LDR
Et ensuite plus rien
Je suit le programme avec le moniteur série
Donc si il y une âme charitable dans ce monde je veux bien un petit coup de main
Merci d'avance
Bonjour
Q'entendez-vous par indentiez le code (appuyez sur ctrl-T ou cmd-T) ce serait plus lisible.
J'ai bien essayé avec des balises mais message d'erreur me disant que message trop long .
Salut.
Je ne vois pas l'intérêt de mémoriser l'état des FDC.
Si l'un des FDC est à LOW cela veut dire que la porte est ouverte ou fermée. Si aucun des deux n'est à LOW il y a incertitude.
Aucun besoin de s'occuper du front montant ou descendant.
D'autre part fermer la porte au démarrage : pourquoi ?
S'il fait jour on ouvre, s'il fait nuit on ferme.
Je doute de la fiabilité des FDC. Il faut vraiment utiliser des modèles ILS pour que ce soit fiable. porte-motorisee-de-poulailler-1ere
Dans ce projet je n'utilise pas de FDC, j'insère une résistance de 1Ω entre le GND du LD293 et le GND de l'alimentation, et je mesure la tension aux bornes de la résistance, donc le courant.
int FinCHaut = 11;// entrée du fin de course HAUT. Une broche sur la masse l'autre sur l'arduino
int FinCBas = 12;// entrée du fin de course BAS. Une broche sur la masse l'autre sur l'arduino
int D2 = 2;//monté
int D3 = 3;//descente
//variable pour stocker la valeur lue après conversion
void setup()
{
// démarrage la liaison série entre entrée analogique et ordi
Serial.begin(9600);
//Déclaration des contacts fin de course en entrée avec utilisation de la fonction PULLUP interne
pinMode(12, INPUT_PULLUP); //Les Pull Up sont des résistances internes à l'arduino.
//Donc de base lorsque le boutton n'est pas appuyé on lit un état haut (5V = niveau logique 1)
pinMode(11, INPUT_PULLUP);
}
void loop()
{
int val;
val=analogRead(0);
//Valeur comprise entre 0 et 1024
//on affiche la valeur lue sur la liaison série
Serial.print("PhotoRLue = ");
Serial.println(val,DEC);//print the value to serial
delay(500);
if (val <520 && FinCBas == 1) //Condition : Detection de la nuit et la porte est ouverte
//Alors on ferme la porte
{
while(digitalRead(FinCBas) == 1){ //Tant que la porte n'est pas fermé, le moteur tourne
//Fermeture
digitalWrite(D2, LOW);
digitalWrite(D3, HIGH);
}
digitalWrite(D3, LOW); //On arrete le moteur car le contact fin de course est activé
}
if (val > 520 && FinCHaut == 1) //Condition : Detection du jour et la porte est fermée FinCHaut = 1 signifie le boutton fin de course haut n'est pas appuyé
{
while(digitalRead(FinCHaut) == 1){ //Tant que la porte n'est pas ouverte, le moteur tourne
//Fermeture
digitalWrite(D2, HIGH);
digitalWrite(D3, LOW);
}
digitalWrite(D2, LOW);
}
}
Mon vieux cerveau est en ébullition dans ce monde ,nouveau pour moi de la programmation.
Mais qui ne tente rien n'a rien
Du coup je repars de zéro avec ce nouveau code
int fin_de_course_haut = 3; // Capteur fin de course haut
int fin_de_course_bas = 2; /// Capteur fin de course bas
int MotorPin1 = 13; // Déclaration broche IN1 L298P
int MotorPin2 = 11; // Déclaration broche IN2 L298P
int LuminositePin = A0; // Déclaration broche LDR
int Luminosite = 0; // Variable de la luminosité
int Seuil_Jour = 550; // Variable de luminosité seuil pour le jour
int Seuil_Nuit = 400; // Variable de luminosité seuil pour la nuit
int Tempo_luminosite = 10000; // Temporisation luminosité 10 secondes = 10000ms
boolean porte_fermee = false; //Déclaration variable porte fermée
boolean porte_ouverte = false; //Déclaration variable porte ouverte
boolean fdch = false; // Déclaration variable Fin de Course Haut
boolean fdcb = false; // Déclaration variable Fin de Course Bas
boolean etat_bp_h = false, etat_bp_b = false; // Déclaration des variables bas et haut
boolean mem_h = false, mem_b = false, mem_fdch = false, mem_fdcb = false; // Déclaration des mémoires
boolean mem_mouvement = false; // Déclaration de la mémoire mouvement
boolean mem_lumiere = false; // Déclaration de la mémoire lumière
boolean mem_init = false; // Déclaration de la mémoire initialisation
boolean Detecte_lumiere = false; // Déclaration variable détection lumière
boolean Jour = true; // Déclaration variable Jour = 1 | Nuit = 0
boolean Initialisation = false; // Déclaration variable initialisation
// État d'activation de la tempo
boolean tempoActive = false;
// Temps à l'activation de la tempo
unsigned long tempoDepart = 0;
void setup() {
Serial.begin(9600);
pinMode(fin_de_course_haut, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée Fin de course haut
pinMode(fin_de_course_bas, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée Fin de course bas
pinMode(MotorPin1, OUTPUT); // Déclaration de la sortie A- Moteur
pinMode(MotorPin2, OUTPUT); // Déclaration de la sortie A+ Moteur
Lance_initialisation();
}
void Lance_initialisation() {
Fermeture_porte_Initialisation();
}
void loop() {
Luminosite = analogRead(LuminositePin);
if (Initialisation) {
if (Luminosite >= Seuil_Jour)
{ Serial.println("Il fait jour");
delay(5000);
Ouverture_de_la_porte();
}
if (Luminosite <= Seuil_Nuit)
{ Serial.println("Il fait nuit");
delay(5000);
Fermeture_de_la_porte();
}
}
}
void Fermeture_porte_Initialisation() {
delay(5000);
while (!fdcb) {
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
Serial.println("Initialisation Porte Fermée"); // Affichage sur le moniteur série du texte
fdcb = !digitalRead(fin_de_course_bas);
if (fdcb)
{
Serial.println("Porte fermée"); // Affichage sur le moniteur série du texte
Arret();
porte_fermee = true;
porte_ouverte = false;
Initialisation = true;
break;
}
}
}
void Fermeture_de_la_porte() {
while (!fdcb) {
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
Serial.println("Fermer la porte"); // Affichage sur le moniteur série du texte
fdcb = !digitalRead(fin_de_course_bas);
if (fdcb )
{
porte_fermee = true;
porte_ouverte = false;
Serial.println("Porte fermée"); // Affichage sur le moniteur série du texte
Arret();
break;
}
}
}
void Ouverture_de_la_porte() {
while (!fdch) {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
Serial.println("Ouverture de la porte"); // Affichage sur le moniteur série du texte
fdch = !digitalRead(fin_de_course_haut);
if (fdch )
{
porte_fermee = true;
porte_ouverte = false;
Serial.println("Porte ouverte"); // Affichage sur le moniteur série du texte
Arret();
break;
}
}
}
void Arret() {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
tempoActive = 0;
}
Nouveau programme nouveau problème
La phase d'initialisation de la porte se déroule comme il faut
La LDR détecte le jour
Le moteur tourne dans le sens pour ouvrir la porte
Mon fin de course haut arrête la rotation moteur
La LDR détecte la nuit
Et là plus rien
Vous parlez bien dans :
void ouverture de la porte
void fermeture de la porte
int fin_de_course_haut = 3; // Capteur fin de course haut
int fin_de_course_bas = 2; /// Capteur fin de course bas
int MotorPin1 = 13; // Déclaration broche IN1 L298P
int MotorPin2 = 11; // Déclaration broche IN2 L298P
int LuminositePin = A0; // Déclaration broche LDR
int Luminosite = 0; // Variable de la luminosité
int Seuil_Jour = 550; // Variable de luminosité seuil pour le jour
int Seuil_Nuit = 400; // Variable de luminosité seuil pour la nuit
int Tempo_luminosite = 10000; // Temporisation luminosité 10 secondes = 10000ms
boolean porte_fermee = false; //Déclaration variable porte fermée
boolean porte_ouverte = false; //Déclaration variable porte ouverte
boolean fdch = false; // Déclaration variable Fin de Course Haut
boolean fdcb = false; // Déclaration variable Fin de Course Bas
boolean etat_bp_h = false, etat_bp_b = false; // Déclaration des variables bas et haut
boolean mem_h = false, mem_b = false, mem_fdch = false, mem_fdcb = false; // Déclaration des mémoires
boolean mem_mouvement = false; // Déclaration de la mémoire mouvement
boolean mem_lumiere = false; // Déclaration de la mémoire lumière
boolean mem_init = false; // Déclaration de la mémoire initialisation
boolean Detecte_lumiere = false; // Déclaration variable détection lumière
boolean Jour = true; // Déclaration variable Jour = 1 | Nuit = 0
boolean Initialisation = false; // Déclaration variable initialisation
// État d'activation de la tempo
boolean tempoActive = false;
// Temps à l'activation de la tempo
unsigned long tempoDepart = 0;
void setup() {
Serial.begin(9600);
pinMode(fin_de_course_haut, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée Fin de course haut
pinMode(fin_de_course_bas, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée Fin de course bas
pinMode(MotorPin1, OUTPUT); // Déclaration de la sortie A- Moteur
pinMode(MotorPin2, OUTPUT); // Déclaration de la sortie A+ Moteur
Lance_initialisation();
}
void Lance_initialisation() {
Fermeture_porte_Initialisation();
}
void loop() {
Luminosite = analogRead(LuminositePin);
if (Initialisation) {
if (Luminosite >= Seuil_Jour )
{ Serial.println("Il fait jour");
delay(5000);
Ouverture_de_la_porte();
}
if (Luminosite <= Seuil_Nuit )
{ Serial.println("Il fait nuit");
delay(5000);
Fermeture_de_la_porte();
}
}
}
void Fermeture_porte_Initialisation() {
delay(5000);
while (!fdcb) {
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
Serial.println("Initialisation Porte Fermée"); // Affichage sur le moniteur série du texte
fdcb = !digitalRead(fin_de_course_bas);
if (fdcb)
{
Serial.println("Porte fermée"); // Affichage sur le moniteur série du texte
Arret();
porte_fermee = true;
porte_ouverte = false;
Initialisation = true;
break;
}
}
}
void Fermeture_de_la_porte() {
if (!digitalRead(fin_de_course_bas)) {
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
Serial.println("Fermer la porte"); // Affichage sur le moniteur série du texte
fdcb = !digitalRead(fin_de_course_bas);
if (fdcb )
{
porte_fermee = true;
porte_ouverte = false;
Serial.println("Porte fermée"); // Affichage sur le moniteur série du texte
Arret();
break;
}
}
}
void Ouverture_de_la_porte() {
if (!digitalRead(fin_de_course_haut) )
{
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
Serial.println("Ouverture de la porte"); // Affichage sur le moniteur série du texte
fdch = !digitalRead(fin_de_course_haut);
if (fdch )
{
porte_fermee = false;
porte_ouverte = true;
Serial.println("Porte ouverte"); // Affichage sur le moniteur série du texte
Arret();
break;
}
}
}
void Arret() {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
tempoActive = 0;
}
Parce ce que du coup maintenant erreur
Arduino : 1.8.12 (Linux), Carte : "Arduino Uno"
/home/tofies/Arduino/renouveaupoulailler/renouveaupoulailler.ino: In function 'void Fermeture_de_la_porte()':
renouveaupoulailler:104:7: error: break statement not within loop or switch
break;
^~~~~
/home/tofies/Arduino/renouveaupoulailler/renouveaupoulailler.ino: In function 'void Ouverture_de_la_porte()':
renouveaupoulailler:125:7: error: break statement not within loop or switch
break;
^~~~~
exit status 1
break statement not within loop or switch
Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.
Du coup maintenant c'est pire
Initialisation de la porte en position fermée -->OK
La LDR détecte le jour
Message "Il fait jour "
Et plus rien
int fin_de_course_haut = 3; // Capteur fin de course haut
int fin_de_course_bas = 2; /// Capteur fin de course bas
int MotorPin1 = 13; // Déclaration broche IN1 L298P
int MotorPin2 = 11; // Déclaration broche IN2 L298P
int LuminositePin = A0; // Déclaration broche LDR
int Luminosite = 0; // Variable de la luminosité
int Seuil_Jour = 550; // Variable de luminosité seuil pour le jour
int Seuil_Nuit = 400; // Variable de luminosité seuil pour la nuit
int Tempo_luminosite = 10000; // Temporisation luminosité 10 secondes = 10000ms
boolean porte_fermee = false; //Déclaration variable porte fermée
boolean porte_ouverte = false; //Déclaration variable porte ouverte
boolean fdch = false; // Déclaration variable Fin de Course Haut
boolean fdcb = false; // Déclaration variable Fin de Course Bas
boolean etat_bp_h = false, etat_bp_b = false; // Déclaration des variables bas et haut
boolean mem_h = false, mem_b = false, mem_fdch = false, mem_fdcb = false; // Déclaration des mémoires
boolean mem_mouvement = false; // Déclaration de la mémoire mouvement
boolean mem_lumiere = false; // Déclaration de la mémoire lumière
boolean mem_init = false; // Déclaration de la mémoire initialisation
boolean Detecte_lumiere = false; // Déclaration variable détection lumière
boolean Jour = true; // Déclaration variable Jour = 1 | Nuit = 0
boolean Initialisation = false; // Déclaration variable initialisation
// État d'activation de la tempo
boolean tempoActive = false;
// Temps à l'activation de la tempo
unsigned long tempoDepart = 0;
void setup() {
Serial.begin(9600);
pinMode(fin_de_course_haut, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée Fin de course haut
pinMode(fin_de_course_bas, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée Fin de course bas
pinMode(MotorPin1, OUTPUT); // Déclaration de la sortie A- Moteur
pinMode(MotorPin2, OUTPUT); // Déclaration de la sortie A+ Moteur
Lance_initialisation();
}
void Lance_initialisation() {
Fermeture_porte_Initialisation();
}
void loop() {
Luminosite = analogRead(LuminositePin);
if (Initialisation) {
if (Luminosite >= Seuil_Jour )
{ Serial.println("Il fait jour");
delay(5000);
Ouverture_de_la_porte();
}
if (Luminosite <= Seuil_Nuit )
{ Serial.println("Il fait nuit");
delay(5000);
Fermeture_de_la_porte();
}
}
}
void Fermeture_porte_Initialisation() {
delay(5000);
while (!fdcb) {
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
Serial.println("Initialisation Porte Fermée"); // Affichage sur le moniteur série du texte
fdcb = !digitalRead(fin_de_course_bas);
if (fdcb)
{
Serial.println("Porte fermée"); // Affichage sur le moniteur série du texte
Arret();
porte_fermee = true;
porte_ouverte = false;
Initialisation = true;
break;
}
}
}
void Fermeture_de_la_porte() {
while (!digitalRead(fin_de_course_bas)) {
if (!digitalRead(fin_de_course_bas)) {
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
Serial.println("Fermer la porte"); // Affichage sur le moniteur série du texte
fdcb = !digitalRead(fin_de_course_bas);
if (fdcb )
{
porte_fermee = true;
porte_ouverte = false;
Serial.println("Porte fermée"); // Affichage sur le moniteur série du texte
Arret();
break;
}
}
}
}
void Ouverture_de_la_porte() {
while (!digitalRead(fin_de_course_haut)) {
if (digitalRead(fin_de_course_haut)) {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
Serial.println("Ouverture de la porte"); // Affichage sur le moniteur série du texte
fdch = !digitalRead(fin_de_course_haut);
if (fdch )
{
porte_fermee = false;
porte_ouverte = true;
Serial.println("Porte ouverte"); // Affichage sur le moniteur série du texte
Arret();
break;
}
}
}
}
void Arret() {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
tempoActive = 0;
}
Ok pour void fermeture de la porte et void ouverture de la porte
Mais void fermeture porte initialisation fonctionne correctement
Je vais essayer tout de même
Du coup je sors l'initialisation de la porte au démarrage
int fin_de_course_haut = 3; // Capteur fin de course haut
int fin_de_course_bas = 2; /// Capteur fin de course bas
int MotorPin1 = 13; // Déclaration broche IN1 L298P
int MotorPin2 = 11; // Déclaration broche IN2 L298P
int LuminositePin = A0; // Déclaration broche LDR
int Luminosite = 0; // Variable de la luminosité
int Seuil_Jour = 550; // Variable de luminosité seuil pour le jour
int Seuil_Nuit = 400; // Variable de luminosité seuil pour la nuit
int Tempo_luminosite = 10000; // Temporisation luminosité 10 secondes = 10000ms
boolean porte_fermee = false; //Déclaration variable porte fermée
boolean porte_ouverte = false; //Déclaration variable porte ouverte
boolean fdch = false; // Déclaration variable Fin de Course Haut
boolean fdcb = false; // Déclaration variable Fin de Course Bas
boolean etat_bp_h = false, etat_bp_b = false; // Déclaration des variables bas et haut
boolean mem_h = false, mem_b = false, mem_fdch = false, mem_fdcb = false; // Déclaration des mémoires
boolean mem_mouvement = false; // Déclaration de la mémoire mouvement
boolean mem_lumiere = false; // Déclaration de la mémoire lumière
boolean mem_init = false; // Déclaration de la mémoire initialisation
boolean Detecte_lumiere = false; // Déclaration variable détection lumière
boolean Jour = true; // Déclaration variable Jour = 1 | Nuit = 0
boolean Initialisation = false; // Déclaration variable initialisation
// État d'activation de la tempo
boolean tempoActive = false;
// Temps à l'activation de la tempo
unsigned long tempoDepart = 0;
void setup() {
Serial.begin(9600);
pinMode(fin_de_course_haut, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée Fin de course haut
pinMode(fin_de_course_bas, INPUT_PULLUP); // Déclaration entrée pull-up sur entrée Fin de course bas
pinMode(MotorPin1, OUTPUT); // Déclaration de la sortie A- Moteur
pinMode(MotorPin2, OUTPUT); // Déclaration de la sortie A+ Moteur
}
void loop() {
Luminosite = analogRead(LuminositePin);
Serial.println(Luminosite);
if (Luminosite >= Seuil_Jour )
{ Serial.println("Il fait jour");
delay(5000);
Ouverture_de_la_porte();
}
if (Luminosite <= Seuil_Nuit )
{ Serial.println("Il fait nuit");
delay(5000);
Fermeture_de_la_porte();
}
}
void Fermeture_de_la_porte() {
while (!digitalRead(fin_de_course_bas) == 0) {
if (digitalRead(fin_de_course_bas) == 0) {
digitalWrite(MotorPin1, HIGH);
digitalWrite(MotorPin2, HIGH);
Serial.println("Fermer la porte"); // Affichage sur le moniteur série du texte
fdcb = !digitalRead(fin_de_course_bas);
if (fdcb )
{
porte_fermee = true;
porte_ouverte = false;
Serial.println("Porte fermée"); // Affichage sur le moniteur série du texte
Arret();
break;
}
}
}
}
void Ouverture_de_la_porte() {
while (!digitalRead(fin_de_course_haut) == 0) {
if (digitalRead(fin_de_course_haut) == 0) {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, HIGH);
Serial.println("Ouverture de la porte"); // Affichage sur le moniteur série du texte
fdch = !digitalRead(fin_de_course_haut);
if (fdch )
{
porte_fermee = false;
porte_ouverte = true;
Serial.println("Porte ouverte"); // Affichage sur le moniteur série du texte
Arret();
break;
}
}
}
}
void Arret() {
digitalWrite(MotorPin1, LOW);
digitalWrite(MotorPin2, LOW);
tempoActive = 0;
}
J'affiche la valeur dela LDR soit 955
J'affiche 955
Et plus rien