Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Le_Pont_V10015 by
Gemma.cpp
00001 //****************************************************************** 00002 // 00003 // Gemma 00004 // 00005 // Logiciel de gestion des modes de marche et d'arret du Pont Bacalan 00006 // 00007 // 00008 // 00009 //******************************************************************** 00010 00011 #include "Gemma.h" 00012 00013 Serial PC3(USBTX, USBRX) ; 00014 // Chronomètre 00015 Timer Chrono_Param ; 00016 AnalogOut Consigne_aout (p18) ; 00017 00018 U8 No_Parametre ; 00019 S16 *pParametres_Console_RG ; 00020 S16 *pParametres_Console_RD ; 00021 00022 void vGemma_Init () 00023 { 00024 Chrono_Param.start () ; 00025 pParametres_Console_RG = &Param_Version_RG ; 00026 pParametres_Console_RD = &Param_Version_RD ; 00027 No_Parametre = 0 ; 00028 Consigne_aout.write ( 0.0 ) ; 00029 } 00030 00031 void vGemma ( Pilote* pRive_Droite , Pilote* pRive_Gauche ) 00032 { 00033 // Fonctionnement des differents modes 00034 PC3.printf("\r\n Mode: %i", Mode_Fonctionnement) ; 00035 if ( Mode_Fonctionnement == MODE_MANUEL ) 00036 // En mode manuel, pas d'action maintenue, les 2 rives sont indépendantes 00037 { 00038 //Raz des parametres de synchronisation 00039 vSynchro_Initialise ( ) ; 00040 00041 if ( BTN_Monte_RD ) 00042 {// Montée rive droite 00043 if ( ( Hauteur_RD - Hauteur_RG ) < Defaut_Critique_Synchro ) 00044 { 00045 PC3.printf("\t Monte RD") ; 00046 pRive_Droite->Marche ( MODE_MANUEL, MONTE, Hauteur_maxi , Consigne_Vitesse_Manu ) ; 00047 } 00048 BTN_Descend_RD = 0 ; 00049 } 00050 else if ( BTN_Descend_RD ) 00051 {// Descente rive droite 00052 if ( ( Hauteur_RG - Hauteur_RD ) < Defaut_Critique_Synchro ) 00053 { 00054 PC3.printf("\t Descend RD") ; 00055 pRive_Droite->Marche ( MODE_MANUEL, DESCEND, Hauteur_mini , Consigne_Vitesse_Manu ) ; 00056 } 00057 BTN_Monte_RD = 0 ; 00058 } 00059 else 00060 {// Arrêt rive droite 00061 pRive_Droite->Arret() ; 00062 BTN_Descend_RD = 0 ; 00063 BTN_Monte_RD = 0 ; 00064 //PC3.printf("\r\n Arret RD") ; 00065 } 00066 if ( BTN_Monte_RG ) 00067 {// Montée rive gauche 00068 if ( ( Hauteur_RG - Hauteur_RD ) < Defaut_Critique_Synchro ) 00069 { 00070 PC3.printf("\t Monte RG") ; 00071 pRive_Gauche->Marche ( MODE_MANUEL, MONTE, Hauteur_maxi , Consigne_Vitesse_Manu ) ; 00072 Consigne_aout.write ( (F32) Consigne_Vitesse_Manu / V_MAX ) ; 00073 } 00074 BTN_Descend_RG = 0 ; 00075 } 00076 else if ( BTN_Descend_RG ) 00077 {// Descente rive gauche 00078 if ( ( Hauteur_RD - Hauteur_RG ) < Defaut_Critique_Synchro ) 00079 { 00080 PC3.printf("\t Descend RG") ; 00081 pRive_Gauche->Marche ( MODE_MANUEL, DESCEND, Hauteur_mini , Consigne_Vitesse_Manu ) ; 00082 Consigne_aout.write ( (F32) Consigne_Vitesse_Manu / V_MAX ) ; 00083 } 00084 BTN_Monte_RG = 0 ; 00085 } 00086 else 00087 {// Arret rive gauche 00088 pRive_Gauche->Arret() ; 00089 BTN_Monte_RG = 0 ; 00090 BTN_Descend_RG = 0 ; 00091 Consigne_aout.write ( 0.0 ) ; 00092 //PC3.printf("\r\n Arret RG") ; 00093 } 00094 if ( BTN_Frein ) 00095 {// Liberation des freins 00096 if ( !BTN_Monte_RG && !BTN_Descend_RG && !!BTN_Monte_RD && !BTN_Descend_RD ) 00097 { 00098 if (pRive_Gauche->Etat_Frein == SERRE ) pRive_Gauche->Frein( DESSERRE ) ; 00099 if (pRive_Droite->Etat_Frein == SERRE ) pRive_Droite->Frein( DESSERRE ) ; 00100 } 00101 } 00102 else 00103 {// Serrage des freins 00104 if ( !BTN_Monte_RG && !BTN_Descend_RG && !!BTN_Monte_RD && !BTN_Descend_RD ) 00105 { 00106 if (pRive_Gauche->Etat_Frein == DESSERRE ) pRive_Gauche->Frein( SERRE ) ; 00107 if (pRive_Droite->Etat_Frein == DESSERRE ) pRive_Droite->Frein( SERRE ) ; 00108 } 00109 } 00110 } 00111 00112 else if ( Mode_Fonctionnement == MODE_AUTOMATIQUE ) 00113 {// En mode automatique, les rives sont synchronisées, avec consigne de vitesse et hauteur cible 00114 if ( BTN_Arret ) 00115 {// Arret du pont 00116 BTN_Monte = 0 ; 00117 BTN_Descend = 0 ; 00118 BTN_Arret = 0 ; 00119 pRive_Droite->Arret() ; 00120 pRive_Gauche->Arret() ; 00121 Consigne_aout.write ( 0.0 ) ; 00122 00123 vSynchro_Initialise ( ) ; 00124 00125 //PC3.printf("\r\n Btn Arret") ; 00126 } 00127 else 00128 {// Vérification de l'ecart de synchronisation: différence de hauteur entre droite et gauche 00129 if ( abs( Hauteur_RD - Hauteur_RG ) > Defaut_Critique_Synchro ) 00130 {// Si l'ecart depasse le seuil critique: on arrete tout! 00131 BTN_Arret = 0 ; 00132 BTN_Descend = 0 ; 00133 BTN_Monte = 0 ; 00134 pRive_Droite->Arret() ; 00135 pRive_Gauche->Arret() ; 00136 Consigne_aout.write ( 0.0 ) ; 00137 PC3.printf("\r\n Defaut Critique") ; 00138 } 00139 else if ( BTN_Monte ) 00140 {// Si on est en haut 00141 if ( ( Hauteur_P >= Consigne_Haute_P ) 00142 ||( Hauteur_RD >= Consigne_Haute_P ) 00143 ||( Hauteur_RG >= Consigne_Haute_P ) ) 00144 { 00145 BTN_Monte = 0 ; 00146 pRive_Droite->Arret() ; 00147 pRive_Gauche->Arret() ; 00148 PC3.printf("\r\n En Haut") ; 00149 } 00150 else 00151 {// Montée 00152 PC3.printf("\t Monte Auto mode: %i", Mode_Synchro) ; 00153 vSynchronise ( Mode_Synchro , MONTE ) ; 00154 pRive_Droite->Marche ( MODE_AUTOMATIQUE, MONTE, Consigne_Haute_P , Consigne_Vitesse_RD ) ; 00155 pRive_Gauche->Marche ( MODE_AUTOMATIQUE, MONTE, Consigne_Haute_P , Consigne_Vitesse_RG ) ; 00156 Consigne_aout.write ( (F32) Consigne_Vitesse_RG / V_MAX ) ; 00157 } 00158 00159 BTN_Arret = 0 ; 00160 BTN_Descend = 0 ; 00161 } 00162 else if ( BTN_Descend ) 00163 { 00164 if ( ( Hauteur_P <= Consigne_Basse_P ) 00165 ||( Hauteur_RD <= Consigne_Basse_P ) 00166 ||( Hauteur_RG <= Consigne_Basse_P ) ) 00167 {// Si on est en bas 00168 BTN_Descend = 0 ; 00169 pRive_Droite->Arret() ; 00170 pRive_Gauche->Arret() ; 00171 PC3.printf("\r\n En Bas") ; 00172 } 00173 else 00174 {// Descente du pont 00175 PC3.printf("\t Descend Auto") ; 00176 PC3.printf("\t Descend Auto mode: %i", Mode_Synchro) ; 00177 vSynchronise ( Mode_Synchro , DESCEND ) ; 00178 Consigne_Vitesse_RD = Consigne_Vitesse_Auto ; 00179 Consigne_Vitesse_RG = Consigne_Vitesse_Auto ; 00180 00181 pRive_Droite->Marche ( MODE_AUTOMATIQUE, DESCEND, Consigne_Basse_P , Consigne_Vitesse_RD ) ; 00182 pRive_Gauche->Marche ( MODE_AUTOMATIQUE, DESCEND, Consigne_Basse_P , Consigne_Vitesse_RG ) ; 00183 Consigne_aout.write ( (F32) Consigne_Vitesse_RG / V_MAX ) ; 00184 } 00185 00186 BTN_Arret = 0 ; 00187 BTN_Monte = 0 ; 00188 } 00189 00190 else 00191 { 00192 pRive_Droite->Arret() ; 00193 pRive_Gauche->Arret() ; 00194 Consigne_aout.write ( 0.0 ) ; 00195 } 00196 } 00197 } 00198 else if ( Mode_Fonctionnement == MODE_PARAMETRAGE ) 00199 {// En mode parametrage, 00200 //PC3.printf("\r\n No Param = %i " , No_Parametre) ; 00201 00202 if ( Chrono_Param.read_ms() > PERIODE_MAJ_PARAM ) 00203 { 00204 Chrono_Param.reset () ; 00205 // Vérifie si le dernier parametre lu est a jour 00206 if ( *(pParametres_Console_RG + No_Parametre ) != (S16) ( pRive_Gauche->Parametres_Vario_S32 [ No_Parametre ] ) ) 00207 {// Sinon, on l'écrit dans le variateur 00208 PC3.printf("\r\n No Param RG= %i - %i " , *(pParametres_Console_RG + No_Parametre ) , pRive_Gauche->Parametres_Vario_S32 [ No_Parametre ] ) ; 00209 pRive_Gauche->Configure ( No_Parametre , (S32) *(pParametres_Console_RG + No_Parametre ) ) ; 00210 } 00211 // Vérifie si le dernier parametre lu est a jour 00212 if ( *(pParametres_Console_RD + No_Parametre ) != (S16) ( pRive_Droite->Parametres_Vario_S32 [ No_Parametre ] ) ) 00213 {// Sinon, on l'écrit dans le variateur 00214 PC3.printf("\r\n No Param RD= %i - %i " , *(pParametres_Console_RD + No_Parametre ) , pRive_Droite->Parametres_Vario_S32 [ No_Parametre ] ) ; 00215 pRive_Droite->Configure ( No_Parametre , (S32) *(pParametres_Console_RD + No_Parametre ) ) ; 00216 } 00217 No_Parametre++ ; 00218 if ( No_Parametre >= NB_PARAM_VARIATEUR ) 00219 { 00220 No_Parametre = 0 ; 00221 } 00222 // Lecture du parametre suivant 00223 pRive_Gauche->Lecture ( No_Parametre ) ; 00224 pRive_Droite->Lecture ( No_Parametre ) ; 00225 00226 } 00227 00228 } 00229 else if ( Mode_Fonctionnement == MODE_ETALONNAGE ) 00230 {// Etalonnage 00231 if ( BTN_Etalonnage ) 00232 { 00233 pRive_Droite->Etalonnage (Hauteur_RD1_pts , Hauteur_RD1_mm , Hauteur_RD2_pts , Hauteur_RD2_mm ) ; 00234 pRive_Gauche->Etalonnage (Hauteur_RG1_pts , Hauteur_RG1_mm , Hauteur_RG2_pts , Hauteur_RG2_mm ) ; 00235 BTN_Etalonnage = 0 ; 00236 wait(0.1) ; 00237 } 00238 pRive_Droite->Arret() ; 00239 pRive_Gauche->Arret() ; 00240 } 00241 00242 else if ( Mode_Fonctionnement == MODE_ALIGNEMENT ) 00243 { 00244 if ( BTN_Aligne) 00245 {// Alignement des hauteurs de pile pour le mode automatique 00246 if ( abs( Hauteur_RD - Hauteur_RG ) < Defaut_Mineur_Synchro / 2 ) 00247 {// Si l'ecart de hauteur est faible, on arrête tout 00248 BTN_Aligne = 0 ; 00249 pRive_Droite->Arret() ; 00250 pRive_Gauche->Arret() ; 00251 PC3.printf("\r\n Aligne") ; 00252 } 00253 else if ( Hauteur_RD > Hauteur_RG ) 00254 {// La pile droite est plus haute 00255 if ( Hauteur_RD > Consigne_Basse_P ) 00256 {// On descend la pile droite 00257 Consigne_Vitesse_RD = Consigne_Vitesse_Manu ; 00258 pRive_Droite->Marche ( MODE_AUTOMATIQUE, DESCEND, Hauteur_RG , Consigne_Vitesse_RD ) ; 00259 } 00260 else 00261 { 00262 pRive_Droite->Arret() ; 00263 } 00264 if ( Hauteur_RG < Consigne_Haute_P ) 00265 {// On monte la pile gauche 00266 Consigne_Vitesse_RG = Consigne_Vitesse_Manu ; 00267 pRive_Gauche->Marche ( MODE_AUTOMATIQUE, MONTE, Hauteur_RD , Consigne_Vitesse_RG ) ; 00268 } 00269 else 00270 { 00271 pRive_Gauche->Arret() ; 00272 } 00273 } 00274 else if ( Hauteur_RD < Hauteur_RG ) 00275 {// La pile gauche est plus haute 00276 if ( Hauteur_RD < Consigne_Haute_P ) 00277 {// On monte la pile droite 00278 Consigne_Vitesse_RD = Consigne_Vitesse_Manu ; 00279 pRive_Droite->Marche ( MODE_AUTOMATIQUE, MONTE, Hauteur_RG , Consigne_Vitesse_RD ) ; 00280 } 00281 else 00282 { 00283 pRive_Droite->Arret() ; 00284 } 00285 if ( Hauteur_RG > Consigne_Basse_P ) 00286 {// On descend la pile gauche 00287 Consigne_Vitesse_RG = Consigne_Vitesse_Manu ; 00288 pRive_Gauche->Marche ( MODE_AUTOMATIQUE, DESCEND, Hauteur_RD , Consigne_Vitesse_RG ) ; 00289 00290 } 00291 else 00292 { 00293 pRive_Gauche->Arret() ; 00294 } 00295 } 00296 } 00297 else 00298 { 00299 pRive_Droite->Arret() ; 00300 pRive_Gauche->Arret() ; 00301 } 00302 } 00303 else 00304 // Si le mode est inconnu, mode arret! 00305 { 00306 Mode_Fonctionnement = MODE_ARRET ; 00307 pRive_Droite->Arret() ; 00308 pRive_Gauche->Arret() ; 00309 BTN_Arret = 1 ; 00310 BTN_Monte = 0 ; 00311 BTN_Descend = 0 ; 00312 Consigne_aout.write ( 0.0 ) ; 00313 PC3.printf("\r\n Mode Inconnu") ; 00314 } 00315 }
Generated on Tue Jul 12 2022 13:32:38 by
