Gestion pont-H pour moteur CC

Revision:
2:980b46615b6e
Parent:
1:4dc14e8e5ff7
Child:
3:5181bcf1f0a6
--- a/yMOTOR.cpp	Sat Sep 12 19:17:55 2015 +0000
+++ b/yMOTOR.cpp	Sun Sep 13 11:07:45 2015 +0000
@@ -4,7 +4,7 @@
  /**
  * @file    yMOTOR.cpp
  * @brief   Class 'yMOTOR'
- * @version V0.2
+ * @version V0.4
  * @date    Sept-2015
  * @note    by Jean92 \n
  *          Controlleur pour Pont-H (MC33886)" \n
@@ -16,6 +16,7 @@
 /** Constructeur de la class yMOTOR */
 yMOTOR::yMOTOR(PinName pwm, PinName av, PinName ar):
                 _pwm(pwm), _av(av), _ar(ar) {
+     // herite de PWM et DO
      // init PWM
     _pwm.period(yPeriod_def);
     _pwm = 0.0;
@@ -23,6 +24,7 @@
     // moteur a l'arret
     _ar = 0;
     _av = 0;
+    this->m_run = 0;
 
     // memory of speed
     this->m_speed = 0.0;
@@ -30,17 +32,19 @@
 
 /** Traiter le changement de vitesse */
 void yMOTOR::Speed(float speed) {
-    if (abs(speed) < yDB_def) {     // stop motor
-        _ar = 0;
-        _av = 0;
-        _pwm = 0.0;
-        this->m_speed = 0.0;
-    }
-    else {
-        _av = (speed > yDB_def);
-        _ar = (speed < -yDB_def);
-        _pwm = abs(speed);
-        this->m_speed = speed;
+    if (this->m_run) {              // moteur running?
+        if (abs(speed) < yDB_def) {     // oui, consigne suffisante?
+            _ar = 0;                    // non, les 2 cdes à zéro
+            _av = 0;
+            _pwm = 0.0;                 // reset PWM
+            this->m_speed = 0.0;        // memoriser vitesse nulle
+        }
+        else {                          // oui, en dehors de la bande morte
+            _av = (speed > yDB_def);    // en avant
+            _ar = (speed < -yDB_def);   // ou en arriere
+            _pwm = abs(speed);          // a la vitesse demandée
+            this->m_speed = speed;      // memoire vitesse
+        }
     } 
 } 
 
@@ -52,18 +56,22 @@
 /** Marche/Arret request */
 void yMOTOR::MarArr(int mararr) {
     if (mararr == yMARCHE) {
-        Speed(this->m_speed);
+        Speed(this->m_speed);   // appliquer la vitesse demandée
+        this->m_run = 1;        // memoriser l'état
     }
     else if (mararr == yARRET) {
-        _ar = 0;
-        _av = 0;
-        this->m_speed = 0.0;
+        _ar = 0;                // mettre les 2 cdes a zero
+        _av = 0;                // ==> arret rotation
+        this->m_run = 0;        // memoriser l'état
+                                // sans changer memoire vitesse
     }
 }
 
 /** Etat marche (running state) */
 bool yMOTOR::Run() {
-    return (abs(this->m_speed) > yDB_def);
+    //return (abs(this->m_speed) > yDB_def);
+    //return (_av != _ar);        //Marche si av et ar non nul
+    return this->m_run;     // repondre de mémoire!
 }
 
 /** Vitesse effective */