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 71 72 73 74 75 76 77 78 79
| /*
Name: ARDDEV_aiguillageFc51Nano.ino
Created: 11.02.2024
Author: jpbbricole
Remarque: Commande d'aiguillages par des capteurs IR FC-51
https://www.developpez.net/forums/d2161847/general-developpement/programmation-systeme/embarque/arduino/aiguillage-capteur-fc-51-a/
*/
#include <VarSpeedServo.h> // https://github.com/netlabtoolkit/VarSpeedServo
//------------------------------------- Caspteurs
const int captPin[] = {2, 3}; // Pin des capteurs
const int captEatOn = LOW; // Etat lu quand capteur actif
const int captNombre = sizeof(captPin) / sizeof(captPin[0]); // Nombre de capteurs
const unsigned long captOnTempo = 1000; // Temporisation des capteurs on
unsigned long captOnMillis[] = {0, 0}; // Temporisation des capteurs on, chrono
//------------------------------------- Servo
VarSpeedServo servoAig[captNombre]; // Creation des objets serevoAig
struct servoParamDef // Définition des servo
{
const int pin; // Pin de connexion du servo
int aigDroite; // Angle pour aiguille droite
int aigTourne; // Angle pour aiguille tourne
int speed; // Vitesse du servo
boolean wait; // Attente fin de mouvement du servo
};
servoParamDef servoAigParam[] = // Servo, paramètres
{
// Pin Aig Drite Aig Tourne Vitesse Attente
{ 6, 20, 120, 80, false},
{ 7, 20, 120, 80, false},
};
void setup()
{
Serial.begin(115200);
//--------------------------------- Initialisation Capteurs et servo
for (int c = 0; c < captNombre; c ++)
{
pinMode(captPin[c], INPUT_PULLUP); // Entrée active à 0
servoAig[c].attach(servoAigParam[c].pin); // Déémarrage du servo
servoAig[c].write(servoAigParam[c].aigDroite, servoAigParam[c].speed, servoAigParam[c].wait); // Aiguille droite au départ
}
}
void loop()
{
for (int c = 0; c < captNombre; c ++)
{
if (digitalRead(captPin[c]) == captEatOn) // Si le capteur est actif
{
if (captOnMillis[c] == 0)
{
servoAig[c].write(servoAigParam[c].aigTourne, servoAigParam[c].speed, servoAigParam[c].wait); // L'aiguille tourne
Serial.println("Aiguille " + String(c) + " tourne");
}
captOnMillis[c] = millis();
}
}
for (int c = 0; c < captNombre; c ++)
{
if (captOnMillis[c] != 0 && (millis() - captOnMillis[c] >= captOnTempo)) // Si temporisation du capteur terminée
{
servoAig[c].write(servoAigParam[c].aigDroite, servoAigParam[c].speed, servoAigParam[c].wait); // Aiguille droite
Serial.println("Aiguille " + String(c) + " droite");
captOnMillis[c] = 0; // Temporisation desactivée pour ce capteur
}
}
} |
Partager