/**************************************************************************************************** *************************************------------------------**************************************** ************************************| Druckzyklensoftware |*************************************** *************************************------------------------**************************************** ************************************| Claf, 15.09.2016 |*************************************** *************************************------------------------**************************************** ************************************| V3.0 |*************************************** *************************************------------------------**************************************** ***************************************************************************************************** ** ** ** ```....-.` ** ** ````...--:://////-` ** ** ````...--::///////:--.``..``-:/+:-/+/:` ** ** ````...--:://////::-..`` `-/hddddhyyoos- ** ** ````..---:://////::-.`` ```.-:+hhhhhhysyyy- ** ** ``.-::-.``..--::///////::-.`` ```...---::::/hhddddddddy` ** ** ```-////////:://////:-..`` ````..---::::::///+/-smmmmmmdddh- ** ** ````.://////////-```` ```..---::::::///+++oosoo:-dmmmmmhyhy: ** ** ````..-:/+/////::. ``...---::::////++ooosssssoooo+-+mmdddyos+` ** ** `...:osso//:-`` ` ``..---::::::///+ooosssssssssooooooo+-.ddddy:-. ** ** `/osy+//:-/.::. ``..:--.-:::::///++oossssssssssssoooooo+//:-.`syo/` ** ** :+++oyy+` ../+//+ooo+:::/+++oosssssssssssssooooo++/:--......`` ** ** ``.../:+shhhys``-o+/+oooooo/++oosssssssssssosooo++/:--...........`` ** ** ``.--:/++o/++/-.`-+y+::+yo/ooooooo+oyoooososoooo++/::-...........```````` ** ** `.://o//--````--`.-+hdyoyyy++ooooooo+oo+ooo++/:--.........`.`````````````` ** ** ```.:-.```..::+/ys+sydddyhdss:ooooooo///::--...........`````````.........` ** ** `````-::/++oosysyhhhdddhhoys/-+oooooo:..`.```````````````........----..` ** ** ``/y-.+o+syyyyyyssy/::ssh::-...+oooo+/``````````````.......-----..`` ** ** ``+dy`.o/soo++::--o..-syh/```.`.//:-..````````.......-----..`` ** ** `.+d.`.:--.-.-.--o-:ohyy/```.```````````......-----..`` ** ** `.-```....-.----/+osssy-...-`````......-----..``` ** ** `````..-.-...` -/oos+-----`...-----....`` ** ** ```.`.`` .--------.-----.`` ** ** `.---------. ** ** `...`` ** ** ** ***************************************************************************************************** *///**************************************************************************************Software-Änderungen******************************************************************************************************************** // V2.3 26.04.2016 ReserveOut anfangs ON und OFF falls Counter erreicht // V2.3 04.05.2016 Savetime reset nur bei Counter Inkrementierung oder nach Menü /// Timer Reset nach Menü // Counter Sollwert anzeigen // V2.4 --.--.---- Diverses // V2.5 11.05.2016 Signal oder Zeitgesteuert wählbar // Sicheheit Time/Ref wählbar // Menü-Einstllungen ins EEPROM speichern // NPN3 im menü und ProgrammCode integriert // integration USB remote // V2.6 12.05.2016 Versions+Gerätenummer integriert // Menü umstrukturiert // V2.7 24.05.2016 invnpn4 Integration für Ventil zum umschalten von Druckkennlinie und Druckzyklen (insbesondere für Remote Mode) // Menü invnpn4 // Änderungen STartbedingungen (Funktionen START STOP) // V2.8 28.06.2016 änderung startbedingung NPN1 (prüfen von startwert des referenzsensors HIGH oder LOW beim Start falls Signalgesteuert // V2.9 03.08.2016 Anpassung Startbedingung Druckzyklen (High auf Low oder low auf High + Counter auf eine Stelle mehr (10Millionen Stelle) // V3.0 15.09.2016 Anpassung Sollwert Serial // Istwertvorgabe //******************************************************************************************************************************************************************************************************************************* //**************************************************************************************--------TO-DO------********************************************************************************************************************** // //******************************************************************************************************************************************************************************************************************************* //*********** include files *******************/ #include #include #include #include //************* pin defs. *********************/ #define sd_cs 4 #define lcd_cs 10 #define dc 9 #define rst 8 TFT TFTscreen = TFT(lcd_cs, dc, rst); #define NPN1_DUT 22 #define NPN2_SICHERHEIT 23 #define NPN3 24 #define NPN_EEPROM 25 #define NPN4_Reserve 26 #define LED_EIN 41 #define LED_NPN1_DUT 42 #define LED_AUS 43 #define LED_NPN2_SICHERHEIT 44 #define LED_FEHLER 45 #define LED_NPN3 46 #define LED_NPN4 47 #define LED_TRIGGER 48 #define LED_OPTION 49 #define PinPlus 30 #define PinEnter 31 #define PinMinus 32 #define analogDut A0 #define analogRef A1 #define analogSicherheit A2 #define analogPoti A3 #define analogEeprom A4 //*************** Var. *************************/ //Info char strV[]="V03.00_DS001"; //Analog int sensor; int referenz; int poti; //Taster int Tplus; int Tenter; int Tminus; int TenterOld=LOW; int TplusOld=LOW; int TminusOld=LOW; //Menu int menuposition=0; int schalth=90; int schaltl=10; int grenzh=100; int grenzl=0; int grenzwh=0; int grenzwl=0; int grenzrefh=0; int grenzrefl=0; long hightime = 0; long lowtime = 0; byte eeprombuf[4]; int x; int y; //Graph int xPos = 0; char sensorPrintout[9]; String dataString; String sensorVal; long counter=100000; long counteract=0; char count[8]; int drawHeight; int drawHeight2; //Time unsigned long currentMillis=0; unsigned long previousMillis = 0; unsigned long previoushightime = 0; unsigned long previouslowtime = 0; unsigned long tastermillis=0; unsigned long saveMillis=0; long lastDebounceTime = 0; int timekrit= 0; long saveTime= 2000; //States int ventState = LOW; int ventState2 = LOW; int ventState3 = LOW; int ventState4 = LOW; int start = LOW; int serial=LOW; int sicherheit=LOW; int sicherheitt=LOW; int invnpn1=LOW; int invnpn2=LOW; int invnpn3=LOW; int invnpn4=LOW; int eeprom=LOW; int fehler=LOW; int higherreicht = HIGH; int lowerreicht = LOW; int modus=LOW; //Communication int inByte = 0; // incoming serial byte //*******************************************_____________________________SETUP________________________***************************************************** void setup() { //Config Output pinMode(NPN1_DUT, OUTPUT); //Ventil NPN1 DUT pinMode(NPN2_SICHERHEIT, OUTPUT); //Ventil NPN2 REF pinMode(NPN3, OUTPUT); //Ventil NPN3 Sicherheit pinMode(NPN_EEPROM, OUTPUT); //Ventil NPN4 Mosfet pinMode(NPN4_Reserve, OUTPUT); //Ventil NPN Reserve pinMode(LED_EIN, OUTPUT); //LED EIN pinMode(LED_NPN1_DUT, OUTPUT); //LED NPN1 pinMode(LED_AUS, OUTPUT); //LED AUS pinMode(LED_NPN2_SICHERHEIT, OUTPUT); //LED NPN2 pinMode(LED_FEHLER , OUTPUT); //LED FEHLER pinMode(LED_NPN3, OUTPUT); //LED NPN3 pinMode(LED_NPN4, OUTPUT); //LED NPN4 pinMode(LED_TRIGGER, OUTPUT); //LED Trigger pinMode(LED_OPTION, OUTPUT); //LED Option //Config Input pinMode(PinPlus,INPUT_PULLUP); //Taster (+) pinMode(PinEnter,INPUT_PULLUP); //Taster (Enter) pinMode(PinMinus,INPUT_PULLUP); //Taster (-) //LED-TEST digitalWrite(LED_EIN, 1); //LED EIN (EIN) digitalWrite(LED_NPN1_DUT, 1); //LED NPN1 (EIN) digitalWrite(LED_AUS, 1); //LED AUS (EIN) digitalWrite(LED_NPN2_SICHERHEIT, 1); //LED NPN2 (EIN) digitalWrite(LED_FEHLER , 1); //LED FEHLER (EIN) digitalWrite(LED_NPN3, 1); //LED NPN3 (EIN) digitalWrite(LED_NPN4, 1); //LED NPN4 (EIN) digitalWrite(LED_TRIGGER, 1); //LED Trigger (EIN) digitalWrite(LED_OPTION, 1); //LED Option (EIN) delay(1000); digitalWrite(LED_EIN, 0); //LED EIN (AUS) digitalWrite(LED_NPN1_DUT, 0); //LED NPN1 (AUS) digitalWrite(LED_AUS, 1); //LED AUS (AUS) digitalWrite(LED_NPN2_SICHERHEIT, 0); //LED NPN2 (AUS) digitalWrite(LED_FEHLER, 0); //LED FEHLER (AUS) digitalWrite(LED_NPN3, 0); //LED NPN3 (AUS) digitalWrite(LED_NPN4, 0); //LED NPN4 (AUS) digitalWrite(LED_TRIGGER, 0); //LED Trigger (AUS) digitalWrite(LED_OPTION, 0); //LED Option (AUS) //Load Var. EEPROM EEPROM.get(0, hightime); EEPROM.get(4, lowtime); EEPROM.get(8, schalth); EEPROM.get(10, schaltl); EEPROM.get(12, grenzh); EEPROM.get(14, grenzl); EEPROM.get(16, counter); EEPROM.get(20, saveTime); EEPROM.get(24,modus); EEPROM.get(26,sicherheitt); EEPROM.get(28,serial); EEPROM.get(30,invnpn1); EEPROM.get(32,invnpn2); EEPROM.get(34,sicherheit); EEPROM.get(36,invnpn3); EEPROM.get(38,invnpn4); //set output start cond. digitalWrite(NPN1_DUT, invnpn1); //Ventil NPN1 DUT ventState=invnpn1; digitalWrite(NPN2_SICHERHEIT, invnpn2); //Ventil NPN2 REF digitalWrite(NPN3, invnpn3); //Ventil NPN3 Sicherheit digitalWrite(NPN4_Reserve, invnpn4); //Ventil NPN Reserve digitalWrite(NPN_EEPROM, LOW); //Ventil NPN4 Mosfet digitalWrite(LED_NPN1_DUT, invnpn1); //LED NPN1 (AUS) digitalWrite(LED_NPN2_SICHERHEIT, invnpn2); //LED NPN2 (AUS) digitalWrite(LED_NPN3, invnpn3); //LED NPN3 (AUS) digitalWrite(LED_NPN4, invnpn4); //LED NPN4 (AUS) //Start Serial Comm. Serial.begin(9600); //Config TFT TFTscreen.begin(); TFTscreen.setRotation(3); //TFT 180° rotation TFTscreen.background(255, 255, 255); // clear the screen TFTscreen.stroke(0, 0, 0); //set color black TFTscreen.setTextSize(2); // set the font size TFTscreen.text("Druckzyklen", 15, 3); // write the text TFTscreen.setTextSize(1); // set the font size TFTscreen.text("Count:", 1, 110); // write the text showMenuNumberlong(counteract, 40, 110); showMenuNumberlong(counter, 100, 110); showGRID(); } //******************************************************************************************************************************************************************* //*******************************************_________________________MAIN-LOOP________________________************************************************************** //******************************************************************************************************************************************************************* void loop() { //read current program time currentMillis = millis(); // read analog sensor-values sensor = analogRead(analogDut); // DUT Analogsignal referenz = analogRead(analogRef); // REF Analogsignal poti = analogRead(analogPoti); // Poti Analogsignal für Zeitinterval // read Keys Tplus = digitalRead(PinPlus); Tenter = digitalRead(PinEnter); Tminus = digitalRead(PinMinus); //EEPROM activ -> save counteract if supply<4V if(eeprom==HIGH) { if(analogRead(analogEeprom)<1000) { eeprombuf[0] = counteract; eeprombuf[1] = counteract>>8; eeprombuf[2] = counteract>>16; eeprombuf[3] = counteract>>24; //EEPROM.write(0, eeprombuf[0]); //EEPROM.write(1, eeprombuf[1]); //EEPROM.write(2, eeprombuf[2]); //EEPROM.write(3, eeprombuf[3]); //digitalWrite(43,1); // LED AUS //delay(10000); //Good Night } } //Calculation graph speed / limits DUT/REF timekrit=poti/2; grenzwh = map(schalth, 0, 100, 0, 1023);//Grenzwert DUT grenzwl = map(schaltl, 0, 100, 0, 1023); grenzrefh = map(grenzh, 0, 100, 0, 1023);//Grenzwert Ref grenzrefl = map(grenzl, 0, 100, 0, 1023); //Menu-Button pressed? if((Tenter!=TenterOld || Tminus!=TminusOld || Tplus!=TplusOld ) && (tastermillis-currentMillis)>200) { if(Tenter==LOW && TenterOld==HIGH) { TenterOld=LOW; } if(Tenter==HIGH && TenterOld==LOW) { TenterOld=HIGH; Menu(); } if(Tplus==1 && TplusOld==0 && start==LOW) //Messung EIN ? { TplusOld=1; START(); } if(Tplus==0 && TplusOld==1){TplusOld=0;} if(Tminus==1 && TminusOld==0 && start==HIGH) //Messung AUS ? { TminusOld=1; STOP(); } if(Tminus==0 && TminusOld==1){TminusOld=0;} tastermillis=currentMillis; } //Start activ / no error ? if(start==HIGH && fehler==LOW) { //ERROR ?? if(((referenz>grenzrefh || referenzsaveTime) && sicherheitt==HIGH)) //Fehler bei Ref? Nur falls Sicherheit aktiv ! (((referenz>grenzrefh) || (referenz { // Change Ventil "low to high"? if((sensor<=grenzwl && higherreicht==HIGH) || (modus==LOW && higherreicht==HIGH)) // Zeit oder Signal modus { if((currentMillis-previouslowtime)>lowtime) // Zeitkriterium erfüllt? { if(ventState==HIGH){ventState=LOW;}else{ventState=HIGH;} digitalWrite(NPN1_DUT, ventState); digitalWrite(LED_NPN1_DUT, ventState); previoushightime=currentMillis; higherreicht=LOW; lowerreicht=HIGH; } } // Change Ventil "high to low"? if((sensor>=grenzwh && lowerreicht==HIGH) || (modus==LOW && lowerreicht==HIGH)) // Zeit oder Signal modus { if((currentMillis-previoushightime)>hightime) //Zeitkriterium erfüllt? { if(ventState==HIGH){ventState=LOW;}else{ventState=HIGH;} digitalWrite(NPN1_DUT, ventState); digitalWrite(LED_NPN1_DUT, ventState); saveMillis=currentMillis; previouslowtime=currentMillis; higherreicht=HIGH; lowerreicht=LOW; //increment counter counteract=counteract+1; showMenuNumberlong(counteract, 40, 110); } } } if(counteract>=counter) //enough counts -> { STOP(); } } //draw graph + serial remote control if ON if(currentMillis - previousMillis >= timekrit) { drawSensorValue(sensor, referenz); previousMillis = currentMillis; if(serial==HIGH) { if (Serial.available() > 0) { inByte = Serial.read(); if(inByte==65) { Serial.write(inByte); START(); } if(inByte==66) { Serial.write(inByte); STOP(); } if(inByte==67) { dataString=Serial.readString(); Serial.println(dataString); char tarray[9]; dataString.toCharArray(tarray, sizeof(tarray)); counter = atol(tarray); //Show HomeScreen TFTscreen.background(255, 255, 255); // clear the screen TFTscreen.stroke(0, 0, 0); //set color black TFTscreen.setTextSize(2); // set the font size TFTscreen.text("Druckzyklen", 15, 3); // write the text TFTscreen.setTextSize(1); // set the font size TFTscreen.text("Count:", 1, 110); // write the text showMenuNumberlong(counteract, 40, 110); showMenuNumberlong(counter, 100, 110); xPos=0; showGRID(); } if(inByte==68) { long n = counteract; count[0]= (byte) n; n=n>>8; count[1]= (byte) n; n=n>>8; count[2]= (byte) n; n=n>>8; count[3]= (byte) n; Serial.write(count[0]); Serial.write(count[1]); Serial.write(count[2]); Serial.write(count[3]); } if(inByte==69) { Serial.println(strV); } if(inByte==70) { dataString=Serial.readString(); Serial.println(dataString); char tarray[9]; dataString.toCharArray(tarray, sizeof(tarray)); counteract = atol(tarray); Serial.print(dataString); // Show HomeScreen TFTscreen.background(255, 255, 255); // clear the screen TFTscreen.stroke(0, 0, 0); //set color black TFTscreen.setTextSize(2); // set the font size TFTscreen.text("Druckzyklen", 15, 3); // write the text TFTscreen.setTextSize(1); // set the font size TFTscreen.text("Count:", 1, 110); // write the text showMenuNumberlong(counteract, 40, 110); showMenuNumberlong(counter, 100, 110); xPos=0; showGRID(); } } } } }// Loop end //**************************************************************************************************************************************************************************************************** //*******************************************_____________________________Sub_Programs________________________**************************************************************************************** //**************************************************************************************************************************************************************************************************** //**********************************************_____________________________Menu________________________********************************************************************************************* void Menu() { menuposition=0; TFTscreen.background(255, 255, 255); // clear the screen //MenuPage1 TFTscreen.stroke(0, 0, 0); TFTscreen.setTextSize(2); TFTscreen.text("EINSTELLUNGEN", 3, 3); TFTscreen.setTextSize(1); TFTscreen.text("<-", 145, 20); TFTscreen.text("st. Modus :",1,20); if(modus==HIGH){TFTscreen.text("S+t", 100, 20);}else{TFTscreen.text("t", 100, 20);} TFTscreen.text("TimeHigh[ms] :", 1, 30); showMenuNumberlong(hightime, 100, 30); TFTscreen.text("TimeLow[ms] :", 1, 40); showMenuNumberlong(lowtime, 100, 40); TFTscreen.text("SwitchHigh[%]:", 1, 50); showMenuNumber(schalth, 100, 50); TFTscreen.text("SwitchLow[%] :", 1, 60); showMenuNumber(schaltl, 100, 60); TFTscreen.text("LimitHigh[%] :", 1, 70); showMenuNumber(grenzh, 100, 70); TFTscreen.text("LimitLow[%] :", 1, 80); showMenuNumber(grenzl, 100, 80); TFTscreen.text("Soll Counter :", 1, 90); showMenuNumberlong(counter, 100, 90); TFTscreen.text("Reset act.C. :", 1, 100); showMenuNumberlong(counteract, 100, 100); TFTscreen.text("ResetError :", 1, 110); if(fehler==HIGH){TFTscreen.text("ERROR", 100, 110);}else{TFTscreen.text("No ERR.", 100, 110);} TFTscreen.text("", 1, 120); while(menuposition<20) { currentMillis = millis(); Tplus = digitalRead(PinPlus); Tenter = digitalRead(PinEnter); Tminus = digitalRead(PinMinus); if((currentMillis-tastermillis)>100) { tastermillis=currentMillis; if(Tenter==LOW && TenterOld==HIGH) { TenterOld=LOW; } if(Tenter==HIGH && TenterOld==LOW) { TenterOld=HIGH; if(menuposition<10) { TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255); TFTscreen.rect(145,(10*menuposition+20),15,10);TFTscreen.stroke(0,0,0); menuposition=menuposition+1; TFTscreen.text("<-", 145,(10*menuposition+20)); } else { TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255); TFTscreen.rect(145,((menuposition-9)*10+10),15,10);TFTscreen.stroke(0,0,0); menuposition=menuposition+1; TFTscreen.text("<-", 145,((menuposition-9)*10+10)); } if(menuposition==10) { TFTscreen.background(255, 255, 255); // clear the screen TFTscreen.stroke(0, 0, 0); TFTscreen.setTextSize(2); TFTscreen.text("EINSTELLUNGEN",3,3); TFTscreen.setTextSize(1); TFTscreen.text("<-",145,20); TFTscreen.text("NPN1 inv. :",1,20); if(invnpn1==HIGH){TFTscreen.text("ON", 100, 20);}else{TFTscreen.text("OFF", 100, 20);} TFTscreen.text("NPN2 inv. :",1,30); if(invnpn2==HIGH){TFTscreen.text("ON", 100, 30);}else{TFTscreen.text("OFF", 100, 30);} TFTscreen.text("NPN3 inv. :",1,40); if(invnpn3==HIGH){TFTscreen.text("ON", 100, 40);}else{TFTscreen.text("OFF", 100, 40);} TFTscreen.text("NPN4 inv. :",1,50); if(invnpn4==HIGH){TFTscreen.text("ON", 100, 50);}else{TFTscreen.text("OFF", 100, 50);} TFTscreen.text("Sicherh.REF :",1,60); if(sicherheit==HIGH){TFTscreen.text("ON", 100, 60);}else{TFTscreen.text("OFF", 100, 60);} TFTscreen.text("Sicherh.Time :",1,70); if(sicherheitt==HIGH){TFTscreen.text("ON", 100, 70);}else{TFTscreen.text("OFF", 100, 70);} TFTscreen.text("S.Time [ms] :",1,80); showMenuNumberlong(saveTime, 100, 80); TFTscreen.text("ReadEE_Count.:",1,90); TFTscreen.text("---", 100, 90); TFTscreen.text("EepromSave :",1,100); if(eeprom==HIGH){TFTscreen.text("ON", 100, 100);}else{TFTscreen.text("OFF", 100, 100);} TFTscreen.text("SerialRemote :", 1, 110); if(serial==HIGH){TFTscreen.text("ON", 100, 110);}else{TFTscreen.text("OFF", 100, 110);} } } if(Tplus==1 && TplusOld==0) { TplusOld=1; if(menuposition==0){modus=HIGH;TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 20,40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("S+t", 100, 20);} if(menuposition==1) { if(hightime<1000000&&hightime>=100000) { hightime=hightime+100000; } if(hightime<100000&&hightime>=10000) { hightime=hightime+10000; } if(hightime<10000&&hightime>=1000) { hightime=hightime+1000; } if(hightime<1000&&hightime>=100) { hightime=hightime+100; } if(hightime<100&&hightime>=10) { hightime=hightime+10; } if(hightime<10) { hightime=hightime+1; } if(hightime>1000000){hightime=1000000;} showMenuNumberlong(hightime, 100, (10*menuposition+20)); } if(menuposition==2) { if(lowtime<1000000&&lowtime>=100000) { lowtime=lowtime+100000; } if(lowtime<100000&&lowtime>=10000) { lowtime=lowtime+10000; } if(lowtime<10000&&lowtime>=1000) { lowtime=lowtime+1000; } if(lowtime<1000&&lowtime>=100) { lowtime=lowtime+100; } if(lowtime<100&&lowtime>=10) { lowtime=lowtime+10; } if(lowtime<10) { lowtime=lowtime+1; } if(lowtime>10000000){lowtime=10000000;} showMenuNumberlong(lowtime, 100, (10*menuposition+20)); } if(menuposition==3){schalth=schalth+5;if(schalth>100){schalth=100;} showMenuNumber(schalth, 100, (10*menuposition+20));} if(menuposition==4){schaltl=schaltl+5;if(schaltl>100){schaltl=100;} showMenuNumber(schaltl, 100, (10*menuposition+20));} if(menuposition==5){grenzh=grenzh+5;if(grenzh>100){grenzh=100;} showMenuNumber(grenzh, 100, (10*menuposition+20));} if(menuposition==6){grenzl=grenzl+5;if(grenzl>100){grenzl=100;} showMenuNumber(grenzl, 100, (10*menuposition+20));} if(menuposition==7) { if(counter<10000000&&counter>=1000000) { counter=counter+1000000; } if(counter<1000000&&counter>=100000) { counter=counter+100000; } if(counter<100000&&counter>=10000) { counter=counter+10000; } if(counter<10000&&counter>=1000) { counter=counter+1000; } if(counter<1000&&counter>=100) { counter=counter+100; } if(counter<100&&counter>=10) { counter=counter+10; } if(counter<10) { counter=counter+1; } if(counter>10000000){counter=10000000;} showMenuNumberlong(counter, 100, (10*menuposition+20)); } if(menuposition==8){counteract=0;showMenuNumberlong(counteract, 100, (10*menuposition+20));} if(menuposition==9) { digitalWrite(LED_FEHLER,0);// "LED Fehler" Aus if(invnpn2==LOW) { digitalWrite(NPN2_SICHERHEIT, LOW); digitalWrite(LED_NPN2_SICHERHEIT, LOW); } else { digitalWrite(NPN2_SICHERHEIT, HIGH); digitalWrite(LED_NPN2_SICHERHEIT, HIGH); } TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 110, 40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("No ERR.", 100, 110);fehler=0; } if(menuposition==10){digitalWrite(NPN1_DUT, HIGH); digitalWrite(LED_NPN1_DUT, HIGH);TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 20, 40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("ON", 100, 20);invnpn1=1;ventState=1;} if(menuposition==11){digitalWrite(NPN2_SICHERHEIT, HIGH); digitalWrite(LED_NPN2_SICHERHEIT, HIGH);TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 30,40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("ON", 100, 30);invnpn2=1;} if(menuposition==12){digitalWrite(NPN3, HIGH); digitalWrite(LED_NPN3, HIGH);TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 40, 40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("ON", 100, 40);invnpn3=1;} if(menuposition==13){digitalWrite(NPN4_Reserve, HIGH); digitalWrite(LED_NPN4, HIGH);TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 50, 40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("ON", 100, 50);invnpn4=1;} if(menuposition==14){TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 60,40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("ON", 100, 60);sicherheit=1;} if(menuposition==15){sicherheitt=HIGH;TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 70,40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("ON", 100, 70);} if(menuposition==16){saveTime=saveTime+100; showMenuNumberlong(saveTime, 100, 80);} if(menuposition==17) { eeprombuf[0] = EEPROM.read(0);eeprombuf[1] = EEPROM.read(1);eeprombuf[2] = EEPROM.read(2);eeprombuf[3] = EEPROM.read(3); counteract = eeprombuf[3]; counteract=counteract<<8; counteract=counteract+eeprombuf[2]; counteract=counteract<<8; counteract=counteract+eeprombuf[1]; counteract=counteract<<8; counteract=counteract+eeprombuf[0]; showMenuNumberlong(counteract, 100, 90); } if(menuposition==18){digitalWrite(NPN_EEPROM,HIGH);TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 100,40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("ON", 100, 100);eeprom=1;} if(menuposition==19){TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 110, 40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("ON", 100, 110);serial=1;} } if(Tplus==0 && TplusOld==1){TplusOld=0;} if(Tminus==1 && TminusOld==0) { TminusOld=1; if(menuposition==0){modus=LOW;TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 20,40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("t", 100, 20);} if(menuposition==1) {//hightime=hightime-100;if(hightime<0){hightime=0;} showMenuNumber(hightime, 100, (10*menuposition+20)); if(hightime<=1000000&&hightime>100000) { hightime=hightime-100000; } if(hightime<=100000&&hightime>10000) { hightime=hightime-10000; } if(hightime<=10000&&hightime>1000) { hightime=hightime-1000; } if(hightime<=1000&&hightime>100) { hightime=hightime-100; } if(hightime<=100&&hightime>10) { hightime=hightime-10; } if(hightime<=10) { hightime=hightime-1; } if(hightime<0){hightime=0;} showMenuNumberlong(hightime, 100, (10*menuposition+20)); } if(menuposition==2) {//lowtime=lowtime-100;if(lowtime<0){lowtime=0;} showMenuNumber(lowtime, 100, (10*menuposition+20)); if(lowtime<=1000000&&lowtime>100000) { lowtime=lowtime-100000; } if(lowtime<=100000&&lowtime>10000) { lowtime=lowtime-10000; } if(lowtime<=10000&&lowtime>1000) { lowtime=lowtime-1000; } if(lowtime<=1000&&lowtime>100) { lowtime=lowtime-100; } if(lowtime<=100&&lowtime>10) { lowtime=lowtime-10; } if(lowtime<=10) { lowtime=lowtime-1; } if(lowtime<0){lowtime=0;} showMenuNumberlong(lowtime, 100, (10*menuposition+20)); } if(menuposition==3){schalth=schalth-5;if(schalth<0){schalth=0;} showMenuNumber(schalth, 100, (10*menuposition+20));} if(menuposition==4){schaltl=schaltl-5;if(schaltl<0){schaltl=0;} showMenuNumber(schaltl, 100, (10*menuposition+20));} if(menuposition==5){grenzh=grenzh-5;if(grenzh<0){grenzh=0;} showMenuNumber(grenzh, 100, (10*menuposition+20));} if(menuposition==6){grenzl=grenzl-5;if(grenzl<0){grenzl=0;} showMenuNumber(grenzl, 100, (10*menuposition+20));} if(menuposition==7) { if(counter<=10000000&&counter>1000000) { counter=counter-1000000; } if(counter<=1000000&&counter>100000) { counter=counter-100000; } if(counter<=100000&&counter>10000) { counter=counter-10000; } if(counter<=10000&&counter>1000) { counter=counter-1000; } if(counter<=1000&&counter>100) { counter=counter-100; } if(counter<=100&&counter>10) { counter=counter-10; } if(counter<=10) { counter=counter-1; } if(counter<0){counter=0;} showMenuNumberlong(counter, 100, (10*menuposition+20)); } if(menuposition==8){counteract=0;showMenuNumberlong(counteract, 100, (10*menuposition+20));} if(menuposition==9) { digitalWrite(LED_FEHLER,0);// "LED Fehler" Aus if(invnpn2==LOW) { digitalWrite(NPN2_SICHERHEIT, LOW); digitalWrite(LED_NPN2_SICHERHEIT, LOW); } else { digitalWrite(NPN2_SICHERHEIT, HIGH); digitalWrite(LED_NPN2_SICHERHEIT, HIGH); } TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 110, 40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("No ERR.", 100, 110);fehler=0; } if(menuposition==10){digitalWrite(NPN1_DUT, LOW); digitalWrite(LED_NPN1_DUT, LOW);TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 20, 40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("OFF", 100, 20);invnpn1=0;ventState=0;} if(menuposition==11){digitalWrite(NPN2_SICHERHEIT, LOW); digitalWrite(LED_NPN2_SICHERHEIT, LOW);TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 30, 40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("OFF", 100, 30);invnpn2=0;} if(menuposition==12){digitalWrite(NPN3, LOW); digitalWrite(LED_NPN3, LOW);TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 40, 40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("OFF", 100, 40);invnpn3=0;} if(menuposition==13){digitalWrite(NPN4_Reserve, LOW); digitalWrite(LED_NPN4, LOW);TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 50, 40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("OFF", 100, 50);invnpn4=0;} if(menuposition==14){TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 60,40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("OFF", 100, 60);sicherheit=0;} if(menuposition==15){sicherheitt=LOW;TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 70,40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("OFF", 100, 70);} if(menuposition==16){saveTime=saveTime-100;if(saveTime<0){saveTime=0;} showMenuNumberlong(saveTime, 100, 80);} if(menuposition==17) { eeprombuf[0] = EEPROM.read(0);eeprombuf[1] = EEPROM.read(1);eeprombuf[2] = EEPROM.read(2);eeprombuf[3] = EEPROM.read(3); counteract = eeprombuf[3]; counteract=counteract<<8; counteract=counteract+eeprombuf[2]; counteract=counteract<<8; counteract=counteract+eeprombuf[1]; counteract=counteract<<8; counteract=counteract+eeprombuf[0]; showMenuNumberlong(counteract, 100, 90); } if(menuposition==18){digitalWrite(NPN_EEPROM,LOW);TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 100,40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("OFF", 100, 100);eeprom=0;} if(menuposition==19){TFTscreen.stroke(255,255,255);TFTscreen.fill(255,255,255);TFTscreen.rect(100, 110, 40, 10);TFTscreen.stroke(0, 0, 0);TFTscreen.text("OFF", 100, 110);serial=0;} } if(Tminus==0 && TminusOld==1){TminusOld=0;} } }//End While Menu //Show HomeScreen TFTscreen.background(255, 255, 255); // clear the screen TFTscreen.stroke(0, 0, 0); //set color black TFTscreen.setTextSize(2); // set the font size TFTscreen.text("Druckzyklen", 15, 3); // write the text TFTscreen.setTextSize(1); // set the font size TFTscreen.text("Count:", 1, 110); // write the text showMenuNumberlong(counteract, 40, 110); showMenuNumberlong(counter, 100, 110); xPos=0; showGRID(); //Save Var. to EEPROM EEPROM.put(0, hightime); EEPROM.put(4, lowtime); EEPROM.put(8, schalth); EEPROM.put(10, schaltl); EEPROM.put(12, grenzh); EEPROM.put(14, grenzl); EEPROM.put(16, counter); EEPROM.put(20, saveTime); EEPROM.put(24, modus); EEPROM.put(26, sicherheitt); EEPROM.put(28, serial); EEPROM.put(30, invnpn1); EEPROM.put(32, invnpn2); EEPROM.put(34, sicherheit); EEPROM.put(36,invnpn3); EEPROM.put(38,invnpn4); //Timer Reset after Menue currentMillis = millis(); previousMillis = 0; previoushightime = 0; previouslowtime = 0; tastermillis=0; saveMillis=0; } //*******************************************_____________________________draw Sensor________________________************************************************************************************************ void drawSensorValue(int sensor, int referenz) { drawHeight = map(sensor, 0, 1023, 0, 80);//Re-maps a number from one range to another drawHeight2 = map(referenz, 0, 1023, 0, 80);//Re-maps a number from one range to another TFTscreen.stroke(255, 0, 0);//set Color red TFTscreen.line(xPos, 105 - drawHeight, xPos, 105); TFTscreen.stroke(0, 0, 255);//set Color yellow TFTscreen.point(xPos, 105-drawHeight2); // clear graph band TFTscreen.stroke(255,255,255);//set Color white TFTscreen.fill(255,255,255); //set Color white TFTscreen.rect(xPos+1, 26, 2, 79); //clear graph //draw 10/50/90% lines TFTscreen.stroke(0,0,0);//set Color black TFTscreen.line(xPos,33,xPos+3,33);//10% TFTscreen.line(xPos,65,xPos+3,65);//50% TFTscreen.line(xPos,97,xPos+3,97);//90% // if the graph has reached the screen edge // erase the screen band and start again if (xPos >= 160) { xPos = 0; clearGraphBand(); } else { xPos++; } } //*******************************************_____________________________draw Grid________________________************************************************************************************************ //write Grid void showGRID() { // set Color Black TFTscreen.stroke(0,0,0); //100% Line TFTscreen.line(0,25,160,25); TFTscreen.line(0,24,160,24); //0% Line TFTscreen.line(0,105,160,105); TFTscreen.line(0,106,160,106); //10% Line TFTscreen.line(0,33,160,33); //50% Line TFTscreen.line(0,65,160,65); //90% Line TFTscreen.line(0,97,160,97); } //*******************************************_____________________________clear Graph________________________************************************************************************************************ // clear graph void clearGraph() { TFTscreen.stroke(255,255,255);//set Color white TFTscreen.fill(255,255,255); //set Color white TFTscreen.rect(0, 26, 160, 79); //clear graph } //*******************************************_____________________________clear Band________________________************************************************************************************************ // clear graph band void clearGraphBand() { TFTscreen.stroke(255,255,255); TFTscreen.fill(255,255,255); TFTscreen.rect(xPos, 26, 2, 79); } //*******************************************_____________________________Show Menu Number________________________************************************************************************************************ void showMenuNumber(int number, int x, int y) { sensorVal = String(number); sensorVal.toCharArray(sensorPrintout, 5); TFTscreen.stroke(255,255,255);//set Color white TFTscreen.fill(255,255,255); //set Color white TFTscreen.rect(x, y, 40, 10); //clear graph TFTscreen.stroke(0, 0, 0); //set color black TFTscreen.text(sensorPrintout, x, y); //print number position x,Y //delay(250); } void showMenuNumberlong(long number, int x, int y) { sensorVal = String(number); sensorVal.toCharArray(sensorPrintout, 9); TFTscreen.stroke(255,255,255);//set Color white TFTscreen.fill(255,255,255); //set Color white TFTscreen.rect(x, y, 45, 10); //clear graph rect TFTscreen.stroke(0, 0, 0); //set color black TFTscreen.text(sensorPrintout, x, y); } //*******************************************_____________________________START / STOP________________________************************************************************************************************ void START(void) { start=HIGH; digitalWrite(LED_EIN, 1); digitalWrite(LED_AUS, 0); saveMillis=currentMillis; //if(invnpn1==1){higherreicht = LOW; lowerreicht = HIGH;}else{higherreicht = HIGH; lowerreicht = LOW;}//Änderung 03.08.2016 higherreicht=HIGH;//Änderung 03.08.2016 lowerreicht=HIGH;//Änderung 03.08.2016 previouslowtime=currentMillis; previoushightime=currentMillis; //if(invnpn1==0){digitalWrite(NPN1_DUT, HIGH); digitalWrite(LED_NPN1_DUT, HIGH);ventState=HIGH;} //Änderung 03.08.2016 //if(invnpn1==1){digitalWrite(NPN1_DUT, LOW); digitalWrite(LED_NPN1_DUT, LOW);ventState=LOW;} //Änderung 03.08.2016 if(invnpn4==1){digitalWrite(NPN4_Reserve, HIGH); digitalWrite(LED_NPN4, HIGH);} if(invnpn4==0){digitalWrite(NPN4_Reserve, LOW); digitalWrite(LED_NPN4, LOW);} delay(2000); if(invnpn3==1){digitalWrite(NPN3, HIGH); digitalWrite(LED_NPN3, HIGH);} if(invnpn3==0){digitalWrite(NPN3, LOW); digitalWrite(LED_NPN3, LOW);} } void STOP(void) { start=LOW; digitalWrite(LED_EIN, 0); digitalWrite(LED_AUS, 1); if(invnpn1==1){digitalWrite(NPN1_DUT, HIGH); digitalWrite(LED_NPN1_DUT, HIGH);ventState=HIGH;} if(invnpn1==0){digitalWrite(NPN1_DUT, LOW); digitalWrite(LED_NPN1_DUT, LOW);ventState=LOW;} if(invnpn3==1){digitalWrite(NPN3, LOW); digitalWrite(LED_NPN3, LOW);} if(invnpn3==0){digitalWrite(NPN3, HIGH); digitalWrite(LED_NPN3, HIGH);} delay(2000); if(invnpn4==1){digitalWrite(NPN4_Reserve, LOW); digitalWrite(LED_NPN4, LOW);} if(invnpn4==0){digitalWrite(NPN4_Reserve, HIGH); digitalWrite(LED_NPN4, HIGH);} }