IHM for Industrial Inspection platform Developed for PIMS project / Institut d'Optique Graduate School / LEnsE

Dependents:   PIMS_VisionIndus_IHM

Committer:
villemejane
Date:
Fri Nov 19 11:21:40 2021 +0000
Revision:
1:a7281be87607
Parent:
0:d70b8a6bed22
Vision Industrielle / Carte d'interfacage LEnsE / Institut d'Optique

Who changed what in which revision?

UserRevisionLine numberNew contents of line
villemejane 0:d70b8a6bed22 1 /****************************************************************************/
villemejane 0:d70b8a6bed22 2 /* Vision Industrielle IHM */
villemejane 0:d70b8a6bed22 3 /****************************************************************************/
villemejane 0:d70b8a6bed22 4 /* LEnsE / Julien VILLEMEJANE / Institut d'Optique Graduate School */
villemejane 0:d70b8a6bed22 5 /****************************************************************************/
villemejane 0:d70b8a6bed22 6 /* Library - Vision_Indus_IHM.cpp file */
villemejane 0:d70b8a6bed22 7 /****************************************************************************/
villemejane 0:d70b8a6bed22 8 /* Tested on DISCO-F746 / 14th nov 2021 */
villemejane 0:d70b8a6bed22 9 /****************************************************************************/
villemejane 0:d70b8a6bed22 10
villemejane 0:d70b8a6bed22 11 #include "Vision_Indus_IHM.h"
villemejane 0:d70b8a6bed22 12
villemejane 0:d70b8a6bed22 13 /* Inputs and Outputs */
villemejane 0:d70b8a6bed22 14 // Flex
villemejane 0:d70b8a6bed22 15 DigitalOut flex1_out(D4);
villemejane 0:d70b8a6bed22 16 DigitalOut flex2_out(D5);
villemejane 0:d70b8a6bed22 17 // Dome
villemejane 0:d70b8a6bed22 18 DigitalOut dome_out(D11);
villemejane 0:d70b8a6bed22 19 // Rasant
villemejane 0:d70b8a6bed22 20 DigitalOut rasant_out(D12);
villemejane 0:d70b8a6bed22 21 // Effi-RGB
villemejane 0:d70b8a6bed22 22 DigitalOut ringRGB_R_out(D6);
villemejane 0:d70b8a6bed22 23 DigitalOut ringRGB_G_out(D7);
villemejane 0:d70b8a6bed22 24 DigitalOut ringRGB_B_out(D8);
villemejane 0:d70b8a6bed22 25 // Conveyor
villemejane 0:d70b8a6bed22 26 PwmOut conveyor_speed(D14);
villemejane 0:d70b8a6bed22 27 DigitalOut conveyor_dir(D15);
villemejane 0:d70b8a6bed22 28 DigitalOut conveyor_m0(D9);
villemejane 0:d70b8a6bed22 29 DigitalOut conveyor_m1(D10);
villemejane 0:d70b8a6bed22 30 DigitalOut conveyor_enable(D3);
villemejane 0:d70b8a6bed22 31 DigitalOut conveyor_reset(D13);
villemejane 0:d70b8a6bed22 32 DigitalIn conveyor_fault(D2);
villemejane 0:d70b8a6bed22 33
villemejane 0:d70b8a6bed22 34
villemejane 0:d70b8a6bed22 35 /* Graphical objects */
villemejane 0:d70b8a6bed22 36 Label title(240, 2, "Vision Industrielle", Label::CENTER, Font24);
villemejane 0:d70b8a6bed22 37 Label subtitle(240, 25, "LEnsE / 2021", Label::CENTER, Font16);
villemejane 0:d70b8a6bed22 38 // All On-Off
villemejane 0:d70b8a6bed22 39 Button light_on(250, 65, 80, 40, "ALL ON");
villemejane 0:d70b8a6bed22 40 Button light_off(340, 65, 80, 40, "ALL OFF");
villemejane 0:d70b8a6bed22 41 uint8_t all_on_active;
villemejane 0:d70b8a6bed22 42 // EFFI-Ring
villemejane 0:d70b8a6bed22 43 Label ringRGB(10, 50, "EFFI-Ring RGB", Label::LEFT);
villemejane 0:d70b8a6bed22 44 Button ringRGB_R(10, 65, 50, 40, "RED");
villemejane 0:d70b8a6bed22 45 Button ringRGB_G(70, 65, 50, 40, "GREEN");
villemejane 0:d70b8a6bed22 46 Button ringRGB_B(130, 65, 50, 40, "BLUE");
villemejane 0:d70b8a6bed22 47 uint8_t ringRGB_R_active;
villemejane 0:d70b8a6bed22 48 uint8_t ringRGB_G_active;
villemejane 0:d70b8a6bed22 49 uint8_t ringRGB_B_active;
villemejane 0:d70b8a6bed22 50 // EFFI-Dome
villemejane 0:d70b8a6bed22 51 Label dome(10, 115, "EFFI-Dome W", Label::LEFT);
villemejane 0:d70b8a6bed22 52 Button dome_W(10, 130, 80, 40, "Dome");
villemejane 0:d70b8a6bed22 53 uint8_t dome_active;
villemejane 0:d70b8a6bed22 54 // EFFI-Dome
villemejane 0:d70b8a6bed22 55 Label rasant(100, 115, "EFFI-Rlla R", Label::LEFT);
villemejane 0:d70b8a6bed22 56 Button rasant_R(100, 130, 80, 40, "Rasant");
villemejane 0:d70b8a6bed22 57 uint8_t rasant_active;
villemejane 0:d70b8a6bed22 58 // EFFI-Flex
villemejane 0:d70b8a6bed22 59 Label flex1(10, 180, "EFFI-Flex W", Label::LEFT);
villemejane 0:d70b8a6bed22 60 Button flex1_W(10, 195, 80, 40, "Flex1");
villemejane 0:d70b8a6bed22 61 uint8_t flex1_active;
villemejane 0:d70b8a6bed22 62 Button flex2_W(100, 195, 80, 40, "Flex2");
villemejane 0:d70b8a6bed22 63 uint8_t flex2_active;
villemejane 0:d70b8a6bed22 64 // Conveyor
villemejane 0:d70b8a6bed22 65 Label conveyor(250, 200, "Convoyeur / Vitesse", Label::LEFT);
villemejane 0:d70b8a6bed22 66 NumericLabel<int> conv_speed_lab(400, 200, "V = ", Label::LEFT);
villemejane 0:d70b8a6bed22 67 SeekBar conv_speed(250, 250, 150, 0, 100, 0, "0", "", "100%");
villemejane 0:d70b8a6bed22 68
villemejane 0:d70b8a6bed22 69
villemejane 0:d70b8a6bed22 70
villemejane 0:d70b8a6bed22 71
villemejane 0:d70b8a6bed22 72 /* initIHM */
villemejane 0:d70b8a6bed22 73 void initIHM(void){
villemejane 0:d70b8a6bed22 74 all_on_active = 0;
villemejane 0:d70b8a6bed22 75 light_off.Draw(0xFFFFFFFF, 0xFF000000);
villemejane 0:d70b8a6bed22 76 light_on.Draw(COLOR_OFF, 0xFFFFFFFF);
villemejane 0:d70b8a6bed22 77 /* EFFI-Ring */
villemejane 0:d70b8a6bed22 78 ringRGB_R_active = 0;
villemejane 1:a7281be87607 79 ringRGB_R_out = 1;
villemejane 0:d70b8a6bed22 80 ringRGB_R.Draw(COLOR_OFF);
villemejane 0:d70b8a6bed22 81 ringRGB_G_active = 0;
villemejane 1:a7281be87607 82 ringRGB_G_out = 1;
villemejane 0:d70b8a6bed22 83 ringRGB_G.Draw(COLOR_OFF);
villemejane 0:d70b8a6bed22 84 ringRGB_B_active = 0;
villemejane 1:a7281be87607 85 ringRGB_B_out = 1;
villemejane 0:d70b8a6bed22 86 ringRGB_B.Draw(COLOR_OFF);
villemejane 0:d70b8a6bed22 87 /* EFFI-Dome */
villemejane 0:d70b8a6bed22 88 dome_active = 0;
villemejane 1:a7281be87607 89 dome_out = 1;
villemejane 0:d70b8a6bed22 90 dome_W.Draw(COLOR_OFF);
villemejane 0:d70b8a6bed22 91 /* EFFI-Rlla */
villemejane 0:d70b8a6bed22 92 rasant_active = 0;
villemejane 1:a7281be87607 93 rasant_out = 1;
villemejane 0:d70b8a6bed22 94 rasant_R.Draw(COLOR_OFF);
villemejane 0:d70b8a6bed22 95 /* EFFI-Flex */
villemejane 0:d70b8a6bed22 96 flex1_active = 0;
villemejane 1:a7281be87607 97 flex1_out = 1;
villemejane 0:d70b8a6bed22 98 flex1_W.Draw(COLOR_OFF);
villemejane 0:d70b8a6bed22 99 flex2_active = 0;
villemejane 1:a7281be87607 100 flex2_out = 1;
villemejane 0:d70b8a6bed22 101 flex2_W.Draw(COLOR_OFF);
villemejane 0:d70b8a6bed22 102 /* Conveyor */
villemejane 0:d70b8a6bed22 103 int8_t x = (int8_t)conv_speed.GetValue();
villemejane 0:d70b8a6bed22 104 conv_speed_lab.Draw("%3d m/s", x);
villemejane 0:d70b8a6bed22 105 conveyor_enable = 1;
villemejane 0:d70b8a6bed22 106 conveyor_reset = 1;
villemejane 0:d70b8a6bed22 107 conveyor_m0 = 0;
villemejane 0:d70b8a6bed22 108 conveyor_m1 = 0;
villemejane 0:d70b8a6bed22 109 conveyor_speed.period_us(1000);
villemejane 0:d70b8a6bed22 110 conveyor_dir = CONV_DIR_FW;
villemejane 0:d70b8a6bed22 111 conveyor_speed.write(0); // STOP
villemejane 0:d70b8a6bed22 112 }
villemejane 0:d70b8a6bed22 113
villemejane 0:d70b8a6bed22 114 /* updateIHM */
villemejane 0:d70b8a6bed22 115 void updateIHM(void){
villemejane 0:d70b8a6bed22 116 if (light_on.Touched()){
villemejane 0:d70b8a6bed22 117 all_on_active = 1;
villemejane 0:d70b8a6bed22 118 }
villemejane 0:d70b8a6bed22 119 if(all_on_active == 1){
villemejane 0:d70b8a6bed22 120 light_off.Draw(COLOR_OFF, 0xFFFFFFFF);
villemejane 0:d70b8a6bed22 121 light_on.Draw(0xFFFFFFFF, 0xFF000000);
villemejane 0:d70b8a6bed22 122
villemejane 0:d70b8a6bed22 123 ringRGB_R_active = 1;
villemejane 1:a7281be87607 124 ringRGB_R_out = 0;
villemejane 0:d70b8a6bed22 125 ringRGB_R.Draw(0xFFFF0000);
villemejane 0:d70b8a6bed22 126 ringRGB_G_active = 1;
villemejane 1:a7281be87607 127 ringRGB_G_out = 0;
villemejane 0:d70b8a6bed22 128 ringRGB_G.Draw(0xFF33DD33, 0xFF000000);
villemejane 0:d70b8a6bed22 129 ringRGB_B_active = 1;
villemejane 1:a7281be87607 130 ringRGB_B_out = 0;
villemejane 0:d70b8a6bed22 131 ringRGB_B.Draw(0xFF0000FF);
villemejane 0:d70b8a6bed22 132
villemejane 0:d70b8a6bed22 133 dome_active = 1;
villemejane 1:a7281be87607 134 dome_out = 0;
villemejane 0:d70b8a6bed22 135 dome_W.Draw(0xFFFFFFFF, 0xFF000000);
villemejane 0:d70b8a6bed22 136
villemejane 0:d70b8a6bed22 137 rasant_active = 1;
villemejane 1:a7281be87607 138 rasant_out = 0;
villemejane 0:d70b8a6bed22 139 rasant_R.Draw(0xFFFF0000);
villemejane 0:d70b8a6bed22 140
villemejane 0:d70b8a6bed22 141 flex1_active = 1;
villemejane 1:a7281be87607 142 flex1_out = 0;
villemejane 0:d70b8a6bed22 143 flex1_W.Draw(0xFFEEEEEE, 0xFF000000);
villemejane 0:d70b8a6bed22 144 flex2_active = 1;
villemejane 1:a7281be87607 145 flex2_out = 0;
villemejane 0:d70b8a6bed22 146 flex2_W.Draw(0xFFEEEEEE, 0xFF000000);
villemejane 0:d70b8a6bed22 147
villemejane 0:d70b8a6bed22 148 all_on_active = 0;
villemejane 0:d70b8a6bed22 149 }
villemejane 0:d70b8a6bed22 150 else{
villemejane 0:d70b8a6bed22 151 light_off.Draw(0xFFFFFFFF, 0xFF000000);
villemejane 0:d70b8a6bed22 152 light_on.Draw(COLOR_OFF, 0xFFFFFFFF);
villemejane 0:d70b8a6bed22 153 if (light_off.Touched()){
villemejane 0:d70b8a6bed22 154 all_on_active = 0;
villemejane 0:d70b8a6bed22 155 light_off.Draw(0xFFFFFFFF, 0xFF000000);
villemejane 0:d70b8a6bed22 156 light_on.Draw(COLOR_OFF, 0xFFFFFFFF);
villemejane 0:d70b8a6bed22 157 }
villemejane 0:d70b8a6bed22 158 if (ringRGB_R.Touched()){
villemejane 0:d70b8a6bed22 159 if(ringRGB_R_active){
villemejane 0:d70b8a6bed22 160 ringRGB_R_active = 0;
villemejane 1:a7281be87607 161 ringRGB_R_out = 1;
villemejane 0:d70b8a6bed22 162 all_on_active = 0;
villemejane 0:d70b8a6bed22 163 ringRGB_R.Draw(COLOR_OFF);
villemejane 0:d70b8a6bed22 164 }
villemejane 0:d70b8a6bed22 165 else{
villemejane 0:d70b8a6bed22 166 ringRGB_R_active = 1;
villemejane 1:a7281be87607 167 ringRGB_R_out = 0;
villemejane 0:d70b8a6bed22 168 ringRGB_R.Draw(0xFFFF0000);
villemejane 0:d70b8a6bed22 169 }
villemejane 0:d70b8a6bed22 170
villemejane 0:d70b8a6bed22 171 }
villemejane 0:d70b8a6bed22 172 if (ringRGB_G.Touched()){
villemejane 0:d70b8a6bed22 173 if(ringRGB_G_active){
villemejane 0:d70b8a6bed22 174 ringRGB_G_active = 0;
villemejane 1:a7281be87607 175 ringRGB_G_out = 1;
villemejane 0:d70b8a6bed22 176 all_on_active = 0;
villemejane 0:d70b8a6bed22 177 ringRGB_G.Draw(COLOR_OFF, 0xFFFFFFFF);
villemejane 0:d70b8a6bed22 178 }
villemejane 0:d70b8a6bed22 179 else{
villemejane 0:d70b8a6bed22 180 ringRGB_G_active = 1;
villemejane 1:a7281be87607 181 ringRGB_G_out = 0;
villemejane 0:d70b8a6bed22 182 ringRGB_G.Draw(0xFF33DD33, 0xFF000000);
villemejane 0:d70b8a6bed22 183 }
villemejane 0:d70b8a6bed22 184
villemejane 0:d70b8a6bed22 185 }
villemejane 0:d70b8a6bed22 186 if (ringRGB_B.Touched()){
villemejane 0:d70b8a6bed22 187 if(ringRGB_B_active){
villemejane 0:d70b8a6bed22 188 ringRGB_B_active = 0;
villemejane 1:a7281be87607 189 ringRGB_B_out = 1;
villemejane 0:d70b8a6bed22 190 all_on_active = 0;
villemejane 0:d70b8a6bed22 191 ringRGB_B.Draw(COLOR_OFF);
villemejane 0:d70b8a6bed22 192 }
villemejane 0:d70b8a6bed22 193 else{
villemejane 0:d70b8a6bed22 194 ringRGB_B_active = 1;
villemejane 1:a7281be87607 195 ringRGB_B_out = 0;
villemejane 0:d70b8a6bed22 196 ringRGB_B.Draw(0xFF0000FF);
villemejane 0:d70b8a6bed22 197 }
villemejane 0:d70b8a6bed22 198
villemejane 0:d70b8a6bed22 199 }
villemejane 0:d70b8a6bed22 200 if (dome_W.Touched()){
villemejane 0:d70b8a6bed22 201 if(dome_active){
villemejane 0:d70b8a6bed22 202 dome_active = 0;
villemejane 1:a7281be87607 203 dome_out = 1;
villemejane 0:d70b8a6bed22 204 all_on_active = 0;
villemejane 0:d70b8a6bed22 205 dome_W.Draw(COLOR_OFF, 0xFFFFFFFF);
villemejane 0:d70b8a6bed22 206 }
villemejane 0:d70b8a6bed22 207 else{
villemejane 0:d70b8a6bed22 208 dome_active = 1;
villemejane 1:a7281be87607 209 dome_out = 0;
villemejane 0:d70b8a6bed22 210 dome_W.Draw(0xFFFFFFFF, 0xFF000000);
villemejane 0:d70b8a6bed22 211 }
villemejane 0:d70b8a6bed22 212 }
villemejane 0:d70b8a6bed22 213 if (rasant_R.Touched()){
villemejane 0:d70b8a6bed22 214 if(rasant_active){
villemejane 0:d70b8a6bed22 215 rasant_active = 0;
villemejane 1:a7281be87607 216 rasant_out = 1;
villemejane 0:d70b8a6bed22 217 all_on_active = 0;
villemejane 0:d70b8a6bed22 218 rasant_R.Draw(COLOR_OFF);
villemejane 0:d70b8a6bed22 219 }
villemejane 0:d70b8a6bed22 220 else{
villemejane 0:d70b8a6bed22 221 rasant_active = 1;
villemejane 1:a7281be87607 222 rasant_out = 0;
villemejane 0:d70b8a6bed22 223 rasant_R.Draw(0xFFFF0000);
villemejane 0:d70b8a6bed22 224 }
villemejane 0:d70b8a6bed22 225 }
villemejane 0:d70b8a6bed22 226 if (flex1_W.Touched()){
villemejane 0:d70b8a6bed22 227 if(flex1_active){
villemejane 0:d70b8a6bed22 228 flex1_active = 0;
villemejane 1:a7281be87607 229 flex1_out = 1;
villemejane 0:d70b8a6bed22 230 all_on_active = 0;
villemejane 0:d70b8a6bed22 231 flex1_W.Draw(COLOR_OFF, 0xFFFFFFFF);
villemejane 0:d70b8a6bed22 232 }
villemejane 0:d70b8a6bed22 233 else{
villemejane 0:d70b8a6bed22 234 flex1_active = 1;
villemejane 1:a7281be87607 235 flex1_out = 0;
villemejane 0:d70b8a6bed22 236 flex1_W.Draw(0xFFEEEEEE, 0xFF000000);
villemejane 0:d70b8a6bed22 237 }
villemejane 0:d70b8a6bed22 238 }
villemejane 0:d70b8a6bed22 239
villemejane 0:d70b8a6bed22 240 if (flex2_W.Touched()){
villemejane 0:d70b8a6bed22 241 if(flex2_active){
villemejane 0:d70b8a6bed22 242 flex2_active = 0;
villemejane 1:a7281be87607 243 flex2_out = 1;
villemejane 0:d70b8a6bed22 244 all_on_active = 0;
villemejane 0:d70b8a6bed22 245 flex2_W.Draw(COLOR_OFF, 0xFFFFFFFF);
villemejane 0:d70b8a6bed22 246 }
villemejane 0:d70b8a6bed22 247 else{
villemejane 0:d70b8a6bed22 248 flex2_active = 1;
villemejane 1:a7281be87607 249 flex2_out = 0;
villemejane 0:d70b8a6bed22 250 flex2_W.Draw(0xFFEEEEEE, 0xFF000000);
villemejane 0:d70b8a6bed22 251 }
villemejane 0:d70b8a6bed22 252 }
villemejane 0:d70b8a6bed22 253 }
villemejane 0:d70b8a6bed22 254 if (conv_speed.Slide())
villemejane 0:d70b8a6bed22 255 {
villemejane 0:d70b8a6bed22 256 int8_t x = (int8_t)conv_speed.GetValue();
villemejane 0:d70b8a6bed22 257 conv_speed_lab.Draw("%3d", x);
villemejane 0:d70b8a6bed22 258 }
villemejane 0:d70b8a6bed22 259
villemejane 0:d70b8a6bed22 260 }
villemejane 0:d70b8a6bed22 261
villemejane 0:d70b8a6bed22 262 /* updateIHM */
villemejane 0:d70b8a6bed22 263 void moveConveyor(char dir, int speed_us){
villemejane 0:d70b8a6bed22 264 conveyor_enable = 0;
villemejane 0:d70b8a6bed22 265 conveyor_speed.period_us(speed_us);
villemejane 0:d70b8a6bed22 266 conveyor_dir = dir;
villemejane 0:d70b8a6bed22 267 conveyor_speed.write(0.5);
villemejane 0:d70b8a6bed22 268 }
villemejane 0:d70b8a6bed22 269 /* updateIHM */
villemejane 0:d70b8a6bed22 270 void stopConveyor(void){
villemejane 0:d70b8a6bed22 271 conveyor_enable = 1;
villemejane 0:d70b8a6bed22 272 conveyor_speed.write(0);
villemejane 0:d70b8a6bed22 273 }