123 lines
3.1 KiB
C++
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;
|
|
}
|