f
Dependencies: TS_DISCO_F746NG mbed LCD_DISCO_F746NG mbed-rtos BSP_DISCO_F746NG FatFS X_NUCLEO_IHM02A1
main.cpp
- Committer:
- emperord
- Date:
- 2019-03-08
- Revision:
- 2:37a61db8b04b
- Parent:
- 0:9933f7db9a9b
File content as of revision 2:37a61db8b04b:
#include "mbed.h" #include "TS_DISCO_F746NG.h" #include "LCD_DISCO_F746NG.h" #include "eeprom.h" #include <ctype.h> #include "rtos.h" #define USE_STM32746G_DISCOVERY #include "stm32f7xx_hal.h" #include "stm32746g_discovery.h" #include "stm32746g_discovery_sd.h" #include "string.h" #include "stm32746g_discovery_lcd.h" #include "ff_gen_drv.h" #include "sd_diskio.h" #include "XNucleoIHM02A1.h" #include "wolfman.h" #include "hfl.h" #include "PCF85263AT.h" #define FRAME_BUFFER 0xC0000000 #define SD_IN_BUFFER 0xC0140000 #define SD_OUT_BUFFER 0xC0280000 I2C i2c(D14,D15); // sda, scl char cmd[32]; dt_dat dt; FATFS SDFatFs; FIL MyFile; Thread thread; Thread thread2; Thread thread3; LCD_DISCO_F746NG lcd; TS_DISCO_F746NG ts; extern SD_HandleTypeDef uSdHandle; DMA2D_HandleTypeDef hdma2d_disco; Serial pc(USBTX, USBRX); char SDPath[4]; //char text [40]; char c; TS_StateTypeDef TS_State; uint16_t x, y; uint8_t text1[30]; uint8_t text2[30]; uint8_t text3[30]; uint8_t text4[60]; uint8_t text5[60]; uint8_t textn1[30]; uint8_t textn2[30]; uint8_t textn3[30]; uint8_t textn4[60]; uint8_t textn5[60]; uint8_t savereading[120]; uint8_t currenttime[60]; uint8_t idx; uint8_t cleared = 0; uint8_t prev_nb_touches = 0; static uint8_t nus_buffer[20]; double Silver = 0.0; double Copper = 0.0; double LEDCUR = 0.0; uint8_t cyclestep[7]; bool CuMODE = true; bool AgMODE = true; int screenstate = 0; int MODE = 0; int ZERO = 0.0; int DARK = 0.0; int READ = 0.0; int LVL = 0.0; double RAW = 0.0; double SilverRAW = 0.0; double CopperRAW = 0.0; int writefail = 0; int* toucharrow; int* touchbutt; bool ManMode = false; FRESULT ress; uint32_t bytesread; double TempCurrent = 0.0; //PwmOut pump1(PA_8); DigitalOut pump1(D0); // PA_8 DigitalOut pump2(D1); //PA_15; DigitalOut pump3(A3); //DigitalOut pump4(A2); DigitalOut pump5(A4); DigitalOut pump6(A5); PwmOut LED515(D10); PwmOut LED480(A2); DigitalOut LEDLD(D8); DigitalOut LEDBL(D9); DigitalOut Tempcs(A0); DigitalOut Heat(A1); SPI spi(D11, D12, D13); // mosi, miso, sclk DigitalOut cs(D7); /* Number of movements per revolution. */ #define MPR_1 4 /* Number of steps. */ #define STEPS_1 (200 * 128) /* 1 revolution given a 400 steps motor configured at 1/128 microstep mode. */ #define STEPS_2 (STEPS_1 * 2) /* Delay in milliseconds. */ #define DELAY_1 1000 #define DELAY_2 2000 #define DELAY_3 5000 ///XNucleoIHM02A1 *x_nucleo_ihm02a1; L6470_init_t init[L6470DAISYCHAINSIZE] = { /* First Motor. */ { /* Ic configuration. */ }, /* Second Motor. */ { 12.0, /* Motor supply voltage in V. */ 200, /* Min number of steps per revolution for the motor. */ 1.5, /* Max motor phase voltage in A. */ 4.2, /* Max motor phase voltage in V. */ 100.0, /* Motor initial speed [step/s]. */ 400.0, /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */ 400.0, /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */ 900.0, /* Motor maximum speed [step/s]. */ 0.0, /* Motor minimum speed [step/s]. */ 902.7, /* Motor full-step speed threshold [step/s]. */ 1.5, /* Holding kval [V]. */ 5.2, /* Constant speed kval [V]. */ 5.2, /* Acceleration starting kval [V]. */ 5.2, /* Deceleration starting kval [V]. */ 371.52, /* Intersect speed for bemf compensation curve slope changing [step/s]. */ 392.1569e-6, /* Start slope [s/step]. */ 643.1372e-6, /* Acceleration final slope [s/step]. */ 643.1372e-6, /* Deceleration final slope [s/step]. */ 0, /* Thermal compensation factor (range [0, 15]). */ 3.06 * 1000 * 1.10, /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */ 3.06 * 1000 * 1.00, /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */ StepperMotor::STEP_MODE_1_128, /* Step mode selection. */ 0xFF, /* Alarm conditions enable. */ 0x2E88 /* Ic configuration. */ } }; XNucleoIHM02A1 *x_nucleo_ihm02a1 = new XNucleoIHM02A1(&init[0], &init[1], D5/*D14*/, D4/*D15*/, D2/*D4*/, D6/*A2*/, D11, D12, D13); L6470 **motors = x_nucleo_ihm02a1->get_components(); /* Virtual address defined by the user: 0xFFFF value is prohibited */ uint16_t VirtAddVarTab[NB_OF_VAR] = {0x5555, 0x6666, 0x7777, 0x8888, 0x8899, 0x5655, 0x6776, 0x7887, 0x7117}; uint16_t VarDataTab[] = {2, 1, 5, 1, 1, 60, 1, 0, 0}; //ADC Struct for sensor union LTC2400 { unsigned int raw; unsigned char byte[4]; struct { unsigned int sub:4, reading:24, exr:1, sgn:1, dmy:1, eoc:1; }; } adc; //Prime Button int primeon[4]; int pcount = 0; //Man Button int Manonoff[4]; //CuMODE Button int CuMODEonoff[4]; //AgMODE Button int AgMODEonoff[4]; //screen mode int screenmode[4]; //All Button int Aonoff[4]; bool Aon = 0; //pump1 double p1count = 3; int p1up[4]; int p1down[4]; int p1onoff[4]; bool p1on = false; //pump2 double p2count = 5; int p2up[4]; int p2down[4]; int p2onoff[4]; bool p2on = false; //pump3 double p3count = 1; int p3up[4]; int p3down[4]; int p3onoff[4]; bool p3on = false; //pump4 double p4count = 1; int p4up[4]; int p4down[4]; int p4onoff[4]; bool p4on = false; //Sole5 double p5count = 1; int p5up[4]; int p5down[4]; int p5onoff[4]; bool p5on = false; //Pump6 double p6count = 6; int p6up[4]; int p6down[4]; int p6onoff[4]; bool p6on = false; //Pump7 double p7count = 1; int p7up[4]; int p7down[4]; int p7onoff[4]; bool p7on = false; //date/time double d1count = 1; int d1up[4]; int d1down[4]; double d2count = 1; int d2up[4]; int d2down[4]; double d3count = 1; int d3up[4]; int d3down[4]; double d4count = 1; int d4up[4]; int d4down[4]; double d5count = 1; int d5up[4]; int d5down[4]; int savedate[4]; double d6count = 0; int d6up[4]; int d6down[4]; void set_ch(char sel) { // PCA9541のサンプル // MST_0側の自分にスレーブ側の制御権を得る場合 cmd[0] = 1; // PCA9541 コマンドコード Cont Reg i2c.write( 0xe2, cmd, 1); // Cont Regを指定 i2c.read( 0xe2, cmd, 1); // Cont Regを読込み wait(0.1); // 0.1s待つ switch(cmd[0] & 0xf) { case 0: // bus off, has control case 1: // bus off, no control case 5: // bus on, no control cmd[0] = 1; // PCA9541 コマンドコード Cont Reg cmd[1] = 4; // bus on, has control i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み i2c.read( 0xe2, cmd, 1); // Cont Regを読込み break; case 2: // bus off, no control case 3: // bus off, has control case 6: // bus on, no control cmd[0] = 1; // PCA9541 コマンドコード Cont Reg cmd[1] = 5; // bus on, has control i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み i2c.read( 0xe2, cmd, 1); // Cont Regを読込み break; case 9: // bus on, no control case 0xc: // bus on, no control case 0xd: // bus off, no control cmd[0] = 1; // PCA9541 コマンドコード Cont Reg cmd[1] = 0; // bus on, has control i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み i2c.read( 0xe2, cmd, 1); // Cont Regを読込み break; case 0xa: // bus on, no control case 0xe: // bus off, no control case 0xf: // bus on, has control cmd[0] = 1; // PCA9541 コマンドコード Cont Reg cmd[1] = 1; // bus on, has control i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み i2c.read( 0xe2, cmd, 1); // Cont Regを読込み break; default: break; } cmd[0] = sel; // PCA9546 Cont Reg sel channel enabled i2c.write( 0xe8, cmd, 1); // Send command string } void get_time(dt_dat *dt) // 日時の取得 { cmd[0] = Seconds_100th; // 取得はレジスタSecondsから i2c.write(PCF85263AT_ADDR, cmd, 1); // レジスタの設定 i2c.read(PCF85263AT_ADDR, cmd, 8); // SecondsからYearsまで取得 cmd[1] &= 0x7f; // 有効なのは下位7ビット dt->s = (cmd[1] >> 4) * 10 + (cmd[1] & 0xf); // BCDの数値化 cmd[2] &= 0x7f; // 有効なのは下位7ビット dt->m = (cmd[2] >> 4) * 10 + (cmd[2] & 0xf); // BCDの数値化 cmd[3] &= 0x3f; // 有効なのは下位6ビット dt->h = (cmd[3] >> 4) * 10 + (cmd[3] & 0xf); // BCDの数値化 cmd[4] &= 0x3f; // 有効なのは下位6ビット dt->d = (cmd[4] >> 4) * 10 + (cmd[4] & 0xf); // BCDの数値化 dt->wd = (cmd[5] & 0x3); // BCDの数値化 cmd[6] &= 0x1f; // 有効なのは下位5ビット dt->mm = (cmd[6] >> 4) * 10 + (cmd[6] & 0xf); // BCDの数値化 dt->y = (cmd[7] >> 4) * 10 + (cmd[7] & 0xf); // BCDの数値化 } void set_time(dt_dat *dt) // 日時の設定 { cmd[0] = Seconds_100th; // 設定はレジスタSeconds_100thから cmd[1] = ((dt->s100th / 10) << 4) + (dt->s100th % 10);// 0.01秒のBCD化 cmd[2] = ((dt->s / 10) << 4) + (dt->s % 10) + 0x80; // 秒のBCD化 cmd[3] = ((dt->m / 10) << 4) + (dt->m % 10); // 分のBCD化 cmd[4] = ((dt->h / 10) << 4) + (dt->h % 10); // 時のBCD化 cmd[5] = ((dt->d / 10) << 4) + (dt->d % 10); // 日のBCD化 cmd[7] = ((dt->mm / 10) << 4) + (dt->mm % 10); // 月のBCD化 dt->y = dt->y - 2000; cmd[8] = ((dt->y / 10) << 4) + (dt->y % 10); // 年のBCD化 i2c.write(PCF85263AT_ADDR, cmd, 9); // 日時の設定 } int * DrawButton(int x, int y, int w, int h){ int* pointer; int butttouch[4]; pointer = butttouch; lcd.FillRect(x, y, w, h); butttouch[0] = x; butttouch[1] = x+w; butttouch[2] = y; butttouch[3] = y+h; return pointer; } int * DrawArrow(int x, int y, int d, int s){ int* pointer; int arrowtouch[4]; pointer = arrowtouch; if (d == 1) { Point points[] = {{x-10*s,y+10*s},{x,y},{x+10*s,y+10*s},{x+2*s,y+10*s},{x+2*s,y+20*s},{x-2*s,y+20*s},{x-2*s,y+10*s}}; lcd.FillPolygon(points,7); arrowtouch[0] = x-10*s; arrowtouch[1] = x+10*s; arrowtouch[2] = y; arrowtouch[3] = y+20*s; } else if (d == 2) { Point points[] = {{x+10*s,y-10*s},{x,y},{x-10*s,y-10*s},{x-2*s,y-10*s},{x-2*s,y-20*s},{x+2*s,y-20*s},{x+2*s,y-10*s}}; lcd.FillPolygon(points,7); arrowtouch[0] = x-10*s; arrowtouch[1] = x+10*s; arrowtouch[2] = y-20*s; arrowtouch[3] = y; } else if (d == 3) { Point points[] = {{x,y},{x-10*s,y-10*s},{x-10*s,y-2*s},{x-20*s,y-2*s},{x-20*s,y+2*s},{x-10*s,y+2*s},{x-10*s,y+10*s}}; lcd.FillPolygon(points,7); arrowtouch[0] = x-10*s; arrowtouch[1] = x+10*s; arrowtouch[2] = y-20*s; arrowtouch[3] = y; } else if (d == 4) { Point points[] = {{x,y},{x+10*s,y+10*s},{x+10*s,y+2*s},{x+20*s,y+2*s},{x+20*s,y-2*s},{x+10*s,y-2*s},{x+10*s,y-10*s}}; lcd.FillPolygon(points,7); arrowtouch[0] = x-10*s; arrowtouch[1] = x+10*s; arrowtouch[2] = y-20*s; arrowtouch[3] = y; } return pointer; } void runpump(){ if (ManMode == true) { while (1) { //pump1 if (p1on == true) { for (int j = 1; j<=p1count; j++) { pump1 = 1; Thread::wait(400); pump1 = 0; Thread::wait(600); } } //pump2 if (p2on == true) { for (int j = 1; j<=p2count; j++) { pump2 = 1; Thread::wait(400); pump2 = 0; Thread::wait(600); } } //pump3 if (p3on == true) { for (int j = 1; j<=p3count; j++) { pump3 = 1; Thread::wait(400); pump3 = 0; Thread::wait(600); } } /* //pump4 if (p4on == true) { for (int j = 1; j<=p4count; j++) { pump4 = 1; Thread::wait(400); pump4 = 0; Thread::wait(600); } } */ //Sole5 if (p5on == true) { for (int j = 1; j<=p5count; j++) { pump5 = 1; Thread::wait(5000); pump5 = 0; Thread::wait(300); } } //Pump6 if (p6on == true) { for (int j = 1; j<=p6count; j++) { pump6 = 1; Thread::wait(100); pump6 = 0; Thread::wait(100); } } //Pump7 if (p7on == true) { for (int j = 1; j<=p7count; j++) { motors[1]->move(StepperMotor::BWD, STEPS_1*6.15); //motors[1]->wait_while_active(); Thread::wait(300); } } Thread::wait(2000); } } else { //pump1 if (p1on == true) { for (int j = 1; j<=p1count; j++) { pump1 = 1; Thread::wait(400); pump1 = 0; Thread::wait(600); } } //pump2 if (p2on == true) { for (int j = 1; j<=p2count; j++) { pump2 = 1; Thread::wait(400); pump2 = 0; Thread::wait(600); } } //pump3 if (p3on == true) { for (int j = 1; j<=p3count; j++) { pump3 = 1; Thread::wait(400); pump3 = 0; Thread::wait(600); } } /* //pump4 if (p4on == true) { for (int j = 1; j<=p4count; j++) { pump4 = 1; Thread::wait(400); pump4 = 0; Thread::wait(600); } } */ //Sole5 if (p5on == true) { for (int j = 1; j<=p5count; j++) { pump5 = 1; Thread::wait(5000); //Wash cycle will go here pump5 = 0; Thread::wait(300); } } //Pump6 if (p6on == true) { for (int j = 1; j<=p6count; j++) { pump6 = 1; Thread::wait(100); pump6 = 0; Thread::wait(100); } } //Pump7 if (p7on == true) { for (int j = 1; j<=p7count; j++) { motors[1]->move(StepperMotor::BWD, STEPS_1*6.15); //motors[1]->wait_while_active(); Thread::wait(4000); } } } } void fill() { if (MODE != 6) { MODE = 5; } p1on = false; p2on = false; p3on = false; p4on = false; p5on = false; p6on = false; p7on = true; runpump(); if (MODE != 6) { MODE = 4; } } void drain() { p1on = false; p2on = false; p3on = false; p4on = false; p5on = true; p6on = false; p7on = false; runpump(); } void wash() { MODE = 6; pump5 = 1; motors[1]->move(StepperMotor::BWD, STEPS_1*18.45); Thread::wait(4000); //motors[1]->wait_while_active(); pump5 = 0; motors[1]->move(StepperMotor::BWD, STEPS_1*18.45); Thread::wait(4000); //motors[1]->wait_while_active(); pump5 = 1; Thread::wait(3000); pump5 = 0; MODE = 4; /* drain(); Thread::wait(100); fill(); Thread::wait(100); drain(); Thread::wait(100) ; fill(); Thread::wait(100); drain(); Thread::wait(100) ; fill(); Thread::wait(100); drain(); Thread::wait(100); fill(); Thread::wait(100); fill(); Thread::wait(100); fill(); Thread::wait(100); drain(); Thread::wait(100); MODE = 4; */ } void mix() { MODE = 7; p1on = false; p2on = false; p3on = false; p4on = false; p5on = false; p6on = true; p7on = false; runpump(); Thread::wait(1000); MODE = 4; } void Agbuffer() { MODE = 8; p1on = true; p2on = false; p3on = false; p4on = false; p5on = false; p6on = false; p7on = false; runpump(); MODE = 4; } void Agindicator() { MODE = 9; p1on = false; p2on = true; p3on = false; p4on = false; p5on = false; p6on = false; p7on = false; runpump(); MODE = 4; } void CuIndicator() { MODE = 10; p1on = false; p2on = false; p3on = true; p4on = false; p5on = false; p6on = false; p7on = false; runpump(); MODE = 4; } void ClSoln() { MODE = 11; p1on = false; p2on = false; p3on = false; p4on = true; p5on = false; p6on = false; p7on = false; runpump(); MODE = 4; } unsigned int read() { spi.format(8,0); cs = 0; Thread::wait(200); for( int i = 3; i >= 0; i-- ) { adc.byte[i] = spi.write( 0xFF ); } cs = 1; return adc.reading; } unsigned int readtemp() { spi.format(8,0); Tempcs = 0; Thread::wait(200); for( int i = 3; i >= 0; i-- ) { adc.byte[i] = spi.write( 0xFF ); } Tempcs = 1; return adc.reading; } unsigned int readl(int take) { LED515.write(0.0); LED480.write(0.0); LEDLD = 0; LEDBL = 0; unsigned int res = 1; unsigned int resp = 0; if (take == 0) { MODE = 0; LEDCUR=0.0; Thread::wait(2000); while (resp < res) { resp = read(); res = read(); } Thread::wait(2000); unsigned int DF = read(); unsigned int basereading = 0; double i = 0.0; while (basereading <= DF) { i = i + 0.001; LED515.write(i); res = 1; resp = 0; while (resp < res) { resp = read(); res = read(); } basereading = read(); } LEDCUR = i + 0.001f; LED515.write(i + 0.001f); Thread::wait(2000); while (resp < res) { resp = read(); res = read(); } res = read(); MODE = 4; pc.printf("DARK: %d LEDCUR: %f\r\n", res, LEDCUR); } if (take == 1) { MODE = 1; LED515.write(LEDCUR); while (read() <= 12000000) { LEDCUR = LEDCUR + 0.001f; LED515.write(LEDCUR); } Thread::wait(2000); while (resp < res) { resp = read(); res = read(); } res = read(); MODE = 4; pc.printf("ZERO: %d\r\n", res); } if (take == 2) { MODE = 2; LED515.write(LEDCUR); Thread::wait(2000); while (resp < res) { resp = read(); res = read(); } res = read(); MODE = 4; pc.printf("READ: %d\r\n", res); } if (take == 3) { MODE = 12; LEDLD=1; Thread::wait(2000); while (resp < res) { resp = read(); res = read(); } res = read(); LEDLD=0; MODE = 4; pc.printf("Level: %d\r\n", res); } /// if (take == 4) { MODE = 0; LEDCUR=0.0; Thread::wait(2000); while (resp < res) { resp = read(); res = read(); } Thread::wait(2000); unsigned int DF = read(); unsigned int basereading = 0; double i = 0.0; while (basereading <= DF) { i = i + 0.001; LED480.write(i); res = 1; resp = 0; while (resp < res) { resp = read(); res = read(); } basereading = read(); } LEDCUR = i + 0.001f; LED480.write(i + 0.001f); Thread::wait(2000); while (resp < res) { resp = read(); res = read(); } res = read(); LED480.write(0.0); MODE = 4; pc.printf("DARK: %d LEDCUR: %f\r\n", res, LEDCUR); } if (take == 5) { MODE = 1; LED480.write(LEDCUR); while (read() <= 12000000) { LEDCUR = LEDCUR + 0.001f; LED480.write(LEDCUR); } Thread::wait(2000); while (resp < res) { resp = read(); res = read(); } res = read(); LED480.write(0.0); MODE = 4; pc.printf("ZERO: %d\r\n", res); } if (take == 6) { MODE = 2; LED480.write(LEDCUR); Thread::wait(2000); while (resp < res) { resp = read(); res = read(); } res = read(); LED480.write(0.0); MODE = 4; pc.printf("READ: %d\r\n", res); } /// LEDBL=1; return res; } void saveit() { Thread::wait(200); get_time(&dt); Thread::wait(200); memset((char*)savereading,0,sizeof(savereading)); Thread::wait(1000); sprintf((char*)savereading, "%04d/%02d/%02d %02d:%02d:%02d,%0.1f,%0.5f,%0.1f,%0.5f,%0.5f,%0.5f,%0.5f\n", 2000 + dt.y, dt.mm, dt.d, dt.h, dt.m, dt.s, Silver, SilverRAW, Copper, CopperRAW, ((double)DARK/16777216)*3.302, ((double)ZERO/16777216)*3.302, ((double)READ/16777216)*3.302); Thread::wait(1000); ress = f_open(&MyFile, "Log.csv", FA_WRITE); Thread::wait(200); if(ress!= FR_OK) { pc.printf("Failed to open file\n"); ress = f_open(&MyFile, "Log.csv", FA_CREATE_ALWAYS); if(ress!= FR_OK) { pc.printf("Failed to open file\n"); } } Thread::wait(200); f_lseek(&MyFile, f_size(&MyFile)); Thread::wait(200); ress = f_write(&MyFile, savereading, sizeof(savereading), &bytesread); Thread::wait(200); if(ress!= FR_OK) { pc.printf("Failed to write file 1\n"); MODE = 13; writefail = 1; Thread::wait(3000); } else { pc.printf("Done!\n"); MODE = 11; writefail = 0; } Thread::wait(200); f_close(&MyFile); /* Thread::wait(200); FATFS_UnLinkDriver(SDPath); */ } void ReadSilver() { sprintf((char*)cyclestep, " - Ag"); wash(); //Thread::wait(30000); //to give heater time to warm water LVL = readl(3); while (LVL > 9000000) { fill(); LVL = readl(3); } Thread::wait(2000); DARK = readl(0); Thread::wait(2000); ZERO = readl(1); Agbuffer(); mix(); Agindicator(); mix(); Thread::wait(60000); sprintf((char*)cyclestep, " - Ag"); READ = readl(2); double x = abs(((float)READ-(float)DARK)/((float)ZERO-(float)DARK)); x = 2-log10(x*100); RAW = x; SilverRAW = RAW; //y = 10726x^2 – 301.98x – 5.1693 x = 10726*pow(x,2) - 301.98*x - 5.1693; if (x<0.0){ x=0.0;} Silver = x; sprintf((char*)cyclestep, ""); saveit(); } void ReadCopper() { sprintf((char*)cyclestep, " - Cu"); wash(); //Thread::wait(30000); //to give heater time to warm water LVL = readl(3); while (LVL > 9000000) { fill(); LVL = readl(3); } Thread::wait(2000); DARK = readl(4); Thread::wait(2000); ZERO = readl(5); CuIndicator(); mix(); Thread::wait(60000); sprintf((char*)cyclestep, " - Cu"); READ = readl(6); double x = abs(((float)READ-(float)DARK)/((float)ZERO-(float)DARK)); x = 2-log10(x*100); RAW = x; CopperRAW = RAW; //y = 4852.2x – 9.5947 x = 4852.2*x - 9.5947; if (x<0.0){ x=0.0;} Copper = x; sprintf((char*)cyclestep, ""); saveit(); } void ThermoStat() { TempCurrent = ((readtemp()/16777216.0) - 0.3756) * 660; pc.printf("%0.2f",TempCurrent); if (TempCurrent >= 41.0) { Heat = 0;} if (TempCurrent < 38.0) { Heat = 1;} } void reprime(); void takereading() { while (1) { LED515.write(0.0); LED480.write(0.0); LEDLD = 0; LEDBL = 0; LEDCUR = 0.0; if (ManMode == true) { DARK = readl(0); ZERO = readl(1); Thread::wait(5000); READ = readl(2); double x = abs(((float)READ-(float)DARK)/((float)ZERO-(float)DARK)); x = 2-log10(x*100); //x = 10.297*pow(x,2) - 21.909*x + 11.453; if (x < 0.0) { x = 0.0; } Copper = x; Silver = x; } if (ManMode == false) { ThermoStat(); if (AgMODE == true) { ReadSilver(); } if (CuMODE == true) { ReadCopper(); } drain(); for (int d6chld = 0; d6chld < d6count*56; d6chld++){ Thread::wait(60000); } if (d6count > 0) { reprime(); } } } } void prime(){ MODE = 3; thread3.terminate(); pump5 = 1; for (pcount = 0; pcount < 25; pcount++) { pump1 = 1; Thread::wait(200); pump1 = 0; pump2 = 1; Thread::wait(200); pump2 = 0; pump3 = 1; Thread::wait(200); pump3 = 0; /* pump4 = 1; Thread::wait(200); pump4 = 0; */ pump6 = 1; Thread::wait(200); pump6 = 0; motors[1]->move(StepperMotor::BWD, STEPS_1*6.15); //motors[1]->wait_while_active(); } Thread::wait(5000); pump5 = 0; Thread::wait(300); if (ManMode == true) { thread2.start(runpump); } thread3.start(takereading); pcount = 0; MODE = 4; } void reprime(){ MODE = 3; pump5 = 1; for (pcount = 0; pcount < 5; pcount++) { pump1 = 1; Thread::wait(200); pump1 = 0; pump2 = 1; Thread::wait(200); pump2 = 0; pump3 = 1; Thread::wait(200); pump3 = 0; /* pump4 = 1; Thread::wait(200); pump4 = 0; */ pump6 = 1; Thread::wait(200); pump6 = 0; } Thread::wait(2000); pump5 = 0; Thread::wait(300); pcount = 0; MODE = 4; } void screencycle(); void setdatetime() { cmd[0] = Oscillator; // Aging_offset cmd[1] = 0x80 + 0x40 + 0x1; // -1ppm i2c.write(PCF85263AT_ADDR, cmd, 2); // Aging_offset cmd[0] = Function; // Aging_offset cmd[1] = 0x1; // -1ppm i2c.write(PCF85263AT_ADDR, cmd, 2); // Aging_offset cmd[0] = Offset; // Aging_offset cmd[1] = 60; // -1ppm i2c.write(PCF85263AT_ADDR, cmd, 2); // Aging_offse dt.y = 2000+(int)d3count; dt.mm = (int)d1count; dt.d = (int)d2count; dt.h = (int)d4count; dt.m = (int)d5count; dt.s = 0; set_time(&dt); } void screen() { while(1) { if (p1count<0){p1count=0;} if (p2count<0){p2count=0;} if (p3count<0){p3count=0;} if (p4count<0){p4count=0;} if (p5count<0){p5count=0;} if (p6count<0){p6count=0;} if (p7count<0){p7count=0;} //pump1.pulsewidth(p1count/750000); if (p1on == true || p2on == true || p3on == true || p4on == true || p5on == true || p6on == true || p7on == true) { Aon = true; } if (p1on == false && p2on == false && p3on == false && p4on == false && p5on == false && p6on == false && p7on == false) { Aon = false; } if (writefail == 1) { lcd.SetTextColor(LCD_COLOR_RED); lcd.FillCircle(235,175,10); } //General Display lcd.SetFont(&Font16); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)textn1, "%0.1f/%0.5f Ag", Silver, SilverRAW); if (strcmp((char*)text1,(char*)textn1) != 0) { sprintf((char*)text1, "%0.1f/%0.5f Ag", Silver, SilverRAW); lcd.ClearStringLine(13); } lcd.DisplayStringAt(0, LINE(13), (uint8_t *)&text1, CENTER_MODE); lcd.SetFont(&Font16); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)textn4, "%0.1f/%0.5f Cu L:%d", Copper, CopperRAW, LVL); if (strcmp((char*)text4,(char*)textn4) != 0) { sprintf((char*)text4, "%0.1f/%0.5f Cu L:%d", Copper, CopperRAW, LVL); lcd.ClearStringLine(14); } lcd.DisplayStringAt(0, LINE(14), (uint8_t *)&text4, CENTER_MODE); lcd.SetTextColor(LCD_COLOR_DARKGRAY); sprintf((char*)textn4, "RAW=%0.4f | %d | %d | %d", RAW, DARK, ZERO, READ); if (strcmp((char*)text4,(char*)textn4) != 0) { sprintf((char*)text4, "RAW=%0.4f | %d | %d | %d", RAW, DARK, ZERO, READ); lcd.ClearStringLine(15); } lcd.DisplayStringAt(0, LINE(15), (uint8_t *)&text4, CENTER_MODE); sprintf((char*)textn5, "RAW Volts=%0.3f | %0.3f | %0.3f", ((double)DARK/16777216)*3.302, ((double)ZERO/16777216)*3.302, ((double)READ/16777216)*3.302); if (strcmp((char*)text5,(char*)textn5) != 0) { sprintf((char*)text5, "RAW Volts=%0.3f | %0.3f | %0.3f", ((double)DARK/16777216)*3.302, ((double)ZERO/16777216)*3.302, ((double)READ/16777216)*3.302); lcd.ClearStringLine(16); } lcd.DisplayStringAt(0, LINE(16), (uint8_t *)&text5, CENTER_MODE); if (MODE == 0 && (strcmp((char*)text3,"Dark Reading") != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Dark Reading"); } if (MODE == 1 && (strcmp((char*)text3,"Zeroing") != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Zeroing"); } if (MODE == 2 && (strcmp((char*)text3,"Reading") != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Reading"); } if (MODE == 3 && (strcmp((char*)text3,"Priming") != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Priming"); } sprintf((char*)textn3, "Waiting%s", cyclestep); if (MODE == 4 && (strcmp((char*)text3,(char*)textn3) != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Waiting%s", cyclestep); } if (MODE == 5 && (strcmp((char*)text3,"Sampling") != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Sampling"); } if (MODE == 6 && (strcmp((char*)text3,"Washing") != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Washing"); } if (MODE == 7 && (strcmp((char*)text3,"Mixing") != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Mixing"); } if (MODE == 8 && (strcmp((char*)text3,"Ag Buffer Dosing") != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Ag Buffer Dosing"); } if (MODE == 9 && (strcmp((char*)text3,"Ag Indicator Dosing") != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Ag Indicator Dosing"); } if (MODE == 10 && (strcmp((char*)text3,"Cu Indicator Dosing") != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Cu Indicator Dosing"); } if (MODE == 11 && (strcmp((char*)text3,"Write Success") != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Write Success"); } if (MODE == 12 && (strcmp((char*)text3,"Level") != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Level"); } if (MODE == 13 && (strcmp((char*)text3,"Write Fail") != 0)) { lcd.ClearStringLine(12); sprintf((char*)text3, "Write Fail"); } lcd.SetTextColor(LCD_COLOR_LIGHTRED); lcd.DisplayStringAt(0, LINE(12), (uint8_t *)&text3, CENTER_MODE); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.SetFont(&Font24); lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"WOLFMAN", CENTER_MODE); //Prime Button lcd.SetFont(&Font12); if (pcount == 0) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(20, 2, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ primeon[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(20, 2, (uint8_t *)"Prime", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(20, 2, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ primeon[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); sprintf((char*)nus_buffer, "%d", (int)pcount); lcd.DisplayStringAt(20, 2, (uint8_t *)nus_buffer, LEFT_MODE); } //Screen Mode //lcd.SetTextColor(LCD_COLOR_GREEN); //lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(230, 30, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ screenmode[ i ] = touchbutt[ i ]; } //Cu Only Button lcd.SetFont(&Font12); if (CuMODE == false) { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(90, 2, 25, 15); for( int i = 0 ; i < 4 ; ++i ){ CuMODEonoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(90, 2, (uint8_t *)"Cu", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(90, 2, 25, 15); for( int i = 0 ; i < 4 ; ++i ){ CuMODEonoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(90, 2, (uint8_t *)"Cu", LEFT_MODE); } //Ag Only Button lcd.SetFont(&Font12); if (AgMODE == false) { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(130, 2, 25, 15); for( int i = 0 ; i < 4 ; ++i ){ AgMODEonoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(130, 2, (uint8_t *)"Ag", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(130, 2, 25, 15); for( int i = 0 ; i < 4 ; ++i ){ AgMODEonoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(130, 2, (uint8_t *)"Ag", LEFT_MODE); } //Mode Button lcd.SetFont(&Font12); if (ManMode == true) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(340, 2, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ Manonoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(346, 5, (uint8_t *)"Manual", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(340, 2, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ Manonoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(348, 5, (uint8_t *)"Auto", LEFT_MODE); } //All Button lcd.SetFont(&Font12); if (Aon == true) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(410, 2, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ Aonoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(411, 5, (uint8_t *)"All ON", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(410, 2, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ Aonoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(410, 5, (uint8_t *)"All OFF", LEFT_MODE); } //pump 1 controls lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.DisplayStringAt(10, 30, (uint8_t *)"AgBuf", LEFT_MODE); lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_YELLOW); toucharrow = DrawArrow(30,50,1,2); for( int i = 0 ; i < 4 ; ++i ){ p1up[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_GREEN); toucharrow = DrawArrow(30,150,2,2); for( int i = 0 ; i < 4 ; ++i ){ p1down[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)nus_buffer, "%d", (int)p1count); lcd.DisplayStringAt(30, 95, (uint8_t *)nus_buffer, LEFT_MODE); if (p1on == true) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(10, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p1onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(20, 168, (uint8_t *)"ON", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(10, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p1onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(20, 168, (uint8_t *)"OFF", LEFT_MODE); } //pump 2 controls lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.DisplayStringAt(80, 30, (uint8_t *)"AgInd", LEFT_MODE); lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_YELLOW); toucharrow = DrawArrow(100,50,1,2); for( int i = 0 ; i < 4 ; ++i ){ p2up[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_GREEN); toucharrow = DrawArrow(100,150,2,2); for( int i = 0 ; i < 4 ; ++i ){ p2down[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)nus_buffer, "%d", (int)p2count); lcd.DisplayStringAt(100, 95, (uint8_t *)nus_buffer, LEFT_MODE); if (p2on == true) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(80, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p2onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(90, 168, (uint8_t *)"ON", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(80, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p2onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(90, 168, (uint8_t *)"OFF", LEFT_MODE); } //pump 3 controls lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.DisplayStringAt(150, 30, (uint8_t *)"CuInd", LEFT_MODE); lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_YELLOW); toucharrow = DrawArrow(170,50,1,2); for( int i = 0 ; i < 4 ; ++i ){ p3up[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_GREEN); toucharrow = DrawArrow(170,150,2,2); for( int i = 0 ; i < 4 ; ++i ){ p3down[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)nus_buffer, "%d", (int)p3count); lcd.DisplayStringAt(170, 95, (uint8_t *)nus_buffer, LEFT_MODE); if (p3on == true) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(150, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p3onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(160, 168, (uint8_t *)"ON", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(150, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p3onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(160, 168, (uint8_t *)"OFF", LEFT_MODE); } /* //pump 4 controls lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.DisplayStringAt(220, 30, (uint8_t *)"OCl", LEFT_MODE); lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_YELLOW); toucharrow = DrawArrow(240,50,1,2); for( int i = 0 ; i < 4 ; ++i ){ p4up[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_GREEN); toucharrow = DrawArrow(240,150,2,2); for( int i = 0 ; i < 4 ; ++i ){ p4down[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)nus_buffer, "%d", (int)p4count); lcd.DisplayStringAt(240, 95, (uint8_t *)nus_buffer, LEFT_MODE); if (p4on == true) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(220, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p4onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(230, 168, (uint8_t *)"ON", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(220, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p4onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(230, 168, (uint8_t *)"OFF", LEFT_MODE); } */ //Solenoid 5 controls lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.DisplayStringAt(285, 30, (uint8_t *)"Drain", LEFT_MODE); lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_YELLOW); toucharrow = DrawArrow(310,50,1,2); for( int i = 0 ; i < 4 ; ++i ){ p5up[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_GREEN); toucharrow = DrawArrow(310,150,2,2); for( int i = 0 ; i < 4 ; ++i ){ p5down[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)nus_buffer, "%d", (int)p5count); lcd.DisplayStringAt(310, 95, (uint8_t *)nus_buffer, LEFT_MODE); if (p5on == true) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(290, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p5onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(300, 168, (uint8_t *)"ON", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(290, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p5onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(300, 168, (uint8_t *)"OFF", LEFT_MODE); } //Pump 6 controls lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.DisplayStringAt(360, 30, (uint8_t *)"Mix", LEFT_MODE); lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_YELLOW); toucharrow = DrawArrow(380,50,1,2); for( int i = 0 ; i < 4 ; ++i ){ p6up[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_GREEN); toucharrow = DrawArrow(380,150,2,2); for( int i = 0 ; i < 4 ; ++i ){ p6down[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)nus_buffer, "%d", (int)p6count); lcd.DisplayStringAt(380, 95, (uint8_t *)nus_buffer, LEFT_MODE); if (p6on == true) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(360, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p6onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(370, 168, (uint8_t *)"ON", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(360, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p6onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(370, 168, (uint8_t *)"OFF", LEFT_MODE); } //Pump 7 controls lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.DisplayStringAt(430, 30, (uint8_t *)"Fill", LEFT_MODE); lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_YELLOW); toucharrow = DrawArrow(450,50,1,2); for( int i = 0 ; i < 4 ; ++i ){ p7up[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_GREEN); toucharrow = DrawArrow(450,150,2,2); for( int i = 0 ; i < 4 ; ++i ){ p7down[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)nus_buffer, "%d", (int)p7count); lcd.DisplayStringAt(450, 95, (uint8_t *)nus_buffer, LEFT_MODE); if (p7on == true) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(430, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p7onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(440, 168, (uint8_t *)"ON", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(430, 165, 40, 15); for( int i = 0 ; i < 4 ; ++i ){ p7onoff[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(440, 168, (uint8_t *)"OFF", LEFT_MODE); } lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); ts.GetState(&TS_State); if (TS_State.touchDetected) { // Clear lines corresponding to old touches coordinates if (TS_State.touchDetected < prev_nb_touches) { for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) { lcd.ClearStringLine(idx); } } prev_nb_touches = TS_State.touchDetected; cleared = 0; /* sprintf((char*)text, "Touches: %d", TS_State.touchDetected); lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); */ for (idx = 0; idx < TS_State.touchDetected; idx++) { x = TS_State.touchX[idx]; y = TS_State.touchY[idx]; double touchsensativity = 0.075; //(0.055 originaly) if (( x >= primeon[0] && x <= primeon[1] ) && (y >= primeon[2] && y <= primeon[3])) { thread2.terminate(); if (pcount != 0) { pcount = 0; thread2.start(takereading); } else { ManMode = false; Aon = false; p1on = false; p2on = false; p3on = false; p4on = false; p5on = false; p6on = false; p7on = false; thread2.start(prime); } Thread::wait(300); } if (( x >= Manonoff[0] && x <= Manonoff[1] ) && (y >= Manonoff[2] && y <= Manonoff[3])){ ManMode = !ManMode; //motors[1]->wait_while_active(); if (ManMode == true) { thread2.terminate(); p1on = false; p2on = false; p3on = false; p4on = false; p5on = false; p6on = false; p7on = false; thread2.start(runpump); thread3.terminate(); thread3.start(takereading); } else { thread2.terminate(); thread3.terminate(); thread3.start(takereading); } Thread::wait(200); } if (( x >= CuMODEonoff[0] && x <= CuMODEonoff[1] ) && (y >= CuMODEonoff[2] && y <= CuMODEonoff[3])){ CuMODE = !CuMODE; } if (( x >= AgMODEonoff[0] && x <= AgMODEonoff[1] ) && (y >= AgMODEonoff[2] && y <= AgMODEonoff[3])){ AgMODE = !AgMODE; } if (( x >= screenmode[0] && x <= screenmode[1] ) && (y >= screenmode[2] && y <= screenmode[3])){ screenstate = screenstate + 1; if (screenstate > 2){ screenstate = 0; } Thread::wait(200); EE_WriteVariable(VirtAddVarTab[7], (uint16_t)screenstate); screencycle(); return; } if (( x >= Aonoff[0] && x <= Aonoff[1] ) && (y >= Aonoff[2] && y <= Aonoff[3])){ Aon = !Aon; if (Aon == true) { p1on = true; p2on = true; p3on = true; p4on = true; p5on = true; p6on = true; p7on = true; } else { p1on = false; p2on = false; p3on = false; p4on = false; p5on = false; p6on = false; p7on = false; } Thread::wait(200); //EE_WriteVariable(VirtAddVarTab[0], (uint16_t)p1count); } //pump1 if (( x >= p1up[0] && x <= p1up[1] ) && (y >= p1up[2] && y <= p1up[3])){ p1count = p1count + touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[0], (uint16_t)p1count); } if (( x >= p1down[0] && x <= p1down[1] ) && (y >= p1down[2] && y <= p1down[3])){ p1count = p1count - touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[0], (uint16_t)p1count); } if (( x >= p1onoff[0] && x <= p1onoff[1] ) && (y >= p1onoff[2] && y <= p1onoff[3])){ p1on = !p1on; Thread::wait(200); } //pump2 if (( x >= p2up[0] && x <= p2up[1] ) && (y >= p2up[2] && y <= p2up[3])){ p2count = p2count + touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[1], (uint16_t)p2count); } if (( x >= p2down[0] && x <= p2down[1] ) && (y >= p2down[2] && y <= p2down[3])){ p2count = p2count - touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[1], (uint16_t)p2count); } if (( x >= p2onoff[0] && x <= p2onoff[1] ) && (y >= p2onoff[2] && y <= p2onoff[3])){ p2on = !p2on; Thread::wait(200); } //pump3 if (( x >= p3up[0] && x <= p3up[1] ) && (y >= p3up[2] && y <= p3up[3])){ p3count = p3count + touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[2], (uint16_t)p3count); } if (( x >= p3down[0] && x <= p3down[1] ) && (y >= p3down[2] && y <= p3down[3])){ p3count = p3count - touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[2], (uint16_t)p3count); } if (( x >= p3onoff[0] && x <= p3onoff[1] ) && (y >= p3onoff[2] && y <= p3onoff[3])){ p3on = !p3on; Thread::wait(200); } /* //pump4 if (( x >= p4up[0] && x <= p4up[1] ) && (y >= p4up[2] && y <= p4up[3])){ p4count = p4count + touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[3], (uint16_t)p4count); } if (( x >= p4down[0] && x <= p4down[1] ) && (y >= p4down[2] && y <= p4down[3])){ p4count = p4count - touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[3], (uint16_t)p4count); } if (( x >= p4onoff[0] && x <= p4onoff[1] ) && (y >= p4onoff[2] && y <= p4onoff[3])){ p4on = !p4on; Thread::wait(200); } */ //Sole5 if (( x >= p5up[0] && x <= p5up[1] ) && (y >= p5up[2] && y <= p5up[3])){ p5count = p5count + touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[4], (uint16_t)p5count); } if (( x >= p5down[0] && x <= p5down[1] ) && (y >= p5down[2] && y <= p5down[3])){ p5count = p5count - touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[4], (uint16_t)p5count); } if (( x >= p5onoff[0] && x <= p5onoff[1] ) && (y >= p5onoff[2] && y <= p5onoff[3])){ p5on = !p5on; Thread::wait(200); } //Pump6 if (( x >= p6up[0] && x <= p6up[1] ) && (y >= p6up[2] && y <= p6up[3])){ p6count = p6count + touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[5], (uint16_t)p6count); } if (( x >= p6down[0] && x <= p6down[1] ) && (y >= p6down[2] && y <= p6down[3])){ p6count = p6count - touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[5], (uint16_t)p6count); } if (( x >= p6onoff[0] && x <= p6onoff[1] ) && (y >= p6onoff[2] && y <= p6onoff[3])){ p6on = !p6on; Thread::wait(200); } //Pump7 if (( x >= p7up[0] && x <= p7up[1] ) && (y >= p7up[2] && y <= p7up[3])){ p7count = p7count + touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[6], (uint16_t)p7count); } if (( x >= p7down[0] && x <= p7down[1] ) && (y >= p7down[2] && y <= p7down[3])){ p7count = p7count - touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[6], (uint16_t)p7count); } if (( x >= p7onoff[0] && x <= p7onoff[1] ) && (y >= p7onoff[2] && y <= p7onoff[3])){ p7on = !p7on; Thread::wait(200); } /* sprintf((char*)text, "Touch %d: x=%d y=%d ", idx+1, x, y); lcd.DisplayStringAt(0, LINE(idx+1), (uint8_t *)&text, LEFT_MODE); */ } lcd.DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_ORANGE); } else { if (!cleared) { lcd.Clear(LCD_COLOR_BLACK); /* sprintf((char*)text, "Touches: 0"); lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); */ cleared = 1; } } } } //////////// void screen2() { while(1) { if (p1count<0){p1count=0;} if (p2count<0){p2count=0;} if (p3count<0){p3count=0;} if (p4count<0){p4count=0;} if (p5count<0){p5count=0;} if (p6count<0){p6count=0;} if (p7count<0){p7count=0;} //pump1.pulsewidth(p1count/750000); if (p1on == true || p2on == true || p3on == true || p4on == true || p5on == true || p6on == true || p7on == true) { Aon = true; } if (p1on == false && p2on == false && p3on == false && p4on == false && p5on == false && p6on == false && p7on == false) { Aon = false; } if (writefail == 1) { lcd.SetTextColor(LCD_COLOR_RED); lcd.FillCircle(235,190,10); } //General Display lcd.SetFont(&Font20); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)textn1, "%0.1f ppb Ag+", Silver); /* if (strcmp((char*)text1,(char*)textn1) != 0) { sprintf((char*)text1, "%0.1f ppm Ag+", Silver); lcd.ClearStringLine(4); } */ lcd.DisplayStringAt(0, LINE(4), (uint8_t *)&textn1, CENTER_MODE); lcd.SetFont(&Font20); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)textn1, "%0.1f ppb Cu2+", Copper); /* if (strcmp((char*)text1,(char*)textn1) != 0) { sprintf((char*)text1, "%0.1f ppm Cu2+", Copper); lcd.ClearStringLine(9); } */ lcd.DisplayStringAt(0, LINE(7), (uint8_t *)&textn1, CENTER_MODE); lcd.SetFont(&Font16); if (MODE == 0 && (strcmp((char*)text3,"Dark Reading") != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Dark Reading"); } if (MODE == 1 && (strcmp((char*)text3,"Zeroing") != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Zeroing"); } if (MODE == 2 && (strcmp((char*)text3,"Reading") != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Reading"); } if (MODE == 3 && (strcmp((char*)text3,"Priming") != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Priming"); } sprintf((char*)textn3, "Waiting%s", cyclestep); if (MODE == 4 && (strcmp((char*)text3,(char*)textn3) != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Waiting%s", cyclestep); } if (MODE == 5 && (strcmp((char*)text3,"Sampling") != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Sampling"); } if (MODE == 6 && (strcmp((char*)text3,"Washing") != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Washing"); } if (MODE == 7 && (strcmp((char*)text3,"Mixing") != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Mixing"); } if (MODE == 8 && (strcmp((char*)text3,"Ag Buffer Dosing") != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Ag Buffer Dosing"); } if (MODE == 9 && (strcmp((char*)text3,"Ag Indicator Dosing") != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Ag Indicator Dosing"); } if (MODE == 10 && (strcmp((char*)text3,"Cu Indicator Dosing") != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Cu Indicator Dosing"); } if (MODE == 11 && (strcmp((char*)text3,"Write Success") != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Write Success"); } if (MODE == 12 && (strcmp((char*)text3,"Level") != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Level"); } if (MODE == 13 && (strcmp((char*)text3,"Write Fail") != 0)) { lcd.ClearStringLine(15); sprintf((char*)text3, "Write Fail"); } lcd.SetTextColor(LCD_COLOR_LIGHTRED); lcd.DisplayStringAt(0, LINE(15), (uint8_t *)&text3, CENTER_MODE); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.SetFont(&Font24); lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"Cu/Ag Ion Monitor", CENTER_MODE); //Prime Button lcd.SetFont(&Font12); if (pcount == 0) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(20, 2, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ primeon[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(20, 2, (uint8_t *)"Prime", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(20, 2, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ primeon[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); sprintf((char*)nus_buffer, "%d", (int)pcount); lcd.DisplayStringAt(20, 2, (uint8_t *)nus_buffer, LEFT_MODE); } //Screen Mode //lcd.SetTextColor(LCD_COLOR_GREEN); //lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(230, 30, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ screenmode[ i ] = touchbutt[ i ]; } lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); ts.GetState(&TS_State); if (TS_State.touchDetected) { // Clear lines corresponding to old touches coordinates if (TS_State.touchDetected < prev_nb_touches) { for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) { lcd.ClearStringLine(idx); } } prev_nb_touches = TS_State.touchDetected; cleared = 0; /* sprintf((char*)text, "Touches: %d", TS_State.touchDetected); lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); */ for (idx = 0; idx < TS_State.touchDetected; idx++) { x = TS_State.touchX[idx]; y = TS_State.touchY[idx]; double touchsensativity = 0.075; //(0.055 originaly) if (( x >= primeon[0] && x <= primeon[1] ) && (y >= primeon[2] && y <= primeon[3])) { thread2.terminate(); if (pcount != 0) { pcount = 0; thread2.start(takereading); } else { ManMode = false; Aon = false; p1on = false; p2on = false; p3on = false; p4on = false; p5on = false; p6on = false; p7on = false; thread2.start(prime); } Thread::wait(300); } if (( x >= Manonoff[0] && x <= Manonoff[1] ) && (y >= Manonoff[2] && y <= Manonoff[3])){ ManMode = !ManMode; //motors[1]->wait_while_active(); if (ManMode == true) { thread2.terminate(); p1on = false; p2on = false; p3on = false; p4on = false; p5on = false; p6on = false; p7on = false; thread2.start(runpump); thread3.terminate(); thread3.start(takereading); } else { thread2.terminate(); thread3.terminate(); thread3.start(takereading); } Thread::wait(200); } if (( x >= CuMODEonoff[0] && x <= CuMODEonoff[1] ) && (y >= CuMODEonoff[2] && y <= CuMODEonoff[3])){ CuMODE = !CuMODE; } if (( x >= AgMODEonoff[0] && x <= AgMODEonoff[1] ) && (y >= AgMODEonoff[2] && y <= AgMODEonoff[3])){ AgMODE = !AgMODE; } if (( x >= screenmode[0] && x <= screenmode[1] ) && (y >= screenmode[2] && y <= screenmode[3])){ screenstate = screenstate + 1; if (screenstate > 2){ screenstate = 0; } Thread::wait(200); EE_WriteVariable(VirtAddVarTab[7], (uint16_t)screenstate); screencycle(); return; } if (( x >= Aonoff[0] && x <= Aonoff[1] ) && (y >= Aonoff[2] && y <= Aonoff[3])){ Aon = !Aon; if (Aon == true) { p1on = true; p2on = true; p3on = true; p4on = true; p5on = true; p6on = true; p7on = true; } else { p1on = false; p2on = false; p3on = false; p4on = false; p5on = false; p6on = false; p7on = false; } Thread::wait(200); //EE_WriteVariable(VirtAddVarTab[0], (uint16_t)p1count); } /* sprintf((char*)text, "Touch %d: x=%d y=%d ", idx+1, x, y); lcd.DisplayStringAt(0, LINE(idx+1), (uint8_t *)&text, LEFT_MODE); */ } lcd.DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_ORANGE); } else { if (!cleared) { lcd.Clear(LCD_COLOR_BLACK); /* sprintf((char*)text, "Touches: 0"); lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); */ cleared = 1; } } } } void screen3() { while(1) { if (d1count<0){d1count=0;} if (d2count<0){d2count=0;} if (d3count<0){d3count=0;} if (d4count<0){d4count=0;} if (d5count<0){d5count=0;} if (d6count<0){d6count=0;} /* //Prime Button lcd.SetFont(&Font12); if (pcount == 0) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(20, 2, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ primeon[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(20, 2, (uint8_t *)"Prime", LEFT_MODE); } else { lcd.SetTextColor(LCD_COLOR_RED); lcd.SetBackColor(LCD_COLOR_RED); touchbutt = DrawButton(20, 2, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ primeon[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); sprintf((char*)nus_buffer, "%d", (int)pcount); lcd.DisplayStringAt(20, 2, (uint8_t *)nus_buffer, LEFT_MODE); } */ //Screen Mode lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(230, 2, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ screenmode[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(230, 2, (uint8_t *)"Exit", LEFT_MODE); //Save lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_GREEN); lcd.SetBackColor(LCD_COLOR_GREEN); touchbutt = DrawButton(90, 2, 50, 15); for( int i = 0 ; i < 4 ; ++i ){ savedate[ i ] = touchbutt[ i ]; } lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(90, 2, (uint8_t *)"Save", LEFT_MODE); get_time(&dt); sprintf((char*)currenttime, "%02d/%02d/%04d %02d:%02d:%02d\n", dt.mm, dt.d, 2000 + dt.y, dt.h, dt.m, dt.s); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.SetFont(&Font12); lcd.DisplayStringAt(0, LINE(13), (uint8_t *)currenttime, CENTER_MODE); //Month lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.DisplayStringAt(10, 30, (uint8_t *)"Month", LEFT_MODE); lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_YELLOW); toucharrow = DrawArrow(30,50,1,2); for( int i = 0 ; i < 4 ; ++i ){ d1up[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_GREEN); toucharrow = DrawArrow(30,150,2,2); for( int i = 0 ; i < 4 ; ++i ){ d1down[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)nus_buffer, "%d", (int)d1count); lcd.DisplayStringAt(30, 95, (uint8_t *)nus_buffer, LEFT_MODE); //Day lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.DisplayStringAt(80, 30, (uint8_t *)"Day", LEFT_MODE); lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_YELLOW); toucharrow = DrawArrow(100,50,1,2); for( int i = 0 ; i < 4 ; ++i ){ d2up[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_GREEN); toucharrow = DrawArrow(100,150,2,2); for( int i = 0 ; i < 4 ; ++i ){ d2down[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)nus_buffer, "%d", (int)d2count); lcd.DisplayStringAt(100, 95, (uint8_t *)nus_buffer, LEFT_MODE); //Year lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.DisplayStringAt(150, 30, (uint8_t *)"Year", LEFT_MODE); lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_YELLOW); toucharrow = DrawArrow(170,50,1,2); for( int i = 0 ; i < 4 ; ++i ){ d3up[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_GREEN); toucharrow = DrawArrow(170,150,2,2); for( int i = 0 ; i < 4 ; ++i ){ d3down[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)nus_buffer, "%d", (int)d3count); lcd.DisplayStringAt(170, 95, (uint8_t *)nus_buffer, LEFT_MODE); //Hour lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.DisplayStringAt(220, 30, (uint8_t *)"Hour", LEFT_MODE); lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_YELLOW); toucharrow = DrawArrow(240,50,1,2); for( int i = 0 ; i < 4 ; ++i ){ d4up[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_GREEN); toucharrow = DrawArrow(240,150,2,2); for( int i = 0 ; i < 4 ; ++i ){ d4down[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)nus_buffer, "%d", (int)d4count); lcd.DisplayStringAt(240, 95, (uint8_t *)nus_buffer, LEFT_MODE); //Min lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.DisplayStringAt(285, 30, (uint8_t *)"Min", LEFT_MODE); lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_YELLOW); toucharrow = DrawArrow(310,50,1,2); for( int i = 0 ; i < 4 ; ++i ){ d5up[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_GREEN); toucharrow = DrawArrow(310,150,2,2); for( int i = 0 ; i < 4 ; ++i ){ d5down[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)nus_buffer, "%d", (int)d5count); lcd.DisplayStringAt(310, 95, (uint8_t *)nus_buffer, LEFT_MODE); //Interval lcd.SetFont(&Font16); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); lcd.DisplayStringAt(360, 30, (uint8_t *)"Interval(h)", LEFT_MODE); lcd.SetFont(&Font12); lcd.SetTextColor(LCD_COLOR_YELLOW); toucharrow = DrawArrow(380,50,1,2); for( int i = 0 ; i < 4 ; ++i ){ d6up[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_GREEN); toucharrow = DrawArrow(380,150,2,2); for( int i = 0 ; i < 4 ; ++i ){ d6down[ i ] = toucharrow[ i ]; } lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); sprintf((char*)nus_buffer, "%d", (int)d6count); lcd.DisplayStringAt(380, 95, (uint8_t *)nus_buffer, LEFT_MODE); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE); ts.GetState(&TS_State); if (TS_State.touchDetected) { // Clear lines corresponding to old touches coordinates if (TS_State.touchDetected < prev_nb_touches) { for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) { lcd.ClearStringLine(idx); } } prev_nb_touches = TS_State.touchDetected; cleared = 0; /* sprintf((char*)text, "Touches: %d", TS_State.touchDetected); lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); */ for (idx = 0; idx < TS_State.touchDetected; idx++) { x = TS_State.touchX[idx]; y = TS_State.touchY[idx]; double touchsensativity = 0.075; //(0.055 originaly) if (( x >= screenmode[0] && x <= screenmode[1] ) && (y >= screenmode[2] && y <= screenmode[3])){ screenstate = screenstate + 1; if (screenstate > 2){ screenstate = 0; } Thread::wait(200); EE_WriteVariable(VirtAddVarTab[7], (uint16_t)screenstate); screencycle(); return; } if (( x >= savedate[0] && x <= savedate[1] ) && (y >= savedate[2] && y <= savedate[3])){ setdatetime(); } //Month if (( x >= d1up[0] && x <= d1up[1] ) && (y >= d1up[2] && y <= d1up[3])){ d1count = d1count + touchsensativity; } if (( x >= d1down[0] && x <= d1down[1] ) && (y >= d1down[2] && y <= d1down[3])){ d1count = d1count - touchsensativity; } //Day if (( x >= d2up[0] && x <= d2up[1] ) && (y >= d2up[2] && y <= d2up[3])){ d2count = d2count + touchsensativity; } if (( x >= d2down[0] && x <= d2down[1] ) && (y >= d2down[2] && y <= d2down[3])){ d2count = d2count - touchsensativity; } //year if (( x >= d3up[0] && x <= d3up[1] ) && (y >= d3up[2] && y <= d3up[3])){ d3count = d3count + touchsensativity; } if (( x >= d3down[0] && x <= d3down[1] ) && (y >= d3down[2] && y <= d3down[3])){ d3count = d3count - touchsensativity; } //hour if (( x >= d4up[0] && x <= d4up[1] ) && (y >= d4up[2] && y <= d4up[3])){ d4count = d4count + touchsensativity; } if (( x >= d4down[0] && x <= d4down[1] ) && (y >= d4down[2] && y <= d4down[3])){ d4count = d4count - touchsensativity; } //Min if (( x >= d5up[0] && x <= d5up[1] ) && (y >= d5up[2] && y <= d5up[3])){ d5count = d5count + touchsensativity; } if (( x >= d5down[0] && x <= d5down[1] ) && (y >= d5down[2] && y <= d5down[3])){ d5count = d5count - touchsensativity; } //Interval if (( x >= d6up[0] && x <= d6up[1] ) && (y >= d6up[2] && y <= d6up[3])){ d6count = d6count + touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[8], (uint16_t)d6count); } if (( x >= d6down[0] && x <= d6down[1] ) && (y >= d6down[2] && y <= d6down[3])){ d6count = d6count - touchsensativity; Thread::wait(2); EE_WriteVariable(VirtAddVarTab[8], (uint16_t)d6count); } /* sprintf((char*)text, "Touch %d: x=%d y=%d ", idx+1, x, y); lcd.DisplayStringAt(0, LINE(idx+1), (uint8_t *)&text, LEFT_MODE); */ } lcd.DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_ORANGE); } else { if (!cleared) { lcd.Clear(LCD_COLOR_BLACK); /* sprintf((char*)text, "Touches: 0"); lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); */ cleared = 1; } } } } void screencycle() { if (screenstate == 1) {screen();} if (screenstate == 0) {screen2();} if (screenstate == 2) {screen3();} } ///////////// int main() { i2c.frequency(100000); set_ch(1); pc.baud(9600); LED515.write(0.0); LED480.write(0.0); /* sd.mount(); FILE *fp = fopen("/sd/Readings.txt", "w"); if (fp == NULL) { fprintf(stderr, "Open error for writing!!\r\n"); while (true) {} } fprintf(fp, "Hello!\n"); fprintf(fp, "Example of writing and reading of text file.\n"); fclose(fp); */ //Setup LED515 //LED515.period(-1.0f); // 4 second period //LED515.write(0); // 50% duty cycle, relative to period HAL_FLASH_Unlock(); EE_Init(); //pump1 EE_ReadVariable(VirtAddVarTab[0], &VarDataTab[0]); p1count = (double)VarDataTab[0]; //pump2 EE_ReadVariable(VirtAddVarTab[1], &VarDataTab[1]); p2count = (double)VarDataTab[1]; //pump3 EE_ReadVariable(VirtAddVarTab[2], &VarDataTab[2]); p3count = (double)VarDataTab[2]; //pump4 EE_ReadVariable(VirtAddVarTab[3], &VarDataTab[3]); p4count = (double)VarDataTab[3]; //Sole5 EE_ReadVariable(VirtAddVarTab[4], &VarDataTab[4]); p5count = (double)VarDataTab[4]; //Pump6 EE_ReadVariable(VirtAddVarTab[5], &VarDataTab[5]); p6count = (double)VarDataTab[5]; //Pump7 EE_ReadVariable(VirtAddVarTab[6], &VarDataTab[6]); p7count = (double)VarDataTab[6]; //Screen EE_ReadVariable(VirtAddVarTab[7], &VarDataTab[7]); screenstate = (int)VarDataTab[7]; //Interval EE_ReadVariable(VirtAddVarTab[8], &VarDataTab[8]); d6count = (int)VarDataTab[8]; //Draw WolfMan /* lcd.Clear(LCD_COLOR_RED); lcd.SetTextColor(LCD_COLOR_BLACK); lcd.SetBackColor(LCD_COLOR_RED); lcd.DisplayStringAt(0, LINE(0), (uint8_t *)"WolfMan", RIGHT_MODE); lcd.SetTextColor(LCD_COLOR_LIGHTBLUE);*/ lcd.Clear(LCD_COLOR_WHITE); lcd.SetBackColor(LCD_COLOR_WHITE); lcd.DrawBitmap(150,25,(uint8_t *)hfl); //motors[1]->reset_device(); wait(2); FATFS_LinkDriver(&SD_Driver, SDPath); ress = f_mount(&SDFatFs, (TCHAR const*)SDPath, 0); Thread::wait(200); if(ress!= FR_OK){ pc.printf("Failed to mount SD\n"); } saveit(); ts.Init(lcd.GetXSize(), lcd.GetYSize()); lcd.SetFont(&Font12); lcd.SetBackColor(LCD_COLOR_BLACK); lcd.SetTextColor(LCD_COLOR_WHITE); thread.start(screencycle); sprintf((char*)cyclestep, ""); //reprime(); LED515.period(1.0/10000); LED480.period(1.0/10000); thread3.start(takereading); }