Projet interfaçage DESCHAMPS JAHNICH 12/06/2018

Dependencies:   AX12 BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed

Committer:
jumpstars
Date:
Tue Jun 12 13:31:09 2018 +0000
Revision:
1:7c20e55d185e
Parent:
0:83911d619e5c
DESCHAMPS; JAHNICH; interfa?age

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jumpstars 0:83911d619e5c 1 /* Veuillez trouver ci-dessous le programme permettant de creer et d'intéragir avec une interface qui controle un moteur dynamixel AX-12A
jumpstars 0:83911d619e5c 2 * Vous trouverez 3 boutons : -un bouton init qui permet de placer le moteur à la position 0°
jumpstars 0:83911d619e5c 3 * -un bouton demi-tour qui permet de diminuer ou augmenter la position de 180°
jumpstars 0:83911d619e5c 4 * -un bouton quart de tour qui permet de diminuer ou augmenter la position de 90°
jumpstars 0:83911d619e5c 5 * Ainsi qu'un cercle tactile qui permet de selectionner 7 positions, tous les 45°.
jumpstars 0:83911d619e5c 6
jumpstars 0:83911d619e5c 7 * AUTEURS : Rémi JAHNICH Antoine DESCHAMPS Licence professionelle MECSE sesam1
jumpstars 0:83911d619e5c 8 */
jumpstars 0:83911d619e5c 9 #include "mbed.h"
jumpstars 0:83911d619e5c 10 #include "TS_DISCO_F746NG.h"
jumpstars 0:83911d619e5c 11 #include "LCD_DISCO_F746NG.h"
jumpstars 0:83911d619e5c 12 #include "AX12.h"
jumpstars 0:83911d619e5c 13
jumpstars 0:83911d619e5c 14 TS_DISCO_F746NG ts;
jumpstars 0:83911d619e5c 15 LCD_DISCO_F746NG lcd;
jumpstars 0:83911d619e5c 16 AX12 myax12 (D1, D0, 1); // definition des broches TX RX
jumpstars 0:83911d619e5c 17
jumpstars 0:83911d619e5c 18 int main() {
jumpstars 0:83911d619e5c 19 /////////// Initialisation des variables pour le LCD /////////////
jumpstars 0:83911d619e5c 20 TS_StateTypeDef TS_State;
jumpstars 0:83911d619e5c 21 uint16_t x, y;
jumpstars 0:83911d619e5c 22 uint8_t text[30];
jumpstars 0:83911d619e5c 23 uint8_t text2[30];
jumpstars 0:83911d619e5c 24 uint8_t text3[30];
jumpstars 0:83911d619e5c 25 uint8_t status;
jumpstars 0:83911d619e5c 26 uint8_t idx;
jumpstars 0:83911d619e5c 27 uint8_t cleared = 0;
jumpstars 0:83911d619e5c 28 uint8_t prev_nb_touches = 0;
jumpstars 0:83911d619e5c 29 //uint16_t x_cercle = 450;
jumpstars 0:83911d619e5c 30 //uint16_t y_cercle = 100;
jumpstars 0:83911d619e5c 31 //////// Initialisation des variables /////////
jumpstars 0:83911d619e5c 32 uint8_t demitour = 0;
jumpstars 0:83911d619e5c 33 uint8_t quarttour = 0;
jumpstars 0:83911d619e5c 34 uint8_t position = 1;
jumpstars 0:83911d619e5c 35 uint8_t old_position = 1;
jumpstars 0:83911d619e5c 36 uint8_t compteur;
jumpstars 0:83911d619e5c 37 uint8_t compteur2;
jumpstars 0:83911d619e5c 38 uint8_t compteur3;
jumpstars 0:83911d619e5c 39 uint16_t rot = 0; // valeur en degree pour le servo moteur
jumpstars 0:83911d619e5c 40 float temp;
jumpstars 0:83911d619e5c 41 float volt;
jumpstars 0:83911d619e5c 42 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"INTERFACE SERVOMOTEUR", CENTER_MODE); // Affichage du titre de l'interface
jumpstars 0:83911d619e5c 43 wait(1);
jumpstars 0:83911d619e5c 44 //////////// Initialisation de l'écran tactile avec retour fail/ok ////////////////
jumpstars 0:83911d619e5c 45 status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
jumpstars 0:83911d619e5c 46 if (status != TS_OK) {
jumpstars 0:83911d619e5c 47 lcd.Clear(LCD_COLOR_RED);
jumpstars 0:83911d619e5c 48 lcd.SetBackColor(LCD_COLOR_RED);
jumpstars 0:83911d619e5c 49 lcd.SetTextColor(LCD_COLOR_WHITE);
jumpstars 0:83911d619e5c 50 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
jumpstars 0:83911d619e5c 51 } else {
jumpstars 0:83911d619e5c 52 lcd.Clear(LCD_COLOR_GREEN);
jumpstars 0:83911d619e5c 53 lcd.SetBackColor(LCD_COLOR_GREEN);
jumpstars 0:83911d619e5c 54 lcd.SetTextColor(LCD_COLOR_WHITE);
jumpstars 0:83911d619e5c 55 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
jumpstars 0:83911d619e5c 56 }
jumpstars 0:83911d619e5c 57 wait(1);
jumpstars 0:83911d619e5c 58 lcd.Clear(LCD_COLOR_WHITE);
jumpstars 0:83911d619e5c 59
jumpstars 0:83911d619e5c 60 /////////// Boucle du programme /////////////
jumpstars 0:83911d619e5c 61
jumpstars 0:83911d619e5c 62 while(1)
jumpstars 0:83911d619e5c 63 {
jumpstars 0:83911d619e5c 64 myax12.SetGoal(rot); //Aller à la valeur de rot
jumpstars 0:83911d619e5c 65
jumpstars 0:83911d619e5c 66 //affichage de la position
jumpstars 0:83911d619e5c 67 lcd.SetBackColor(LCD_COLOR_WHITE);
jumpstars 0:83911d619e5c 68 lcd.SetTextColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 69 sprintf((char*)text, "position: %d degrees", rot);
jumpstars 0:83911d619e5c 70 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
jumpstars 0:83911d619e5c 71
jumpstars 0:83911d619e5c 72 /* Retour de la température et volt du moteur mais ne fonctionne pas -> retour 0 pour les deux
jumpstars 0:83911d619e5c 73 temp = myax12.GetTemp();
jumpstars 0:83911d619e5c 74 volt = myax12.GetVolts();
jumpstars 0:83911d619e5c 75
jumpstars 0:83911d619e5c 76 sprintf((char*)text2, "Temp : %.2f ", temp);
jumpstars 0:83911d619e5c 77 lcd.DisplayStringAt(0, LINE(9), (uint8_t *)&text2, LEFT_MODE);
jumpstars 0:83911d619e5c 78
jumpstars 0:83911d619e5c 79 sprintf((char*)text3, "Volts : %.2f ", volt);
jumpstars 0:83911d619e5c 80 lcd.DisplayStringAt(0, LINE(10), (uint8_t *)&text3, LEFT_MODE);
jumpstars 0:83911d619e5c 81 */
jumpstars 0:83911d619e5c 82
jumpstars 0:83911d619e5c 83 //initialisation affichage
jumpstars 0:83911d619e5c 84 lcd.SetTextColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 85 lcd.DrawCircle(240, 200, 50);
jumpstars 0:83911d619e5c 86
jumpstars 0:83911d619e5c 87 // Affichage du cercle rouge(selon la valeur de rot) //
jumpstars 0:83911d619e5c 88 lcd.SetTextColor(LCD_COLOR_RED);
jumpstars 0:83911d619e5c 89 if(rot == 0){
jumpstars 0:83911d619e5c 90 lcd.FillCircle(240,150,15);
jumpstars 0:83911d619e5c 91 }
jumpstars 0:83911d619e5c 92 if(rot == 45){
jumpstars 0:83911d619e5c 93 lcd.FillCircle(275,165,15);
jumpstars 0:83911d619e5c 94 }
jumpstars 0:83911d619e5c 95 if(rot == 90){
jumpstars 0:83911d619e5c 96 lcd.FillCircle(290,200,15);
jumpstars 0:83911d619e5c 97 }
jumpstars 0:83911d619e5c 98 if(rot == 135){
jumpstars 0:83911d619e5c 99 lcd.FillCircle(275,235,15);
jumpstars 0:83911d619e5c 100 }
jumpstars 0:83911d619e5c 101 if(rot == 180){
jumpstars 0:83911d619e5c 102 lcd.FillCircle(240,250,15);
jumpstars 0:83911d619e5c 103 }
jumpstars 0:83911d619e5c 104 if(rot == 225){
jumpstars 0:83911d619e5c 105 lcd.FillCircle(205,235,15);
jumpstars 0:83911d619e5c 106 }
jumpstars 0:83911d619e5c 107 if(rot == 270){
jumpstars 0:83911d619e5c 108 lcd.FillCircle(190,200,15);
jumpstars 0:83911d619e5c 109 }
jumpstars 0:83911d619e5c 110 if(rot == 300){
jumpstars 0:83911d619e5c 111 lcd.FillCircle(205,165,15);
jumpstars 0:83911d619e5c 112 }
jumpstars 0:83911d619e5c 113
jumpstars 0:83911d619e5c 114 //Clear de l'écran
jumpstars 0:83911d619e5c 115 if(position != old_position){
jumpstars 0:83911d619e5c 116 lcd.Clear(LCD_COLOR_WHITE);
jumpstars 0:83911d619e5c 117 old_position = position;
jumpstars 0:83911d619e5c 118 }
jumpstars 0:83911d619e5c 119
jumpstars 0:83911d619e5c 120 //gestion du demi tour (selon la valeur de rot) //
jumpstars 0:83911d619e5c 121 if(demitour == 1){
jumpstars 0:83911d619e5c 122 if(rot == 0){//ok
jumpstars 0:83911d619e5c 123 rot = 180;
jumpstars 0:83911d619e5c 124 demitour = 0;
jumpstars 0:83911d619e5c 125 }else if(rot == 45){//?
jumpstars 0:83911d619e5c 126 rot = 225;
jumpstars 0:83911d619e5c 127 demitour = 0;
jumpstars 0:83911d619e5c 128 }else if(rot == 90){//?
jumpstars 0:83911d619e5c 129 rot = 270;
jumpstars 0:83911d619e5c 130 demitour = 0;
jumpstars 0:83911d619e5c 131 }else if(rot == 135){
jumpstars 0:83911d619e5c 132 rot = 300;
jumpstars 0:83911d619e5c 133 demitour = 0;
jumpstars 0:83911d619e5c 134 }else if(rot == 180){
jumpstars 0:83911d619e5c 135 rot = 0;
jumpstars 0:83911d619e5c 136 demitour = 0;
jumpstars 0:83911d619e5c 137 }else if(rot == 225){
jumpstars 0:83911d619e5c 138 rot = 45;
jumpstars 0:83911d619e5c 139 demitour = 0;
jumpstars 0:83911d619e5c 140 }else if(rot == 270){
jumpstars 0:83911d619e5c 141 rot = 90;
jumpstars 0:83911d619e5c 142 demitour = 0;
jumpstars 0:83911d619e5c 143 }else if(rot == 300){
jumpstars 0:83911d619e5c 144 rot = 135;
jumpstars 0:83911d619e5c 145 demitour = 0;
jumpstars 0:83911d619e5c 146 }
jumpstars 0:83911d619e5c 147 }
jumpstars 0:83911d619e5c 148 //gestion quart de tour (selon la valeur de rot) //
jumpstars 0:83911d619e5c 149 if(quarttour == 1){
jumpstars 0:83911d619e5c 150 if(rot == 0){//ok
jumpstars 0:83911d619e5c 151 rot = 90;
jumpstars 0:83911d619e5c 152 quarttour = 0;
jumpstars 0:83911d619e5c 153 }
jumpstars 0:83911d619e5c 154 else if(rot == 45){//?
jumpstars 0:83911d619e5c 155 rot = 135;
jumpstars 0:83911d619e5c 156 quarttour = 0;
jumpstars 0:83911d619e5c 157 }else if(rot == 90){//?
jumpstars 0:83911d619e5c 158 rot = 180;
jumpstars 0:83911d619e5c 159 quarttour = 0;
jumpstars 0:83911d619e5c 160 }else if(rot == 135){
jumpstars 0:83911d619e5c 161 rot = 225;
jumpstars 0:83911d619e5c 162 quarttour = 0;
jumpstars 0:83911d619e5c 163 }else if(rot == 180){
jumpstars 0:83911d619e5c 164 rot = 270;
jumpstars 0:83911d619e5c 165 quarttour = 0;
jumpstars 0:83911d619e5c 166 }else if(rot == 225){
jumpstars 0:83911d619e5c 167 rot = 300;
jumpstars 0:83911d619e5c 168 quarttour = 0;
jumpstars 0:83911d619e5c 169 }else if(rot == 270){
jumpstars 0:83911d619e5c 170 rot = 0;
jumpstars 0:83911d619e5c 171 quarttour = 0;
jumpstars 0:83911d619e5c 172 }else if(rot == 300){
jumpstars 0:83911d619e5c 173 rot =45;
jumpstars 0:83911d619e5c 174 quarttour = 0;
jumpstars 0:83911d619e5c 175 }
jumpstars 0:83911d619e5c 176 }
jumpstars 0:83911d619e5c 177 // gestion du tactile
jumpstars 0:83911d619e5c 178 ts.GetState(&TS_State);
jumpstars 0:83911d619e5c 179 if (TS_State.touchDetected) {
jumpstars 0:83911d619e5c 180 if (TS_State.touchDetected < prev_nb_touches) {
jumpstars 0:83911d619e5c 181 for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
jumpstars 0:83911d619e5c 182 lcd.ClearStringLine(idx);
jumpstars 0:83911d619e5c 183 }
jumpstars 0:83911d619e5c 184 }
jumpstars 0:83911d619e5c 185 compteur = 0;
jumpstars 0:83911d619e5c 186
jumpstars 0:83911d619e5c 187 for (idx = 0; idx < TS_State.touchDetected; idx++) {
jumpstars 0:83911d619e5c 188 x = TS_State.touchX[idx];
jumpstars 0:83911d619e5c 189 y = TS_State.touchY[idx];
jumpstars 0:83911d619e5c 190 // Ici, nous avons défini des zones de l'écran tactile pour le cercle rouge et les 3 boutons //
jumpstars 0:83911d619e5c 191 //POSITION 1
jumpstars 0:83911d619e5c 192 if((x > 225) && (x < 255) && (y > 135) && (y < 165)){
jumpstars 0:83911d619e5c 193 rot = 0;
jumpstars 0:83911d619e5c 194 }
jumpstars 0:83911d619e5c 195 //POSITION 2
jumpstars 0:83911d619e5c 196 if((x > 260) && (x < 290) && (y > 150) && (y < 180)){
jumpstars 0:83911d619e5c 197 rot = 45;
jumpstars 0:83911d619e5c 198 }
jumpstars 0:83911d619e5c 199 //POSITION 3
jumpstars 0:83911d619e5c 200 if((x > 275) && (x < 305) && (y > 185) && (y < 215)){
jumpstars 0:83911d619e5c 201 rot = 90;
jumpstars 0:83911d619e5c 202 }
jumpstars 0:83911d619e5c 203 //POSITION 4
jumpstars 0:83911d619e5c 204 if((x > 260) && (x < 290) && (y > 220) && (y < 250)){
jumpstars 0:83911d619e5c 205 rot = 135;
jumpstars 0:83911d619e5c 206 }
jumpstars 0:83911d619e5c 207 //POSITION 5
jumpstars 0:83911d619e5c 208 if((x > 225) && (x < 255) && (y > 235) && (y < 265)){
jumpstars 0:83911d619e5c 209 rot = 180;
jumpstars 0:83911d619e5c 210 }
jumpstars 0:83911d619e5c 211 //POSITION 6
jumpstars 0:83911d619e5c 212 if((x > 190) && (x < 220) && (y > 220) && (y < 250)){
jumpstars 0:83911d619e5c 213 rot = 225;
jumpstars 0:83911d619e5c 214 }
jumpstars 0:83911d619e5c 215 //POSITION 7
jumpstars 0:83911d619e5c 216 if((x > 175) && (x < 205) && (y > 185) && (y < 215)){
jumpstars 0:83911d619e5c 217 rot = 270;
jumpstars 0:83911d619e5c 218 }
jumpstars 0:83911d619e5c 219 //POSITION 8
jumpstars 0:83911d619e5c 220 if((x > 190) && (x < 220) && (y > 150) && (y < 180)){
jumpstars 0:83911d619e5c 221 rot = 300;
jumpstars 0:83911d619e5c 222 }
jumpstars 0:83911d619e5c 223 //bouton demi tour
jumpstars 0:83911d619e5c 224 if((x > 40) && (x < 140) && (y > 40) && (y < 100)){
jumpstars 0:83911d619e5c 225 lcd.SetTextColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 226 lcd.FillRect(40,40,100,60);
jumpstars 0:83911d619e5c 227 lcd.SetBackColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 228 lcd.SetTextColor(LCD_COLOR_WHITE);
jumpstars 0:83911d619e5c 229
jumpstars 0:83911d619e5c 230 lcd.DisplayStringAt(60, LINE(2), (uint8_t *)"Demi", LEFT_MODE);
jumpstars 0:83911d619e5c 231 lcd.DisplayStringAt(60, LINE(3), (uint8_t *)"Tour", LEFT_MODE);
jumpstars 0:83911d619e5c 232 // réalisation du demi tour une seule fois
jumpstars 0:83911d619e5c 233 if(compteur2 < 1){
jumpstars 0:83911d619e5c 234 demitour=1;
jumpstars 0:83911d619e5c 235 compteur2++;
jumpstars 0:83911d619e5c 236 }
jumpstars 0:83911d619e5c 237 }
jumpstars 0:83911d619e5c 238 //bouton quart de tour
jumpstars 0:83911d619e5c 239 if((x > 165) && (x < 315) && (y > 40) && (y < 100)){
jumpstars 0:83911d619e5c 240 lcd.SetTextColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 241 lcd.FillRect(165,40,150,60);
jumpstars 0:83911d619e5c 242 lcd.SetBackColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 243 lcd.SetTextColor(LCD_COLOR_WHITE);
jumpstars 0:83911d619e5c 244 lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"Quart", CENTER_MODE);
jumpstars 0:83911d619e5c 245 lcd.DisplayStringAt(0, LINE(3), (uint8_t *)"de tour", CENTER_MODE);
jumpstars 0:83911d619e5c 246 // réalisation du quart de tour une seule fois
jumpstars 0:83911d619e5c 247 if(compteur3 < 1){
jumpstars 0:83911d619e5c 248 quarttour=1;
jumpstars 0:83911d619e5c 249 compteur3++;
jumpstars 0:83911d619e5c 250 }
jumpstars 0:83911d619e5c 251 }
jumpstars 0:83911d619e5c 252 //bouton init
jumpstars 0:83911d619e5c 253 if((x > 340) && (x < 440) && (y > 40) && (y < 100)){
jumpstars 0:83911d619e5c 254 lcd.SetTextColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 255 lcd.FillRect(340,40,100,60);
jumpstars 0:83911d619e5c 256 lcd.SetBackColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 257 lcd.SetTextColor(LCD_COLOR_WHITE);
jumpstars 0:83911d619e5c 258 lcd.DisplayStringAt(358, LINE(2), (uint8_t *)"Init", LEFT_MODE);
jumpstars 0:83911d619e5c 259 rot = 0;
jumpstars 0:83911d619e5c 260 }
jumpstars 0:83911d619e5c 261 }
jumpstars 0:83911d619e5c 262 } else {
jumpstars 0:83911d619e5c 263 // Réaliser un seul clear quand le tactile n'est pas utilisé //
jumpstars 0:83911d619e5c 264 compteur2 = 0;
jumpstars 0:83911d619e5c 265 compteur3 = 0;
jumpstars 0:83911d619e5c 266 if(compteur < 1){
jumpstars 0:83911d619e5c 267 lcd.Clear(LCD_COLOR_WHITE);
jumpstars 0:83911d619e5c 268 compteur++;
jumpstars 0:83911d619e5c 269 }
jumpstars 0:83911d619e5c 270 // Affichage des trois boutons quand le tactile n'est pas utilisé //
jumpstars 0:83911d619e5c 271 lcd.SetTextColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 272 lcd.DrawRect(40,40,100,60);
jumpstars 0:83911d619e5c 273 lcd.SetBackColor(LCD_COLOR_WHITE);
jumpstars 0:83911d619e5c 274 lcd.SetTextColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 275 lcd.DisplayStringAt(60, LINE(2), (uint8_t *)"Demi", LEFT_MODE);
jumpstars 0:83911d619e5c 276 lcd.DisplayStringAt(60, LINE(3), (uint8_t *)"Tour", LEFT_MODE);
jumpstars 0:83911d619e5c 277
jumpstars 0:83911d619e5c 278 lcd.SetTextColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 279 lcd.DrawRect(165,40,150,60);
jumpstars 0:83911d619e5c 280 lcd.SetBackColor(LCD_COLOR_WHITE);
jumpstars 0:83911d619e5c 281 lcd.SetTextColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 282 lcd.DisplayStringAt(0, LINE(2), (uint8_t *)"Quart", CENTER_MODE);
jumpstars 0:83911d619e5c 283 lcd.DisplayStringAt(0, LINE(3), (uint8_t *)"de tour", CENTER_MODE);
jumpstars 0:83911d619e5c 284
jumpstars 0:83911d619e5c 285 lcd.SetTextColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 286 lcd.DrawRect(340,40,100,60);
jumpstars 0:83911d619e5c 287 lcd.SetBackColor(LCD_COLOR_WHITE);
jumpstars 0:83911d619e5c 288 lcd.SetTextColor(LCD_COLOR_BLACK);
jumpstars 0:83911d619e5c 289 lcd.DisplayStringAt(358, LINE(2), (uint8_t *)"Init", LEFT_MODE);
jumpstars 0:83911d619e5c 290
jumpstars 0:83911d619e5c 291 if (!cleared) {
jumpstars 0:83911d619e5c 292 //lcd.Clear(LCD_COLOR_WHITE);
jumpstars 0:83911d619e5c 293 cleared = 1;
jumpstars 0:83911d619e5c 294 }
jumpstars 0:83911d619e5c 295 }
jumpstars 0:83911d619e5c 296 }
jumpstars 0:83911d619e5c 297 }