1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| #include <Servo.h>
//------------------------------------- Numérotation des servo
#define servoNombre 3
//enum servosIndex {servo1, servo2, servo3, btnHome, btnGo, btnNombre};
const int servosPin[] = {9, 10, 11}; // Pin PWM
Servo Servo[servoNombre]; // Création des servo, en tableau
int servosAngle[servoNombre]; // Mémoire des angles
//------------------------------------- Numérotation des boutons
#define boutonsNombre servoNombre * 2 // 2 boutons par servo
// Mise en tableau les pin des boutons
int const boutonsPin[] = {3, 4, 5, 6, 7, 8};
const int boutonEtatPresse = LOW; // Etat lu d'un bouton pressé
int angleAvance = 5; // De combien de degrés on avance chaque fois
int angleChangeTempo = 100; // Donne le rythme de changement
const int anglePositionDepart = 90;
void setup() {
Serial.begin(9600);
delay(500);
//--------------------------------- Initialisation des servos
Serial.println("\nInitialisation des servos");
for (int s = 0; s < servoNombre; s ++)
{
Servo[s].attach(servosPin[s]);
servosAngle[s] = anglePositionDepart; // Tout les servos en position de départ
servoPositionChange(s, 0);
}
Serial.println("");
//--------------------------------- Initialisation des boutons
for (int b = 0; b < boutonsNombre; b ++)
{
pinMode(boutonsPin[b], INPUT_PULLUP); // Résistances interne donc boutons "contre" GND
}
}
void loop() {
for (int s = 0; s < servoNombre; s ++) // Lecture de tout les boutons
{
if(digitalRead(boutonsPin[s*2]) == boutonEtatPresse) // Si bouton sens CW est pressé
{
servoPositionChange(s, -angleAvance);
}
if(digitalRead(boutonsPin[(s*2) +1]) == boutonEtatPresse) // Si bouton sens CCW est pressé
{
servoPositionChange(s, angleAvance);
}
}
delay(angleChangeTempo);
}
/*---------------------------------------------------------------------------------------
Calcule et contrôle de la nouvelle position
déplacement du servo
'*---------------------------------------------------------------------------------------
*/
void servoPositionChange(int servoIndex, int positionIncrement)
{
servosAngle[servoIndex] += positionIncrement;
servosAngle[servoIndex] = constrain(servosAngle[servoIndex], 0, 180); //https://www.arduino.cc/reference/en/language/functions/math/constrain/
Servo[servoIndex].write(servosAngle[servoIndex]);
Serial.println("Servo " + String(servoIndex +1) + "\tangle\t" + String(servosAngle[servoIndex]));
} |
Partager