Motor
tools
tools/Motor.h
tool
stable
stable
Tool: Motor Gestion d'un moteur GA12-N20 piloté DIRECTEMENT par un pont en H (2 broches de direction IN1/IN2 + 1 broche PWM d'activation EN). Fonctionnalités : (ex: L293D) partagé entre plusieurs moteurs, préférer la classe
Méthodes publiques
| Méthode | Description | Paramètres | Retour |
|---|---|---|---|
|
Motor()
Motor();
|
Constructeur / Destructeur Initialise l'objet Motor. Le destructeur coupe le moteur (roue libre) afin d'éviter qu'il continue de tourner après la destruction de l'objet. / | ||
|
Motor()
Motor();
|
Constructeur / Destructeur Initialise l'objet Motor. Le destructeur coupe le moteur (roue libre) afin d'éviter qu'il continue de tourner après la destruction de l'objet. / | ||
|
begin()
begin(uint8_t pinIn1, uint8_t pinIn2, uint8_t pinEn);
|
Initialisation Configure les broches du moteur et le met à l'arrêt. / | pinIn1: Broche IN1 (sens) pinIn2: Broche IN2 (sens) pinEn: Broche Enable / PWM (vitesse) / |
|
|
setSpeed()
setSpeed(int8_t speed);
|
Commande de vitesse Définit la vitesse et le sens du moteur. La valeur est automatiquement bornée (constrain). speed == 0 équivaut à un appel à stop(). / | speed: Vitesse de -100 (arrière max) à 100 (avant max). La valeur est automatiquement bornée (constrain). speed == 0 équivaut à un appel à stop(). / | |
|
stop()
stop();
|
Arrêt roue libre Coupe l'alimentation du moteur (IN1=IN2=LOW, PWM=0). Le moteur peut continuer à tourner librement par inertie. / | ||
|
brake()
brake();
|
Freinage actif Court-circuite les deux bornes du moteur (IN1=IN2=HIGH, PWM=max) afin de le ralentir plus rapidement qu'un simple stop(). / | ||
|
readSpeed()
readSpeed(int8_t& speed) const;
|
Lecture de la vitesse Récupère la vitesse actuellement appliquée. / | speed: Référence pour stocker la valeur actuelle / | |
|
getSpeed()
getSpeed() const {
|
Vitesse actuellement appliquée (-100 à 100). / | ||
|
getDirection()
getDirection() const;
|
Sens de rotation courant déduit de la vitesse appliquée. / | ||
|
isInitialized()
isInitialized() const {
|
Indique si begin() a déjà été appelé avec succès. / | ||
|
getStatus()
getStatus() const {
|
Méthodes privées
begin(115200);;
begin(MOTOR_IN1, MOTOR_IN2, MOTOR_EN);;
setSpeed(80);;
delay(2000);;
brake();;
delay(500);;
setSpeed(-50);;
delay(2000);;
stop();;
delay(1000);;
Variables membres
return _currentSpeed;
return _initialized;
return _status;
uint8_t _pinIn1;
uint8_t _pinIn2;
uint8_t _pinEn;
int8_t _currentSpeed;
Code source
#pragma once
#include <Arduino.h>
#include "../StatusDevice.h"
namespace crepp::tools {
/**
* @brief Sens / état de rotation d'un moteur piloté par pont en H.
*/
enum class MotorDirection : uint8_t {
FORWARD = 0, ///< Rotation avant (vitesse > 0)
BACKWARD = 1, ///< Rotation arrière (vitesse < 0)
STOPPED = 2, ///< Moteur coupé, roue libre (vitesse == 0)
BRAKING = 3 ///< Freinage actif (bobines court-circuitées)
};
/*
* =========================
* Tool: Motor
* -------------------------
* Gestion d'un moteur GA12-N20 piloté DIRECTEMENT par un pont en H
* (2 broches de direction IN1/IN2 + 1 broche PWM d'activation EN).
*
* @badge tool
* @badge stable
*
* Fonctionnalités :
* - Pilotage de la vitesse et du sens (-100 à 100)
* - Arrêt "roue libre" (stop) et freinage actif (brake)
* - Lecture de la vitesse actuelle et du sens de rotation
* - Suivi de l'état d'initialisation via StatusDevice
*
* @note Pour piloter un moteur au travers d'un circuit driver dédié
* (ex: L293D) partagé entre plusieurs moteurs, préférer la classe
* crepp::tools::Motor_Driver associée à crepp::drivers::L293D_Handler.
* =========================
*/
class Motor {
public:
/*
* =========================
* Constructeur / Destructeur
* -------------------------
* Initialise l'objet Motor. Le destructeur coupe le moteur
* (roue libre) afin d'éviter qu'il continue de tourner après
* la destruction de l'objet.
*/
Motor();
~Motor();
/*
* =========================
* Initialisation
* -------------------------
* Configure les broches du moteur et le met à l'arrêt.
* @param pinIn1 Broche IN1 (sens)
* @param pinIn2 Broche IN2 (sens)
* @param pinEn Broche Enable / PWM (vitesse)
*/
void begin(uint8_t pinIn1, uint8_t pinIn2, uint8_t pinEn);
/*
* =========================
* Commande de vitesse
* -------------------------
* Définit la vitesse et le sens du moteur.
* @param speed Vitesse de -100 (arrière max) à 100 (avant max).
* La valeur est automatiquement bornée (constrain).
* speed == 0 équivaut à un appel à stop().
*/
void setSpeed(int8_t speed);
/*
* =========================
* Arrêt roue libre
* -------------------------
* Coupe l'alimentation du moteur (IN1=IN2=LOW, PWM=0).
* Le moteur peut continuer à tourner librement par inertie.
*/
void stop();
/*
* =========================
* Freinage actif
* -------------------------
* Court-circuite les deux bornes du moteur (IN1=IN2=HIGH, PWM=max)
* afin de le ralentir plus rapidement qu'un simple stop().
*/
void brake();
/*
* =========================
* Lecture de la vitesse
* -------------------------
* Récupère la vitesse actuellement appliquée.
* @param speed Référence pour stocker la valeur actuelle
*/
void readSpeed(int8_t& speed) const;
/**
* @brief Vitesse actuellement appliquée (-100 à 100).
*/
int8_t getSpeed() const { return _currentSpeed; }
/**
* @brief Sens de rotation courant déduit de la vitesse appliquée.
*/
MotorDirection getDirection() const;
/**
* @brief Indique si begin() a déjà été appelé avec succès.
*/
bool isInitialized() const { return _initialized; }
StatusDevice getStatus() const { return _status; }
private:
uint8_t _pinIn1; ///< Broche IN1 du moteur
uint8_t _pinIn2; ///< Broche IN2 du moteur
uint8_t _pinEn; ///< Broche Enable du moteur
int8_t _currentSpeed; ///< Vitesse actuelle du moteur
bool _initialized = false; ///< true une fois begin() appelé
StatusDevice _status = StatusDevice::DEVICE_ERROR_INIT;
};
/*
@example
@include
#include <crepp/tools/Motor.h>
@end_include
@macro
#define MOTOR_IN1 6
#define MOTOR_IN2 7
#define MOTOR_EN 8
@end_macro
@instance
crepp::tools::Motor motor;
@end_instance
@setup
Serial.begin(115200);
motor.begin(MOTOR_IN1, MOTOR_IN2, MOTOR_EN);
@end_setup
@loop
motor.setSpeed(80); // marche avant à 80%
delay(2000);
motor.brake(); // freinage actif
delay(500);
motor.setSpeed(-50); // marche arrière à 50%
delay(2000);
motor.stop(); // roue libre
delay(1000);
@end_loop
@end_example
*/
} // namespace crepp::tools