Bonjour et merci de m'accueillir sur votre site. Je me présente, je m'appelle Patrick, je sois papy et je découvre depuis peu ce type de loisir ce qui veut dire que je ne connais absolument pas la programmation. , j'essaie mais cela n'a rien d'évident.
Mon problème est le suivant, j'essaie de monter un suiveur solaire pour poser sur le toit de mon camping car. Après avoir effectuer beaucoup de recherche, j'ai réussi, je pense à adapter le programme à mes besoins, mais j'ai épuisé mes ressources et suis bloqué quant à l'écriture des fins de courses.
A savoir que ces derniers sont posés pour couper l'alimentation du moteur DC horizontal (Est/Ouest). Il en sera de même pour l'élévation par la suite.
J'ai scrupuleusement suivi le déroulé sur le blog d'Eskimon (sur le bouton) mais rien à faire.
Pouvez vous me diriger ?
Vous remerciant d'avance
Patrick
[const int PinLdrEst = A0; // 4 LdRs capteurs de lumière
const int PinLdrOuest = A1;
const int PinLdrHauteur = A2;
const int PinLdrBas = A3; /////////////////
const int Ecart = 40;
// 2 moteurs horizontal Est/Ouest et vertical Haut/Bas
//Mot H
const int ENA = 10;
const int IN1 = 9;
const int IN2 = 8;
//Mot V
const int ENB = 5;
const int IN3 = 6;
const int IN4 = 7;
const int lumi = 900; // intensité lumineuse minimum
const int FDCE = 4; // Ajout fin de course Est pin 4
int etatBoutonEst; // variable qui enregistre l'etat du fin de course
void setup()
{
Serial.begin(9600); // lecture écran
pinMode(FDCE, INPUT_PULLUP); // Résistance PULLUP
pinMode(4,INPUT);
etatBoutonEst = LOW; // on initialise le fin de course comme fermé
pinMode(PinLdrEst,INPUT); // entrées / sorties Ldrs et moteurs
pinMode(PinLdrOuest,INPUT);
pinMode(PinLdrHauteur,INPUT);
pinMode(PinLdrBas,INPUT); //////////////////
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop()
{
int ValLdrEst = analogRead(PinLdrEst); // lire et calculer les valeurs
int ValLdrOuest = analogRead(PinLdrOuest);
int ValLdrHauteur = analogRead(PinLdrHauteur);
int ValLdrBas = analogRead(PinLdrBas); //////////////////
Serial.print(" H "); Serial.println(ValLdrHauteur);
Serial.print(" E "); Serial.println(ValLdrEst);
Serial.print(" O "); Serial.println(ValLdrOuest);
Serial.print(" B "); Serial.println(ValLdrBas);
int test = ValLdrEst + ValLdrOuest + ValLdrHauteur + ValLdrBas; // établit la luminosité ambiante
test = test / 4;
Serial.print(" test ");
Serial.print (test);
Serial.print(" ");
int Diff1 = ValLdrEst - ValLdrOuest;
Diff1 = abs(Diff1);
int Diff2 = ValLdrHauteur - ValLdrBas;
Diff2 = abs(Diff2);
if (test <= lumi || Diff1 <= Ecart || Diff2 <= Ecart)
{
digitalWrite(ENA, LOW); // les 2 Moteurs sont arrétés !
digitalWrite(ENB, LOW);
}
if (test >= lumi && ValLdrEst < ValLdrOuest && Diff1 > Ecart)
{
digitalWrite(IN1, LOW); // Moteur H tourne dans un sens
digitalWrite(IN2, HIGH);
analogWrite(ENA, 130);
Serial.println(" Est < Ouest");
}
else if (test >= lumi && ValLdrEst > ValLdrOuest && Diff1 > Ecart)
{
digitalWrite(IN1, HIGH); // Moteur H tourne dans l'autre sens
digitalWrite(IN2, LOW);
analogWrite(ENA, 130);
Serial.println(" Est > Ouest ");
}
// FIN DE COURSE EST
{
etatBoutonEst = digitalRead(FDCE); // rappel: pin 4
if(etatBoutonEst == LOW) . //teste si le fin de course a un niveau logique bas
{
digitalWrite(9, HIGH); //le fin de course est fermé, le moteur IN1 tourne
digitalWrite(8, HIGH); //le fin de course est fermé, le moteur IN2 tourne
}
else // teste si le fin de course a un niveau logique different de bas (donc haut)
{
digitalWrite(9, LOW); // le fin de course est ouvert, arret moteur IN1
digitalWrite(8, HIGH); // le fin de course est ouvert, arret moteur IN2
}
}
delay(100); // petite attente
}
// SENS vertical
if(test >= lumi && ValLdrHauteur < ValLdrBas && Diff2 > Ecart)
{
digitalWrite(IN3, LOW); // Moteur V tourne dans un sens
digitalWrite(IN4, HIGH);
analogWrite(ENB, 120);
Serial.println(" Hauteur < Bas");
}
else if (test >= lumi && ValLdrHauteur > ValLdrBas && Diff2 > Ecart)
{
digitalWrite(IN3, HIGH); // Moteur V tourne dans l'autre sens
digitalWrite(IN4, LOW);
analogWrite(ENB, 120);
Serial.println(" Hauteur > Bas ");
}
delay (3000000); // boucle en arrêt toute les 10 mm
}/code]