#include #include #include //https://cdn.sparkfun.com/assets/learn_tutorials/3/2/1/Avago-APDS-9960-datasheet.pdf SparkFun_APDS9960 apds = SparkFun_APDS9960(); uint8_t proximity_data = 0; //The ENA, IN1 and IN2 terminals are connected to ports 10, 9 and 8. #define borneENA 10 #define borneIN1 9 #define borneIN2 8 #define delaiChangementVitesse 20 // This is the time it takes the motor to increase or decrease its speed by 1. #define vitesseMinimale 0 // Is the minimum speed of the engine #define vitesseMaximale 63 // Is the maximum speed of the motor. It can be set up to 255 which corresponds to 100% of its capacity. const char MARCHE_AVANT = 'V'; const char MARCHE_ARRIERE = 'R'; int vitesse; void setup() { pinMode(borneENA, OUTPUT); pinMode(borneIN1, OUTPUT); pinMode(borneIN2, OUTPUT); Serial.begin(9600); // We initialize the connection between the Arduino and the IDE in order to transmit the program. if ( apds.init() ) { //Configures I2C communications and initializes registers to default. Serial.println(F("APDS-9960 initialization complete")); } else { Serial.println(F("Something went wrong during APDS-9960 init!")); } if ( apds.enableProximitySensor(false) ) { // Starts the proximity sensor on a APDS-9960 Serial.println(F("Proximity sensor is now running")); } else { Serial.println(F("Something went wrong during sensor init!")); } if ( !apds.setProximityGain(PGAIN_2X) ) { // Set the receiver gain for proximity detection Value Gain 2x Serial.println(F("Something went wrong trying to set PGAIN")); } } void configurerSensDeRotationPontA(char sensDeRotation) { // Adds a new function for the direction of rotation. if(sensDeRotation == MARCHE_AVANT) { digitalWrite(borneIN1, HIGH); digitalWrite(borneIN2, LOW); } if(sensDeRotation == MARCHE_ARRIERE) { digitalWrite(borneIN1, LOW); digitalWrite(borneIN2, HIGH); } } void changeVitesseMoteurPontA(int nouvelleVitesse) { // Adds a new function for the speed. analogWrite(borneENA, nouvelleVitesse); //indicates the new speed at the ENA terminal. } void loop() { configurerSensDeRotationPontA(MARCHE_AVANT); // Instructs the motor to move in the forward direction. if ( !apds.readProximity(proximity_data) ) { //Allows you to retrieve data from the sensor. Serial.println("Error reading proximity value"); } else { Serial.print("Proximity: "); Serial.println(proximity_data); // } while (proximity_data <= 15 && vitesse<=vitesseMaximale ) // Loop that allows the conveyor to remain running as long as no object has passed the sensor. { if ( !apds.readProximity(proximity_data) ) { Serial.println("Error reading proximity value"); } else { Serial.print("Proximity: "); Serial.println(proximity_data); } Serial.println(vitesse); changeVitesseMoteurPontA(vitesse); delay(delaiChangementVitesse); if (vitesse < vitesseMaximale ){ vitesse++; // increases motor speed by 1. } Serial.println(proximity_data); } for(; vitesse>vitesseMinimale ; vitesse--) { //decreases the speed until it stops. changeVitesseMoteurPontA(vitesse); delay(delaiChangementVitesse); } delay(2000); //stays off for 2 seconds. }