Files
Arduino/MOTOR_SHIELD_SOLAIRE/MOTOR_SHIELD_SOLAIRE.ino
Jérôme Delacotte 7b30d6e298 first commit
2025-03-06 11:15:32 +01:00

123 lines
3.1 KiB
C++

#include <Motorshield.h>
#include <Wire.h>
motorshield MotorShield;
signed long sommePhoto1, sommePhoto2; // Somme de plusieurs valeurs des photoresistances
signed int valPhoto1, valPhoto2; // Valeur analogique des photoresistances
signed int nbrVal = 20; // Nombre de mesures sur les photorésistances
float intervalleRecupVal = 0.100; // Temps entre deux lecture des photoresistances en secondes
char pinPhoto1 = A2; // Pin photoresistance1
char pinPhoto2 = A3; // Pin photoresistance2
unsigned char ecart = 15; // Ecart requis pour des prises de valeurs
bool nuit = 0; // Passe à 1 quand les valeurs des photoresistances sont trop basses
void setup()
{
MotorShield.initialize();
Serial.begin(9600);
}
void loop()
{
// Récupère valeurs sur les ports analogiques
valPhoto1 = analogRead(pinPhoto1);
valPhoto2 = analogRead(pinPhoto2);
if (not(nuit))
{
Rotation();
}
Nuit();
Serial.print("\n");
Serial.print(valPhoto1);
Serial.print("\t");
Serial.print(valPhoto2);
}
// Rotation du moteur en fonction des valeurs des photoresistances
void Rotation()
{
if( ((valPhoto1 - valPhoto2) > ecart) || ((valPhoto1 - valPhoto2) < -ecart) )
{
sommePhoto1 = 0;
sommePhoto2 = 0;
// Moyenne d'un nombre défini de valeurs
for(int i=0; i<nbrVal; i++)
{
sommePhoto1 += analogRead(pinPhoto1);
sommePhoto2 += analogRead(pinPhoto2);
Serial.print("somme1 : ");
Serial.print(sommePhoto1);
Serial.print("\tsomme2 : ");
Serial.println(sommePhoto2);
delay(intervalleRecupVal * 1000);
}
// lumière sur Photo1 donc Photo1 >> Photo2
if( ((sommePhoto1 - sommePhoto2) > (ecart * nbrVal)) )
{
//while( (analogRead(pinPhoto1)- ecart) > analogRead(pinPhoto2) )
while( analogRead(pinPhoto1) > analogRead(pinPhoto2) )
{
MotorShield.setMotorDir(1, 0);
MotorShield.setMotorSpeed(1, 20);
}
MotorShield.setMotorSpeed(1, 0);
}
// lumière sur Photo1 donc Photo1 << Photo2
else if( ((sommePhoto1 - sommePhoto2) < (-ecart * nbrVal)) )
{
//while( ((analogRead(pinPhoto1)+ ecart) < analogRead(pinPhoto2)) )
while( (analogRead(pinPhoto1) < analogRead(pinPhoto2)) )
{
MotorShield.setMotorDir(1, 1);
MotorShield.setMotorSpeed(1, 20);
}
MotorShield.setMotorSpeed(1, 0);
}
}
}
void Nuit()
{
if( (valPhoto1 <= 0) && (valPhoto2 <= 0) )
{
if (not(nuit))
{
sommePhoto1 = 0;
sommePhoto2 = 0;
for(int i=0; i<100; i++)
{
sommePhoto1 += analogRead(pinPhoto1);
sommePhoto2 += analogRead(pinPhoto2);
Serial.print("somme1 : ");
Serial.print(sommePhoto1);
Serial.print("\tsomme2 : ");
Serial.println(sommePhoto2);
delay(intervalleRecupVal * 1000);
}
if( (sommePhoto1 < 100) && (sommePhoto2 < 100) )
{
nuit = 1;
MotorShield.setMotorDir(1, 0);
MotorShield.setMotorSpeed(1, 20);
delay(5000);
MotorShield.setMotorSpeed(1, 0);
}
}
}
else if ((valPhoto1 >= 3) || (valPhoto2 >= 3))
nuit = 0;
}