1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| // Trackeur solaire - ChristianCabannes
int PinLdrEst = A0; // 3 LdRs capteurs de lumière
int PinLdrOuest = A1;
int PinLdrHauteur = A2;
int PinLdrBas = A3;
int Ecart = 5;
// 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;
void setup()
{
Serial.begin(9600); // lecture écran
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(" E "); Serial.println(ValLdrEst);
Serial.print(" O "); Serial.println(ValLdrOuest);
Serial.print(" H "); Serial.println(ValLdrHauteur);
Serial.print(" B "); Serial.println(ValLdrBas);
int Diff1 = ValLdrEst - ValLdrOuest;
Diff1 = abs(Diff1);
int Diff2 = ValLdrHauteur - ValLdrBas;
Diff2 = abs(Diff2);
if ( Diff1 <= Ecart || Diff2 <= Ecart)
{
digitalWrite(ENA, LOW); // les 2 Moteurs sont arrétés !
digitalWrite(ENB, LOW);
}
else if (ValLdrEst < ValLdrOuest && Diff1 > Ecart)
{
digitalWrite(IN1, LOW); // Moteur H tourne dans un sens
digitalWrite(IN2, HIGH);
analogWrite(ENA, 250);
Serial.println(" Est < Ouest");
}
else if ( ValLdrEst > ValLdrOuest && Diff1 > Ecart)
{
digitalWrite(IN1, HIGH); // Moteur H tourne dans l'autre sens
digitalWrite(IN2, LOW);
analogWrite(ENA, 250);
Serial.println(" Est > Ouest ");
}
else if ( ValLdrHauteur < ValLdrBas && Diff2 > Ecart)
digitalWrite(IN1, LOW); // Moteur V tourne dans un sens
digitalWrite(IN2, HIGH);
analogWrite(ENA, 250);
Serial.println(" Hauteur < Bas");
}
else if ( ValLdrHauteur > ValLdrBas && Diff2 > Ecart)
{
digitalWrite(IN1, HIGH); // Moteur V tourne dans l'autre sens
digitalWrite(IN2, LOW);
analogWrite(ENA, 250);
Serial.println(" Hauteur > Bas ");
}
delay (1000);
} |
Partager