//B. Vandeportaele 09/2020 //L. Villa 10/2020 //Todo gestion du temps pour que l'asservissement ait des paramètres fixes/ contenu du programme #include #include //adresses codées sur 7bits #define SLAVE_ADDR_8574_A 0x38+6 #define SLAVE_ADDR_8574_B 0x38+7 AF_DCMotor motor(1,MOTOR12_1KHZ);//, MOTOR12_8KHZ); int led = 13; //numéro de la broche Arduino pilotant la LED sur le shield PERIPH ////////////////////////////////////////// char readPort8574(char addr, char * ptr_value) /*addr, l'adresse du PCF8574 ptr_value, pointeur pour renvoyer la valeur lue sur le port retourne -1 si échec 0 sinon*/ { Wire.requestFrom((byte)addr, (byte)1);// demande la lecture d'1 octet depuis l'adresse du pérpiphérique if (Wire.available()==1) //si l'octet est disponible { (* ptr_value) = Wire.read(); // lire l'octet return 0; } else { (* ptr_value) =0; //valeur par défaut si le composant n'a pas acquité return -1; } } ////////////////////////////////////////// char writePort8574(char addr, char value) /*addr, l'adresse du PCF8574 value, la valeur à écrire sur le port retourne -1 si échec 0 sinon */ { Wire.beginTransmission(addr);//démarre la transmission avec l'adresse du pérpiphérique Wire.write((byte)value); //envoie la donnée if (Wire.endTransmission()==0) //stoppe la transmission return 0; else return -1; } ////////////////////////////////////////// //unité en milliseconde uint32_t cadence_it=3; uint32_t time_next_it=0; void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); Serial.begin(115200); // start serial port at 9600 bps: Wire.begin(); // joindre le bus i2c en tant que maître writePort8574( SLAVE_ADDR_8574_B , 0xff); //configure le composant B en entrée writePort8574(SLAVE_ADDR_8574_A,0); //allume les leds delay(1000); writePort8574(SLAVE_ADDR_8574_A,~0); //eteind les leds } void loop() { controleur(); } void controleur() { byte consigne_vitesse; // une variable pour récupérer la valeur de la vitesse readPort8574(SLAVE_ADDR_8574_B,&consigne_vitesse); // contrôle de la valeur de la vitesse writePort8574(SLAVE_ADDR_8574_A,~consigne_vitesse); // affichage de la valeur de la vitesse Serial.println(consigne_vitesse); // affichage de la valeur de la vitesse motor.setSpeed(consigne_vitesse); // passage de la valeur de la vitesse à la variable motor.run(FORWARD); // choix du sense : avant delay(1000); motor.run(RELEASE); // choix du sense : lâcher l'axe delay(1000); motor.run(BACKWARD); // choix du sense : arrière delay(1000); motor.run(RELEASE); // choix du sense : lâcher l'axe delay(1000); }