Programme de contrôle de l'octopode 4DOF, Theraphosa-Salconi.

Dependencies:   debug mbed

CtrlBridge

  • fonction quelquonque pour communiquer avec les module
  • fonction quelquonque pour faire des recherche dans les module dispo
  • autre fonction pour jouer avec MemRegistre

Version 1.2.0

  • Ajout d'un mode de simulation pour tester le code avec seulement un contrôleur stm32
Revision:
14:ca1a9230ba7f
Parent:
10:7e6aeaebe1a2
Child:
18:3f113f8441b2
--- a/source/MemRegistre.cpp	Fri Mar 20 20:33:35 2015 +0000
+++ b/source/MemRegistre.cpp	Mon Mar 23 22:41:31 2015 +0000
@@ -13,8 +13,6 @@
 */
 #include "MemRegistre.h"
 
-
-
 MemRegistre::MemRegistre()
 {
     m_positionActioneur = m_moduleActioneur.begin();
@@ -25,27 +23,77 @@
 {
 }
 
-unsigned char MemRegistre::getAdressDispo()
+unsigned char MemRegistre::getAdressDispo(const unsigned char &startValue)
 {
-    list<Module>::iterator it1;
-    unsigned char addrDispo=1;
+    //list<Module>::iterator it1;
+    unsigned char addrDispo=(startValue==0)?1:startValue;
 
     //Module templateModule;
-    for(bool addrFind=true; (addrDispo!=0)&&(!addrFind); addrDispo++) {
-
-        for (list<Module>::iterator it=m_moduleActioneur.begin(); it != m_moduleActioneur.end(); ++it)
-            if(it->regA == addrDispo) addrFind = false;
+    for(bool addrFind=false; (addrDispo!=0)&&(!addrFind); addrDispo++) {
+        /* addrFind=true;
+         for (list<Module>::iterator it=m_moduleActioneur.begin(); it != m_moduleActioneur.end(); ++it)
+             if(it->regA == addrDispo) addrFind = false;
 
-        for (std::list<Module>::iterator it=m_moduleCapteur.begin(); it != m_moduleCapteur.end(); ++it)
-            if(it->regA == addrDispo) addrFind = false;
+         for (std::list<Module>::iterator it=m_moduleCapteur.begin(); it != m_moduleCapteur.end(); ++it)
+             if(it->regA == addrDispo) addrFind = false;
 
-        for (std::list<Module>::iterator it=m_moduleMemoire.begin(); it != m_moduleMemoire.end(); ++it)
-            if(it->regA == addrDispo) addrFind = false;
+         for (std::list<Module>::iterator it=m_moduleMemoire.begin(); it != m_moduleMemoire.end(); ++it)
+             if(it->regA == addrDispo) addrFind = false;*/
+        addrFind = !isAdresseValide(addrDispo);
 
         if((addrDispo==255) && (!addrFind))addrDispo=0; //les 255 adresses son utiliser // bravo le robot doit etre under heavy load.
     }
+
     return addrDispo;
 }
+bool MemRegistre::isAdresseValide(const char &adresse, Module &m )
+{
+    list<Module>::iterator it1;
+    bool addrFind=false;
+    //Module templateModule;
+    //for(unsigned char addrDispo=1; (addrDispo!=0)&&(!addrFind); addrDispo++) {
+
+    for (list<Module>::iterator it=m_moduleActioneur.begin(); it != m_moduleActioneur.end(); ++it) {
+        if(it->regA == adresse) {
+            addrFind = true;
+            m.regA=it->regA;
+            m.regB=it->regB;
+            m.regC=it->regC;
+            m.regD=it->regD;
+        }
+    }
+
+    for (std::list<Module>::iterator it=m_moduleCapteur.begin(); it != m_moduleCapteur.end(); ++it) {
+        if(it->regA == adresse) {
+            addrFind = true;
+            m.regA=it->regA;
+            m.regB=it->regB;
+            m.regC=it->regC;
+            m.regD=it->regD;
+        }
+    }
+
+    for (std::list<Module>::iterator it=m_moduleMemoire.begin(); it != m_moduleMemoire.end(); ++it) {
+        if(it->regA == adresse) {
+            addrFind = true;
+            m.regA=it->regA;
+            m.regB=it->regB;
+            m.regC=it->regC;
+            m.regD=it->regD;
+        }
+    }
+
+    // if((addrDispo==255) && (!addrFind))addrDispo=0; //les 255 adresses son utiliser // bravo le robot doit etre under heavy load.
+    //  }
+
+    return addrFind;
+}
+bool MemRegistre::isAdresseValide(const char &adresse)
+{
+    Module dummy;
+    return isAdresseValide(adresse,dummy);
+}
+
 Module MemRegistre::firstActioneur(void)
 {
     m_positionActioneur =m_moduleActioneur.begin();