#include #include 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> 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; }