Remote inc coolant nozzle control program

Dependencies:   mbed reScale USBDevice

Dependents:   Nozzle_inputs Nozzle_display

Committer:
BETZtechnik
Date:
Sun Feb 24 21:30:05 2019 +0000
Revision:
9:69155b34efd6
Parent:
7:d3c19705042b
Child:
10:84ea3ec0660d
232 working, freezing fixed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
BETZtechnik 0:09419d572e90 1 #include "mbed.h"
BETZtechnik 0:09419d572e90 2 #include "Adafruit_ST7735.h"
BETZtechnik 1:e8452b75301e 3 #include "RPG.h"
BETZtechnik 0:09419d572e90 4 #include "reScale.h"
BETZtechnik 0:09419d572e90 5 #include "Ee24xx08.h"
BETZtechnik 0:09419d572e90 6
BETZtechnik 0:09419d572e90 7
BETZtechnik 0:09419d572e90 8 // DISPLAY INIT:
BETZtechnik 0:09419d572e90 9
BETZtechnik 0:09419d572e90 10 #define BLACK 0x0000
BETZtechnik 0:09419d572e90 11 #define BLUE 0x001F
BETZtechnik 0:09419d572e90 12 #define RED 0xF800
BETZtechnik 0:09419d572e90 13 #define GREEN 0x07E0
BETZtechnik 0:09419d572e90 14 #define CYAN 0x07FF
BETZtechnik 0:09419d572e90 15 #define MAGENTA 0xF81F
BETZtechnik 0:09419d572e90 16 #define YELLOW 0xFFE0
BETZtechnik 0:09419d572e90 17 #define WHITE 0xFFFF
BETZtechnik 0:09419d572e90 18
BETZtechnik 1:e8452b75301e 19 #define currentToolAddress 51
BETZtechnik 1:e8452b75301e 20 #define numToolsAddress 52
BETZtechnik 1:e8452b75301e 21 #define numNozAddress 53
BETZtechnik 0:09419d572e90 22
BETZtechnik 0:09419d572e90 23
BETZtechnik 1:e8452b75301e 24 //DigitalOut myled(P1_13);
BETZtechnik 1:e8452b75301e 25
BETZtechnik 0:09419d572e90 26
BETZtechnik 0:09419d572e90 27 I2C iic(P0_5, P0_4);
BETZtechnik 9:69155b34efd6 28
BETZtechnik 1:e8452b75301e 29
BETZtechnik 1:e8452b75301e 30 DigitalOut dir(P0_21);
BETZtechnik 1:e8452b75301e 31
BETZtechnik 0:09419d572e90 32
BETZtechnik 0:09419d572e90 33 Ee24xx08 eeprom(&iic);
BETZtechnik 0:09419d572e90 34
BETZtechnik 1:e8452b75301e 35 Adafruit_ST7735 tft(P0_9, P0_8, P0_6, P0_2, P0_22, P0_7); // MOSI, MISO, SCLK, SSEL, TFT_DC, TFT_RST
BETZtechnik 0:09419d572e90 36
BETZtechnik 0:09419d572e90 37 reScale servo1Scale(-45,0,750,1800); //19850 is 1.0v from voltage divider at 10k.
BETZtechnik 0:09419d572e90 38
BETZtechnik 1:e8452b75301e 39 PwmOut myServo(P1_13); //display board
BETZtechnik 1:e8452b75301e 40 //PwmOut myServo(D4);
BETZtechnik 0:09419d572e90 41
BETZtechnik 1:e8452b75301e 42 //DigitalIn tUpButton(P2_11);
BETZtechnik 1:e8452b75301e 43 //DigitalIn tDownButton(P2_12);
BETZtechnik 1:e8452b75301e 44 DigitalIn encoderFalseButton(P0_23); // FALSE!!! push button of knob
BETZtechnik 1:e8452b75301e 45 DigitalIn encoderButton(P0_20); // push button of knob
BETZtechnik 1:e8452b75301e 46 DigitalIn backButton(P0_15); // back button
BETZtechnik 0:09419d572e90 47
BETZtechnik 1:e8452b75301e 48 Timer t;
BETZtechnik 1:e8452b75301e 49 int lastBackButton;
BETZtechnik 1:e8452b75301e 50 int lastDownButton;
BETZtechnik 1:e8452b75301e 51 int lastEncoderButton;
BETZtechnik 1:e8452b75301e 52
BETZtechnik 1:e8452b75301e 53 int dirt = 0;
BETZtechnik 0:09419d572e90 54
BETZtechnik 0:09419d572e90 55 int main() {
BETZtechnik 1:e8452b75301e 56
BETZtechnik 1:e8452b75301e 57 // ************************************** SCREEN INIT *************************************************
BETZtechnik 1:e8452b75301e 58
BETZtechnik 1:e8452b75301e 59 tft.initR(INITR_GREENTAB); // initialize a ST7735S chip, black tab
BETZtechnik 1:e8452b75301e 60
BETZtechnik 1:e8452b75301e 61 tft.setRotation(3);
BETZtechnik 1:e8452b75301e 62 tft.fillScreen(BLACK);
BETZtechnik 1:e8452b75301e 63 tft.setCursor(30,120);
BETZtechnik 1:e8452b75301e 64 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 65 tft.setTextWrap(false);
BETZtechnik 1:e8452b75301e 66 tft.printf("AccuBlast v0");
BETZtechnik 1:e8452b75301e 67
BETZtechnik 1:e8452b75301e 68 tft.setCursor(4, 4);
BETZtechnik 1:e8452b75301e 69 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 70 tft.setTextSize(2);
BETZtechnik 1:e8452b75301e 71 tft.printf("N1");
BETZtechnik 1:e8452b75301e 72
BETZtechnik 1:e8452b75301e 73 tft.setCursor(80, 4);
BETZtechnik 1:e8452b75301e 74 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 75 tft.setTextSize(2);
BETZtechnik 1:e8452b75301e 76 tft.printf("N2");
BETZtechnik 1:e8452b75301e 77
BETZtechnik 1:e8452b75301e 78 tft.setCursor(4, 28);
BETZtechnik 1:e8452b75301e 79 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 80 tft.setTextSize(2);
BETZtechnik 1:e8452b75301e 81 tft.printf("T");
BETZtechnik 1:e8452b75301e 82
BETZtechnik 1:e8452b75301e 83 tft.setCursor(4, 50);
BETZtechnik 1:e8452b75301e 84 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 85 tft.setTextSize(1);
BETZtechnik 1:e8452b75301e 86 tft.printf("Nozzle");
BETZtechnik 1:e8452b75301e 87
BETZtechnik 1:e8452b75301e 88 tft.setCursor(4, 65);
BETZtechnik 1:e8452b75301e 89 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 90 tft.setTextSize(1);
BETZtechnik 1:e8452b75301e 91 tft.printf("Res.");
BETZtechnik 1:e8452b75301e 92
BETZtechnik 1:e8452b75301e 93 tft.setCursor(4, 80);
BETZtechnik 1:e8452b75301e 94 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 95 tft.setTextSize(1);
BETZtechnik 1:e8452b75301e 96 tft.printf("Res.");
BETZtechnik 1:e8452b75301e 97
BETZtechnik 1:e8452b75301e 98 tft.setCursor(4, 95);
BETZtechnik 1:e8452b75301e 99 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 100 tft.setTextSize(1);
BETZtechnik 1:e8452b75301e 101 tft.printf("Num Tls");
BETZtechnik 1:e8452b75301e 102
BETZtechnik 1:e8452b75301e 103 tft.setCursor(4, 110);
BETZtechnik 1:e8452b75301e 104 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 105 tft.setTextSize(1);
BETZtechnik 1:e8452b75301e 106 tft.printf("Num Noz");
BETZtechnik 1:e8452b75301e 107
BETZtechnik 1:e8452b75301e 108 // **************************************************************************************************************
BETZtechnik 1:e8452b75301e 109
BETZtechnik 1:e8452b75301e 110 int received = 9;
BETZtechnik 3:bbbacfd62773 111 int serialCounter = 0;
BETZtechnik 7:d3c19705042b 112 int index = 0;
BETZtechnik 1:e8452b75301e 113
BETZtechnik 1:e8452b75301e 114 int count = 0;
BETZtechnik 1:e8452b75301e 115 int maxCount = 7; //max number of menu items
BETZtechnik 1:e8452b75301e 116 int lastCount = 99;
BETZtechnik 1:e8452b75301e 117
BETZtechnik 1:e8452b75301e 118 //************* Pull previous setting from eeprom *******************
BETZtechnik 1:e8452b75301e 119
BETZtechnik 1:e8452b75301e 120 char tempToolNo = 0; // last tool in spindle
BETZtechnik 1:e8452b75301e 121 eeprom.read(currentToolAddress, &tempToolNo);
BETZtechnik 1:e8452b75301e 122 int currentToolNo = (int)tempToolNo;
BETZtechnik 1:e8452b75301e 123
BETZtechnik 1:e8452b75301e 124 char tempNumTools = 0; // number of tools in ATC
BETZtechnik 1:e8452b75301e 125 eeprom.read(numToolsAddress, &tempNumTools);
BETZtechnik 1:e8452b75301e 126 int numTools = (int)tempNumTools;
BETZtechnik 1:e8452b75301e 127
BETZtechnik 1:e8452b75301e 128 char tempNumNoz = 0; // number of nozzles installed
BETZtechnik 1:e8452b75301e 129 eeprom.read(numNozAddress, &tempNumNoz);
BETZtechnik 1:e8452b75301e 130 int numNoz = (int)tempNumNoz;
BETZtechnik 1:e8452b75301e 131
BETZtechnik 1:e8452b75301e 132 char tempLastAngle = 0; // last angle of last tool in spindle
BETZtechnik 1:e8452b75301e 133 eeprom.read(currentToolNo, &tempLastAngle);
BETZtechnik 1:e8452b75301e 134 int lastAngle = (int)tempLastAngle;
BETZtechnik 1:e8452b75301e 135 lastAngle = lastAngle - 45; // Not storing signed int, so signed value is 45 less than what was stored to memory.
BETZtechnik 1:e8452b75301e 136
BETZtechnik 1:e8452b75301e 137 //******************** Button debounce *********************************
BETZtechnik 0:09419d572e90 138
BETZtechnik 0:09419d572e90 139
BETZtechnik 1:e8452b75301e 140
BETZtechnik 1:e8452b75301e 141 backButton.mode(PullUp); // button pull up
BETZtechnik 1:e8452b75301e 142 //tDownButton.mode(PullUp); // button pull up
BETZtechnik 1:e8452b75301e 143 encoderButton.mode(PullUp);
BETZtechnik 1:e8452b75301e 144 encoderFalseButton.mode(PullUp);
BETZtechnik 0:09419d572e90 145
BETZtechnik 1:e8452b75301e 146 t.start(); // starts timer
BETZtechnik 1:e8452b75301e 147 lastBackButton = t.read_ms();
BETZtechnik 1:e8452b75301e 148 lastDownButton = t.read_ms();
BETZtechnik 1:e8452b75301e 149 lastEncoderButton = t.read_ms();
BETZtechnik 1:e8452b75301e 150
BETZtechnik 1:e8452b75301e 151 //****************************************************************************
BETZtechnik 0:09419d572e90 152
BETZtechnik 1:e8452b75301e 153 int lastToolNo = 99;
BETZtechnik 1:e8452b75301e 154 int lastNumTools = -1; // trigger to write eeprom value for number of tools
BETZtechnik 0:09419d572e90 155
BETZtechnik 1:e8452b75301e 156 int lastNumNoz = 0; //trigger display for number of nozzles after startup
BETZtechnik 0:09419d572e90 157
BETZtechnik 1:e8452b75301e 158 int n1Pos = lastAngle; //Set servo to last known postition prior to power off
BETZtechnik 0:09419d572e90 159 int lastN1Pos = 150;
BETZtechnik 0:09419d572e90 160
BETZtechnik 0:09419d572e90 161 int servo1Pos = 0;
BETZtechnik 0:09419d572e90 162
BETZtechnik 1:e8452b75301e 163 RPG rpg1(P2_2,P1_20,P0_23); // RPG (PinName pA, PinName pB, PinName pPB)P0_23 is unconnected!! ;
BETZtechnik 1:e8452b75301e 164
BETZtechnik 1:e8452b75301e 165 myServo.period_ms(20);
BETZtechnik 0:09419d572e90 166
BETZtechnik 1:e8452b75301e 167 /*
BETZtechnik 1:e8452b75301e 168 char t1Ang = 200;
BETZtechnik 1:e8452b75301e 169 char t1Read = 0;
BETZtechnik 1:e8452b75301e 170
BETZtechnik 1:e8452b75301e 171 eeprom.write(1, t1Ang);
BETZtechnik 1:e8452b75301e 172 wait(1);
BETZtechnik 1:e8452b75301e 173 eeprom.read(1, &t1Read);
BETZtechnik 0:09419d572e90 174
BETZtechnik 0:09419d572e90 175
BETZtechnik 0:09419d572e90 176 tft.setCursor(30,110);
BETZtechnik 0:09419d572e90 177 tft.setTextColor(WHITE);
BETZtechnik 0:09419d572e90 178 tft.setTextWrap(true);
BETZtechnik 1:e8452b75301e 179 // tft.printf("%s\r\n",t1Read);
BETZtechnik 1:e8452b75301e 180 tft.printf("%d", currentTool);
BETZtechnik 1:e8452b75301e 181 */
BETZtechnik 1:e8452b75301e 182
BETZtechnik 1:e8452b75301e 183 uint8_t c = 0; // for 485 link
BETZtechnik 3:bbbacfd62773 184
BETZtechnik 3:bbbacfd62773 185
BETZtechnik 3:bbbacfd62773 186 int serialToolNumber = 0;
BETZtechnik 3:bbbacfd62773 187 int stage = 0; // for serial parsing
BETZtechnik 3:bbbacfd62773 188 int Tens = 0;
BETZtechnik 3:bbbacfd62773 189 int Ones = 0;
BETZtechnik 3:bbbacfd62773 190
BETZtechnik 3:bbbacfd62773 191 dir = 0;
BETZtechnik 9:69155b34efd6 192
BETZtechnik 9:69155b34efd6 193 wait(2);
BETZtechnik 9:69155b34efd6 194 Serial device(P0_14, P0_13, 19200); // RS 485 TX RX?
BETZtechnik 0:09419d572e90 195
BETZtechnik 0:09419d572e90 196 while(1) {
BETZtechnik 0:09419d572e90 197
BETZtechnik 3:bbbacfd62773 198 /*
BETZtechnik 3:bbbacfd62773 199 while (device.readable())
BETZtechnik 3:bbbacfd62773 200 {
BETZtechnik 3:bbbacfd62773 201 c = device.getc();
BETZtechnik 3:bbbacfd62773 202
BETZtechnik 3:bbbacfd62773 203
BETZtechnik 3:bbbacfd62773 204 if (c == '+'){
BETZtechnik 3:bbbacfd62773 205 currentToolNo = currentToolNo +1;
BETZtechnik 3:bbbacfd62773 206 if (currentToolNo > numTools){
BETZtechnik 3:bbbacfd62773 207 currentToolNo = 1;
BETZtechnik 3:bbbacfd62773 208 }
BETZtechnik 3:bbbacfd62773 209 }
BETZtechnik 3:bbbacfd62773 210
BETZtechnik 3:bbbacfd62773 211 else if (c == '-'){
BETZtechnik 3:bbbacfd62773 212 currentToolNo = currentToolNo - 1;
BETZtechnik 3:bbbacfd62773 213 if (currentToolNo > 1){
BETZtechnik 3:bbbacfd62773 214 currentToolNo = numTools;
BETZtechnik 3:bbbacfd62773 215 }
BETZtechnik 3:bbbacfd62773 216 }
BETZtechnik 3:bbbacfd62773 217 }
BETZtechnik 3:bbbacfd62773 218 */
BETZtechnik 7:d3c19705042b 219
BETZtechnik 7:d3c19705042b 220 /*
BETZtechnik 3:bbbacfd62773 221 while (device.readable())
BETZtechnik 3:bbbacfd62773 222 {
BETZtechnik 3:bbbacfd62773 223
BETZtechnik 3:bbbacfd62773 224
BETZtechnik 3:bbbacfd62773 225 c = device.getc();
BETZtechnik 3:bbbacfd62773 226
BETZtechnik 3:bbbacfd62773 227 if (c == 'M'){
BETZtechnik 3:bbbacfd62773 228 // stage = 1;
BETZtechnik 3:bbbacfd62773 229
BETZtechnik 3:bbbacfd62773 230 c = device.getc();
BETZtechnik 3:bbbacfd62773 231 if (c == '+'){
BETZtechnik 3:bbbacfd62773 232
BETZtechnik 3:bbbacfd62773 233 // tft.setTextColor(WHITE);
BETZtechnik 3:bbbacfd62773 234 // tft.setCursor(100, 100);
BETZtechnik 3:bbbacfd62773 235 // tft.printf("%d", c);
BETZtechnik 3:bbbacfd62773 236 currentToolNo = currentToolNo +1;
BETZtechnik 3:bbbacfd62773 237 if (currentToolNo > numTools){
BETZtechnik 3:bbbacfd62773 238 currentToolNo = 1;
BETZtechnik 3:bbbacfd62773 239 }
BETZtechnik 3:bbbacfd62773 240 }
BETZtechnik 3:bbbacfd62773 241
BETZtechnik 3:bbbacfd62773 242 else if (c == '-'){
BETZtechnik 3:bbbacfd62773 243 currentToolNo = currentToolNo - 1;
BETZtechnik 3:bbbacfd62773 244 if (currentToolNo < 1){
BETZtechnik 3:bbbacfd62773 245 currentToolNo = numTools;
BETZtechnik 3:bbbacfd62773 246 }
BETZtechnik 3:bbbacfd62773 247 }
BETZtechnik 3:bbbacfd62773 248
BETZtechnik 3:bbbacfd62773 249 }
BETZtechnik 3:bbbacfd62773 250 }
BETZtechnik 3:bbbacfd62773 251
BETZtechnik 7:d3c19705042b 252 */
BETZtechnik 3:bbbacfd62773 253
BETZtechnik 3:bbbacfd62773 254
BETZtechnik 3:bbbacfd62773 255
BETZtechnik 1:e8452b75301e 256 //myled = 1;
BETZtechnik 1:e8452b75301e 257
BETZtechnik 1:e8452b75301e 258 if (t.read() > 1200){ // timer can only hold 30 min, so reset after 20
BETZtechnik 1:e8452b75301e 259 t.reset();
BETZtechnik 1:e8452b75301e 260 lastBackButton = t.read_ms();
BETZtechnik 1:e8452b75301e 261 lastDownButton = t.read_ms();
BETZtechnik 1:e8452b75301e 262 lastEncoderButton = t.read_ms();
BETZtechnik 1:e8452b75301e 263 }
BETZtechnik 1:e8452b75301e 264
BETZtechnik 1:e8452b75301e 265 if (backButton == 0){ //Back button was pressed so back to default selection
BETZtechnik 1:e8452b75301e 266 count = 0;
BETZtechnik 1:e8452b75301e 267 }
BETZtechnik 1:e8452b75301e 268
BETZtechnik 1:e8452b75301e 269 if (encoderButton == 0){
BETZtechnik 1:e8452b75301e 270 if (t.read_ms() > (lastEncoderButton + 200)){
BETZtechnik 1:e8452b75301e 271 count = count + 1; //Reset count if PB pressed
BETZtechnik 1:e8452b75301e 272 }
BETZtechnik 1:e8452b75301e 273 if (count > maxCount){
BETZtechnik 1:e8452b75301e 274 count = 0;
BETZtechnik 1:e8452b75301e 275 }
BETZtechnik 1:e8452b75301e 276 lastEncoderButton = t.read_ms();
BETZtechnik 1:e8452b75301e 277
BETZtechnik 1:e8452b75301e 278 if (count > maxCount){
BETZtechnik 1:e8452b75301e 279 count = 0;
BETZtechnik 1:e8452b75301e 280 }
BETZtechnik 1:e8452b75301e 281 }
BETZtechnik 0:09419d572e90 282
BETZtechnik 1:e8452b75301e 283 //****************** ENCODER ACTIONS ************************************************
BETZtechnik 1:e8452b75301e 284 if (count == 0){ // knob controls servo value
BETZtechnik 1:e8452b75301e 285 dirt = rpg1.dir(); //Get Dir
BETZtechnik 1:e8452b75301e 286 n1Pos = n1Pos + dirt; //Ad Dirt to n1pos
BETZtechnik 1:e8452b75301e 287 if (n1Pos > 0){
BETZtechnik 1:e8452b75301e 288 n1Pos = 0;
BETZtechnik 1:e8452b75301e 289 }
BETZtechnik 1:e8452b75301e 290 if (n1Pos < -45){
BETZtechnik 1:e8452b75301e 291 n1Pos = -45;
BETZtechnik 1:e8452b75301e 292 }
BETZtechnik 1:e8452b75301e 293 }
BETZtechnik 1:e8452b75301e 294
BETZtechnik 1:e8452b75301e 295 if (count == 2){ //knob controls tool number
BETZtechnik 1:e8452b75301e 296 dirt = rpg1.dir(); //Get Dir
BETZtechnik 1:e8452b75301e 297 currentToolNo = currentToolNo + dirt; //Ad Dirt to n1pos
BETZtechnik 1:e8452b75301e 298 if (currentToolNo > numTools){
BETZtechnik 1:e8452b75301e 299 currentToolNo = numTools;
BETZtechnik 1:e8452b75301e 300 }
BETZtechnik 1:e8452b75301e 301 if (currentToolNo < 1){
BETZtechnik 1:e8452b75301e 302 currentToolNo = 1;
BETZtechnik 1:e8452b75301e 303 }
BETZtechnik 1:e8452b75301e 304 }
BETZtechnik 1:e8452b75301e 305
BETZtechnik 1:e8452b75301e 306 if (count == 6){ //knob controls tool number
BETZtechnik 1:e8452b75301e 307 dirt = rpg1.dir(); //Get Dir
BETZtechnik 1:e8452b75301e 308 numTools = numTools + dirt; //Ad Dirt to n1pos
BETZtechnik 1:e8452b75301e 309 if (numTools > 50){
BETZtechnik 1:e8452b75301e 310 numTools = 50;
BETZtechnik 1:e8452b75301e 311 }
BETZtechnik 1:e8452b75301e 312 if (numTools < 1){
BETZtechnik 1:e8452b75301e 313 numTools = 1;
BETZtechnik 1:e8452b75301e 314 }
BETZtechnik 1:e8452b75301e 315 }
BETZtechnik 1:e8452b75301e 316
BETZtechnik 1:e8452b75301e 317 if (count == 7){ //knob controls tool number
BETZtechnik 1:e8452b75301e 318 dirt = rpg1.dir(); //Get Dir
BETZtechnik 1:e8452b75301e 319 numNoz = numNoz + dirt; //Ad Dirt to n1pos
BETZtechnik 1:e8452b75301e 320 if (numNoz> 2){
BETZtechnik 1:e8452b75301e 321 numNoz = 2;
BETZtechnik 1:e8452b75301e 322 }
BETZtechnik 1:e8452b75301e 323 if (numNoz < 1){
BETZtechnik 1:e8452b75301e 324 numNoz = 1;
BETZtechnik 1:e8452b75301e 325 }
BETZtechnik 1:e8452b75301e 326 }
BETZtechnik 1:e8452b75301e 327
BETZtechnik 1:e8452b75301e 328
BETZtechnik 1:e8452b75301e 329 // ************* Rectangles for identifying active selection *****************************
BETZtechnik 1:e8452b75301e 330
BETZtechnik 1:e8452b75301e 331 if (count == 0){ // N1 adjust
BETZtechnik 1:e8452b75301e 332 tft.drawRect(2,2,74,18,GREEN);
BETZtechnik 1:e8452b75301e 333 }
BETZtechnik 1:e8452b75301e 334 else{
BETZtechnik 1:e8452b75301e 335 tft.drawRect(2,2,74,18,WHITE);
BETZtechnik 1:e8452b75301e 336 }
BETZtechnik 1:e8452b75301e 337
BETZtechnik 1:e8452b75301e 338 if ((count == 1) && (numNoz == 2)){ // N2 adjust
BETZtechnik 1:e8452b75301e 339 tft.drawRect(78,2,74,18,GREEN);
BETZtechnik 1:e8452b75301e 340 }
BETZtechnik 1:e8452b75301e 341
BETZtechnik 1:e8452b75301e 342 if ((count != 1) && (numNoz == 2)){ // N2 adjust
BETZtechnik 1:e8452b75301e 343 tft.drawRect(78,2,74,18,WHITE);
BETZtechnik 1:e8452b75301e 344 }
BETZtechnik 1:e8452b75301e 345
BETZtechnik 1:e8452b75301e 346
BETZtechnik 1:e8452b75301e 347 if (count == 2){
BETZtechnik 1:e8452b75301e 348 tft.drawRect(20,26,28,18,GREEN);
BETZtechnik 1:e8452b75301e 349 }
BETZtechnik 1:e8452b75301e 350 else{
BETZtechnik 1:e8452b75301e 351 tft.drawRect(20,26,28,18,BLACK);
BETZtechnik 1:e8452b75301e 352 }
BETZtechnik 1:e8452b75301e 353
BETZtechnik 1:e8452b75301e 354 if (count == 3){
BETZtechnik 1:e8452b75301e 355 tft.drawRect(53,48,20,12,GREEN);
BETZtechnik 1:e8452b75301e 356 }
BETZtechnik 1:e8452b75301e 357 else{
BETZtechnik 1:e8452b75301e 358 tft.drawRect(53,48,20,12,BLACK);
BETZtechnik 1:e8452b75301e 359 }
BETZtechnik 1:e8452b75301e 360
BETZtechnik 1:e8452b75301e 361 if (count == 4){
BETZtechnik 1:e8452b75301e 362 tft.drawRect(53,63,20,12,GREEN);
BETZtechnik 1:e8452b75301e 363 }
BETZtechnik 1:e8452b75301e 364 else{
BETZtechnik 1:e8452b75301e 365 tft.drawRect(53,63,20,12,BLACK);
BETZtechnik 1:e8452b75301e 366 }
BETZtechnik 1:e8452b75301e 367
BETZtechnik 1:e8452b75301e 368 if (count == 5){
BETZtechnik 1:e8452b75301e 369 tft.drawRect(53,78,20,12,GREEN);
BETZtechnik 1:e8452b75301e 370 }
BETZtechnik 1:e8452b75301e 371 else{
BETZtechnik 1:e8452b75301e 372 tft.drawRect(53,78,20,12,BLACK);
BETZtechnik 1:e8452b75301e 373 }
BETZtechnik 1:e8452b75301e 374
BETZtechnik 1:e8452b75301e 375 if (count == 6){
BETZtechnik 1:e8452b75301e 376 tft.drawRect(53,93,20,12,GREEN);
BETZtechnik 1:e8452b75301e 377 }
BETZtechnik 1:e8452b75301e 378 else{
BETZtechnik 1:e8452b75301e 379 tft.drawRect(53,93,20,12,BLACK);
BETZtechnik 1:e8452b75301e 380 }
BETZtechnik 1:e8452b75301e 381
BETZtechnik 1:e8452b75301e 382 if (count == 7){
BETZtechnik 1:e8452b75301e 383 tft.drawRect(53,108,20,12,GREEN);
BETZtechnik 1:e8452b75301e 384 }
BETZtechnik 1:e8452b75301e 385 else{
BETZtechnik 1:e8452b75301e 386 tft.drawRect(53,108,20,12,BLACK);
BETZtechnik 1:e8452b75301e 387 }
BETZtechnik 1:e8452b75301e 388
BETZtechnik 1:e8452b75301e 389 //****************************************************************************************
BETZtechnik 1:e8452b75301e 390
BETZtechnik 1:e8452b75301e 391 servo1Pos = servo1Scale.from(n1Pos);
BETZtechnik 0:09419d572e90 392
BETZtechnik 0:09419d572e90 393 myServo.pulsewidth_us(servo1Pos);
BETZtechnik 0:09419d572e90 394
BETZtechnik 1:e8452b75301e 395 //********************** update display values **********************************************
BETZtechnik 1:e8452b75301e 396
BETZtechnik 1:e8452b75301e 397
BETZtechnik 1:e8452b75301e 398 if (currentToolNo != lastToolNo){
BETZtechnik 1:e8452b75301e 399 /*
BETZtechnik 1:e8452b75301e 400 tft.fillRect(103, 2, 55,25, BLACK);
BETZtechnik 1:e8452b75301e 401 tft.setCursor(105, 4);
BETZtechnik 1:e8452b75301e 402 */
BETZtechnik 1:e8452b75301e 403 tft.setCursor(22, 28);
BETZtechnik 0:09419d572e90 404 tft.setTextColor(BLACK);
BETZtechnik 1:e8452b75301e 405 tft.setTextSize(2);
BETZtechnik 1:e8452b75301e 406 tft.printf("%d", lastToolNo);
BETZtechnik 1:e8452b75301e 407 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 408 //tft.setTextSize(2);
BETZtechnik 1:e8452b75301e 409 // tft.printf("T");
BETZtechnik 1:e8452b75301e 410 tft.setCursor(22,28);
BETZtechnik 1:e8452b75301e 411 tft.printf("%d", currentToolNo);
BETZtechnik 1:e8452b75301e 412 tempLastAngle = 0;
BETZtechnik 1:e8452b75301e 413 eeprom.read(currentToolNo, &tempLastAngle);
BETZtechnik 1:e8452b75301e 414 lastAngle = (int)tempLastAngle;
BETZtechnik 1:e8452b75301e 415 lastAngle = lastAngle - 45; // Not storing signed int, so signed value is 45 less than what was stored to memory.
BETZtechnik 1:e8452b75301e 416 //RotaryEncoder knob1(D2, D3, -45, 45, lastAngle); // RotaryEncoder(PinName pin1_name, PinName pin2_name, int min = 0, int max = 100, int val = 50);
BETZtechnik 1:e8452b75301e 417 //knob1.val = lastAngle;
BETZtechnik 1:e8452b75301e 418 n1Pos = lastAngle;
BETZtechnik 1:e8452b75301e 419 eeprom.write(currentToolAddress, currentToolNo);
BETZtechnik 1:e8452b75301e 420 //wait(0.1);
BETZtechnik 1:e8452b75301e 421 lastToolNo = currentToolNo;
BETZtechnik 0:09419d572e90 422 }
BETZtechnik 0:09419d572e90 423
BETZtechnik 0:09419d572e90 424
BETZtechnik 0:09419d572e90 425 if (n1Pos != lastN1Pos){
BETZtechnik 1:e8452b75301e 426 tft.setCursor(40, 4);
BETZtechnik 0:09419d572e90 427 tft.setTextColor(BLACK);
BETZtechnik 0:09419d572e90 428 tft.setTextSize(2);
BETZtechnik 0:09419d572e90 429 tft.printf("%d", lastN1Pos);
BETZtechnik 1:e8452b75301e 430 tft.setCursor(40,4);
BETZtechnik 1:e8452b75301e 431 tft.setTextColor(GREEN);
BETZtechnik 0:09419d572e90 432 tft.setTextSize(2);
BETZtechnik 0:09419d572e90 433 tft.printf("%d", n1Pos);
BETZtechnik 1:e8452b75301e 434 eeprom.write(currentToolNo, n1Pos + 45); // store new angle in eeprom, add 45 because its an unsigned value.
BETZtechnik 1:e8452b75301e 435 //wait(0.1); // adjusted from 1
BETZtechnik 1:e8452b75301e 436 dir=1;
BETZtechnik 1:e8452b75301e 437 device.printf("N");
BETZtechnik 1:e8452b75301e 438 device.printf("%d", n1Pos + 145); //send over RS485 add 145 so no negative values and always 3 digits. 1xx for N1, 2xx for nozzle 2
BETZtechnik 1:e8452b75301e 439 //device.printf("N245"); // TEST!!!
BETZtechnik 1:e8452b75301e 440 tft.setCursor(100, 50);
BETZtechnik 1:e8452b75301e 441 tft.setTextSize(2);
BETZtechnik 1:e8452b75301e 442 tft.printf("%d", n1Pos + 145);
BETZtechnik 1:e8452b75301e 443 //wait(0.05);
BETZtechnik 1:e8452b75301e 444 dir=0;
BETZtechnik 0:09419d572e90 445 lastN1Pos = n1Pos;
BETZtechnik 0:09419d572e90 446 }
BETZtechnik 1:e8452b75301e 447
BETZtechnik 1:e8452b75301e 448 if (numTools != lastNumTools){
BETZtechnik 1:e8452b75301e 449 tft.setCursor(55, 95);
BETZtechnik 1:e8452b75301e 450 tft.setTextColor(BLACK);
BETZtechnik 1:e8452b75301e 451 tft.setTextSize(1);
BETZtechnik 1:e8452b75301e 452 tft.printf("%d", lastNumTools);
BETZtechnik 1:e8452b75301e 453 tft.setCursor(55,95);
BETZtechnik 1:e8452b75301e 454 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 455 tft.setTextSize(1);
BETZtechnik 1:e8452b75301e 456 tft.printf("%d", numTools);
BETZtechnik 1:e8452b75301e 457 eeprom.write(numToolsAddress, numTools); // store new angle in eeprom, add 45 because its an unsigned value.
BETZtechnik 1:e8452b75301e 458 //wait(0.1); // adjusted from 1
BETZtechnik 1:e8452b75301e 459 lastNumTools = numTools;
BETZtechnik 1:e8452b75301e 460 }
BETZtechnik 0:09419d572e90 461
BETZtechnik 1:e8452b75301e 462 if (numNoz != lastNumNoz){
BETZtechnik 1:e8452b75301e 463 tft.setCursor(55, 110);
BETZtechnik 1:e8452b75301e 464 tft.setTextColor(BLACK);
BETZtechnik 1:e8452b75301e 465 tft.setTextSize(1);
BETZtechnik 1:e8452b75301e 466 tft.printf("%d", lastNumNoz);
BETZtechnik 1:e8452b75301e 467 tft.setCursor(55,110);
BETZtechnik 1:e8452b75301e 468 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 469 tft.setTextSize(1);
BETZtechnik 1:e8452b75301e 470 tft.printf("%d", numNoz);
BETZtechnik 1:e8452b75301e 471 eeprom.write(numNozAddress, numNoz); // store new angle in eeprom, add 45 because its an unsigned value.
BETZtechnik 1:e8452b75301e 472 //wait(0.1); // adjusted from 1
BETZtechnik 1:e8452b75301e 473
BETZtechnik 1:e8452b75301e 474 if (numNoz == 2){
BETZtechnik 1:e8452b75301e 475 tft.setCursor(80, 4);
BETZtechnik 1:e8452b75301e 476 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 477 tft.setTextSize(2);
BETZtechnik 1:e8452b75301e 478 tft.printf("N2");
BETZtechnik 1:e8452b75301e 479 tft.drawRect(78,2,74,18,WHITE);
BETZtechnik 1:e8452b75301e 480 }
BETZtechnik 1:e8452b75301e 481 if (numNoz == 1){
BETZtechnik 1:e8452b75301e 482 tft.setCursor(80, 4);
BETZtechnik 1:e8452b75301e 483 tft.setTextColor(BLACK);
BETZtechnik 1:e8452b75301e 484 tft.setTextSize(2);
BETZtechnik 1:e8452b75301e 485 tft.printf("N2");
BETZtechnik 1:e8452b75301e 486 tft.drawRect(78,2,74,18,BLACK);
BETZtechnik 1:e8452b75301e 487 }
BETZtechnik 1:e8452b75301e 488 lastNumNoz = numNoz;
BETZtechnik 1:e8452b75301e 489 }
BETZtechnik 0:09419d572e90 490
BETZtechnik 0:09419d572e90 491
BETZtechnik 0:09419d572e90 492
BETZtechnik 1:e8452b75301e 493
BETZtechnik 1:e8452b75301e 494 if (count != lastCount){
BETZtechnik 1:e8452b75301e 495 tft.setCursor(150, 100);
BETZtechnik 1:e8452b75301e 496 tft.setTextColor(BLACK);
BETZtechnik 1:e8452b75301e 497 tft.setTextSize(1);
BETZtechnik 1:e8452b75301e 498 tft.printf("%d", lastCount);
BETZtechnik 1:e8452b75301e 499 tft.setCursor(150,100);
BETZtechnik 1:e8452b75301e 500 tft.setTextColor(RED);
BETZtechnik 1:e8452b75301e 501 tft.setTextSize(1);
BETZtechnik 1:e8452b75301e 502 tft.printf("%d", count);
BETZtechnik 1:e8452b75301e 503 lastCount = count;
BETZtechnik 1:e8452b75301e 504 }
BETZtechnik 1:e8452b75301e 505
BETZtechnik 1:e8452b75301e 506 //**************************** RS485 link ***************************************
BETZtechnik 1:e8452b75301e 507
BETZtechnik 1:e8452b75301e 508 //dir =0; // receiver enable
BETZtechnik 3:bbbacfd62773 509 /*
BETZtechnik 1:e8452b75301e 510 if (device.readable())
BETZtechnik 1:e8452b75301e 511 {
BETZtechnik 1:e8452b75301e 512 c = device.getc();
BETZtechnik 1:e8452b75301e 513 if(c=='B'){
BETZtechnik 1:e8452b75301e 514 received = 1;
BETZtechnik 1:e8452b75301e 515 }
BETZtechnik 1:e8452b75301e 516 }
BETZtechnik 1:e8452b75301e 517
BETZtechnik 1:e8452b75301e 518 if (received == 1){
BETZtechnik 1:e8452b75301e 519 tft.setCursor(150, 80);
BETZtechnik 1:e8452b75301e 520 tft.setTextColor(WHITE);
BETZtechnik 1:e8452b75301e 521 tft.setTextSize(1);
BETZtechnik 1:e8452b75301e 522 tft.printf("1");
BETZtechnik 1:e8452b75301e 523 }
BETZtechnik 1:e8452b75301e 524
BETZtechnik 3:bbbacfd62773 525 */
BETZtechnik 3:bbbacfd62773 526
BETZtechnik 7:d3c19705042b 527
BETZtechnik 3:bbbacfd62773 528 while (device.readable())
BETZtechnik 3:bbbacfd62773 529 {
BETZtechnik 3:bbbacfd62773 530 c = device.getc();
BETZtechnik 3:bbbacfd62773 531
BETZtechnik 3:bbbacfd62773 532 if (c == 'T'){ // Actual tool number sent over serial
BETZtechnik 3:bbbacfd62773 533
BETZtechnik 3:bbbacfd62773 534 index = 1;
BETZtechnik 3:bbbacfd62773 535
BETZtechnik 3:bbbacfd62773 536 }
BETZtechnik 3:bbbacfd62773 537
BETZtechnik 3:bbbacfd62773 538
BETZtechnik 3:bbbacfd62773 539 if (c == 'M'){ // magazine + or - sent over serial
BETZtechnik 3:bbbacfd62773 540 index = 5;
BETZtechnik 3:bbbacfd62773 541 }
BETZtechnik 3:bbbacfd62773 542
BETZtechnik 3:bbbacfd62773 543 if (index == 1){
BETZtechnik 3:bbbacfd62773 544 c = device.getc();
BETZtechnik 3:bbbacfd62773 545 if (c == '1'){ // hundreds place to know we are sending 3 digits
BETZtechnik 3:bbbacfd62773 546 index = 2;
BETZtechnik 3:bbbacfd62773 547 }
BETZtechnik 3:bbbacfd62773 548 }
BETZtechnik 3:bbbacfd62773 549
BETZtechnik 3:bbbacfd62773 550
BETZtechnik 3:bbbacfd62773 551
BETZtechnik 3:bbbacfd62773 552 if (index == 2){ // tool number 10's column
BETZtechnik 3:bbbacfd62773 553
BETZtechnik 3:bbbacfd62773 554 c = device.getc();
BETZtechnik 3:bbbacfd62773 555
BETZtechnik 3:bbbacfd62773 556 if (c=='0'){
BETZtechnik 3:bbbacfd62773 557 Tens = 0;
BETZtechnik 3:bbbacfd62773 558 index = 4;
BETZtechnik 3:bbbacfd62773 559
BETZtechnik 3:bbbacfd62773 560 }
BETZtechnik 3:bbbacfd62773 561
BETZtechnik 3:bbbacfd62773 562 else if (c=='1'){
BETZtechnik 3:bbbacfd62773 563 Tens = 1;
BETZtechnik 3:bbbacfd62773 564 index = 4;
BETZtechnik 3:bbbacfd62773 565
BETZtechnik 3:bbbacfd62773 566 }
BETZtechnik 3:bbbacfd62773 567
BETZtechnik 3:bbbacfd62773 568 else if (c=='2'){
BETZtechnik 3:bbbacfd62773 569 Tens = 2;
BETZtechnik 3:bbbacfd62773 570 index = 4;
BETZtechnik 3:bbbacfd62773 571
BETZtechnik 3:bbbacfd62773 572 }
BETZtechnik 3:bbbacfd62773 573
BETZtechnik 3:bbbacfd62773 574 else if (c=='3'){
BETZtechnik 3:bbbacfd62773 575 Tens = 3;
BETZtechnik 3:bbbacfd62773 576 index = 4;
BETZtechnik 3:bbbacfd62773 577
BETZtechnik 3:bbbacfd62773 578 }
BETZtechnik 3:bbbacfd62773 579
BETZtechnik 3:bbbacfd62773 580 else if (c=='4'){
BETZtechnik 3:bbbacfd62773 581 Tens = 4;
BETZtechnik 3:bbbacfd62773 582 index = 4;
BETZtechnik 3:bbbacfd62773 583 }
BETZtechnik 3:bbbacfd62773 584
BETZtechnik 3:bbbacfd62773 585 else if (c=='5'){ //max number of tools is 50
BETZtechnik 3:bbbacfd62773 586 Tens = 5;
BETZtechnik 3:bbbacfd62773 587 index = 4;
BETZtechnik 3:bbbacfd62773 588 }
BETZtechnik 3:bbbacfd62773 589
BETZtechnik 3:bbbacfd62773 590 }
BETZtechnik 3:bbbacfd62773 591
BETZtechnik 3:bbbacfd62773 592 if (index == 4){ // tool number ones column
BETZtechnik 3:bbbacfd62773 593
BETZtechnik 3:bbbacfd62773 594 c = device.getc();
BETZtechnik 3:bbbacfd62773 595
BETZtechnik 3:bbbacfd62773 596 if (c=='0'){
BETZtechnik 3:bbbacfd62773 597 Ones = 0;
BETZtechnik 3:bbbacfd62773 598
BETZtechnik 3:bbbacfd62773 599 }
BETZtechnik 3:bbbacfd62773 600
BETZtechnik 3:bbbacfd62773 601 else if (c=='1'){
BETZtechnik 3:bbbacfd62773 602 Ones = 1;
BETZtechnik 3:bbbacfd62773 603
BETZtechnik 3:bbbacfd62773 604
BETZtechnik 3:bbbacfd62773 605 }
BETZtechnik 3:bbbacfd62773 606
BETZtechnik 3:bbbacfd62773 607 else if (c=='2'){
BETZtechnik 3:bbbacfd62773 608 Ones = 2;
BETZtechnik 3:bbbacfd62773 609
BETZtechnik 3:bbbacfd62773 610 }
BETZtechnik 3:bbbacfd62773 611
BETZtechnik 3:bbbacfd62773 612 else if (c=='3'){
BETZtechnik 3:bbbacfd62773 613 Ones = 3;
BETZtechnik 3:bbbacfd62773 614
BETZtechnik 3:bbbacfd62773 615 }
BETZtechnik 3:bbbacfd62773 616
BETZtechnik 3:bbbacfd62773 617 else if (c=='4'){
BETZtechnik 3:bbbacfd62773 618 Ones = 4;
BETZtechnik 3:bbbacfd62773 619 }
BETZtechnik 3:bbbacfd62773 620
BETZtechnik 3:bbbacfd62773 621 else if (c=='5'){
BETZtechnik 3:bbbacfd62773 622 Ones = 5;
BETZtechnik 3:bbbacfd62773 623 }
BETZtechnik 3:bbbacfd62773 624
BETZtechnik 3:bbbacfd62773 625 else if (c=='6'){
BETZtechnik 3:bbbacfd62773 626 Ones = 6;
BETZtechnik 3:bbbacfd62773 627 }
BETZtechnik 3:bbbacfd62773 628
BETZtechnik 3:bbbacfd62773 629 else if (c=='7'){
BETZtechnik 3:bbbacfd62773 630 Ones = 7;
BETZtechnik 3:bbbacfd62773 631 }
BETZtechnik 3:bbbacfd62773 632
BETZtechnik 3:bbbacfd62773 633 else if (c=='8'){
BETZtechnik 3:bbbacfd62773 634 Ones = 8;
BETZtechnik 3:bbbacfd62773 635 }
BETZtechnik 3:bbbacfd62773 636
BETZtechnik 3:bbbacfd62773 637 else if (c=='9'){
BETZtechnik 3:bbbacfd62773 638 Ones = 9;
BETZtechnik 3:bbbacfd62773 639 }
BETZtechnik 3:bbbacfd62773 640
BETZtechnik 3:bbbacfd62773 641 else if (c=='0'){
BETZtechnik 3:bbbacfd62773 642 Ones = 0;
BETZtechnik 3:bbbacfd62773 643 }
BETZtechnik 3:bbbacfd62773 644
BETZtechnik 3:bbbacfd62773 645
BETZtechnik 3:bbbacfd62773 646
BETZtechnik 3:bbbacfd62773 647 serialToolNumber = ((Tens * 10) + Ones);
BETZtechnik 3:bbbacfd62773 648
BETZtechnik 3:bbbacfd62773 649 currentToolNo = serialToolNumber; // update tool number
BETZtechnik 3:bbbacfd62773 650
BETZtechnik 3:bbbacfd62773 651 index=0;
BETZtechnik 3:bbbacfd62773 652
BETZtechnik 3:bbbacfd62773 653 }
BETZtechnik 3:bbbacfd62773 654
BETZtechnik 3:bbbacfd62773 655 if (index == 5){ // magazine monitoring
BETZtechnik 3:bbbacfd62773 656
BETZtechnik 3:bbbacfd62773 657
BETZtechnik 3:bbbacfd62773 658
BETZtechnik 3:bbbacfd62773 659 c = device.getc();
BETZtechnik 3:bbbacfd62773 660
BETZtechnik 7:d3c19705042b 661 if (c == '+'){
BETZtechnik 3:bbbacfd62773 662
BETZtechnik 3:bbbacfd62773 663
BETZtechnik 3:bbbacfd62773 664 currentToolNo = (currentToolNo +1);
BETZtechnik 3:bbbacfd62773 665 if (currentToolNo > numTools){
BETZtechnik 3:bbbacfd62773 666 currentToolNo = 1;
BETZtechnik 3:bbbacfd62773 667 }
BETZtechnik 3:bbbacfd62773 668 index = 0;
BETZtechnik 3:bbbacfd62773 669 }
BETZtechnik 7:d3c19705042b 670 else if (c == '-'){
BETZtechnik 3:bbbacfd62773 671
BETZtechnik 3:bbbacfd62773 672 tft.setTextColor(WHITE);
BETZtechnik 3:bbbacfd62773 673 tft.setCursor(100, 100);
BETZtechnik 3:bbbacfd62773 674 tft.printf("1");
BETZtechnik 3:bbbacfd62773 675
BETZtechnik 3:bbbacfd62773 676 currentToolNo = (currentToolNo -1);
BETZtechnik 3:bbbacfd62773 677 if (currentToolNo < 1){
BETZtechnik 3:bbbacfd62773 678 currentToolNo = numTools;
BETZtechnik 3:bbbacfd62773 679 }
BETZtechnik 3:bbbacfd62773 680 index = 0;
BETZtechnik 3:bbbacfd62773 681 }
BETZtechnik 3:bbbacfd62773 682
BETZtechnik 3:bbbacfd62773 683 }
BETZtechnik 3:bbbacfd62773 684 }
BETZtechnik 7:d3c19705042b 685
BETZtechnik 3:bbbacfd62773 686
BETZtechnik 3:bbbacfd62773 687
BETZtechnik 3:bbbacfd62773 688
BETZtechnik 3:bbbacfd62773 689
BETZtechnik 3:bbbacfd62773 690
BETZtechnik 1:e8452b75301e 691
BETZtechnik 1:e8452b75301e 692 }
BETZtechnik 1:e8452b75301e 693 }
BETZtechnik 3:bbbacfd62773 694