/* **********************************************************************
BlastGate V1.2 (Update:25.05.2020)
V1.2: - Bei Aktivierung der servoSafer-Funktion (geht nur mit zusätzlichen Hall-Sensoren (ACS712) an jedem Servo) überwacht die Software die Servos
auf Überlast und schaltet diese ggf. ab.
- Pulsierender Servo Modus. Bei Aktivierung werden die Servos eine bestimmte Zeit nach der Positionierung deaktiviert und können so auch schwerer
durchbrennen. Nach einer einstellbaren Zeit wird die Position aufgefrischt.
- Es kann jetzt ein Reinigungsprogramm aktiviert werden, das alle Klappen ,in beliebiger Reihnefolge für eine bestimmte Zeit, nacheinander öffnet, um das Rohrsystem zu säubern.
- Bugfix in Servo Kanal 5
- Zeitmessung der Millisekunden ist jetzt genau, nicht mehr "in etwa"
- Nicht genutzte Kanäle der AC-Strommessung müssen nicht mehr auf GND gelegt werden. Sobald der Min UND Max-Wert eines Servos auf 0 gestellt werden
ist der Kanal inaktiv.
- Für Kanäle, die zwar eine Klappe haben aber keinen AC-Stromsensor, kann jeweils die "autoOn" Funktion auf 0 gesetzt werden. Somit müssen diese auch nicht mehr
auf GND gelegt werden
V1.1: - Falschluftklappe fährt jetzt automatisch wieder auf, wenn ein angeschlossenes Gerät erneut eingeschaltet wird und
eine Falschluftklappe offen war.
Deaktivierung: Falschluftklappe schliessen, während eine Maschine läuft, oder Entsprechende Klappe auf und zu fahren wenn kein Gerät läuft.
- Die LED des Kanals, der im Automodus ausgeschaltet wird, blinkt während der Nachlaufzeit der Absaugung
V1: Startversion
(c)2020 Frohnix Bastelbude -> https://www.youtube.com/user/Frohnix
Die kommerzielle Nutzung der Software ist ausdrücklich untersagt.
Beschreibung:
Die Schaltung kann bis zu 8 Blastgates und 1 Absaugung steuern.
Die Blastgates können per Taster oder über überwachte Steckdosen gesteuert werden.
Funktionsweise:
- Per Taster kann immer nur 1 Blastgate gleichzeitig geöffnet werden. Wird ein Blastgate geöffnet schließt sich ein anderes, welches offen ist, automatisch.
- Blastgates, die per überwachter Steckdosen ausgelöst werden, öffnen sich immer (also auch mehrere gleichzeitig).
- Das erste Blastgate das sich automatisch öffnet, statet die Absaugung nach der in "absaugungEinAusDelay" eingestellten Zeit (in Millisekunden).
- Das letzte Bastgate das sich automatisch schließt, schaltet die Absaugung in der "absaugungEinAusDelay" eingestellten Zeit (in Millisekunden), vor dem Schließen ab.
- Die Nachlaufzeit der Absaugung, um die Leitungen frei zu saugen, wird in "acNachlaufValue" eingestellt (Millisekunden)
Ablauf an einer überwachten Steckdose:
Gerät EIN -> Blastgate fährt auf -> Warten "absaugungEinAusDelay" -> Absaugung EIN
Gerät AUS -> Warten "acNachlaufValue" -> Blastgate fährt ZU. Bevor das Blastgate schließt geht die Absaugung nach der in "absaugungEinAusDelay" eingestellten Zeit AUS.
- ist mindestens ein Blastgate (per überwachter Steckdose) geöffnet, kann von Hand ein Zweites etwas geöffnet werden um Falschluft zu ziehen.
Das macht z.B. bei Excenterschleifern Sinn, damit sich diese nicht am Werkstück festsaugen. Der Öffnungsgrad in Grad wird in "falschLuftStellung" eingetragen.
Ein Blastgate im Falschluftmodus blinkt (bzw. die dazu gehörige LED)
- Ist kein Blastgate geöffnet, kann die Absaugung nicht von Hand gestartet werden
- Ist ein Blastgate geöffnet blinkt die Absaugungs-LED und die Absaugung könnte gestartet werden
- Wenn alle Blastgates bei laufender Absaugung geschlossen werden, geht diese sofort aus.
Pinbelegung Arduino MEGA:
Taster (alle Taster schließen zu GND):
Absaugung : 6 LED+:7 LED-: GND
Blastgate 0 : 53 LED+:52 LED-: GND
Blastgate 1 : 51 LED+:50 LED-: GND
Blastgate 2 : 49 LED+:48 LED-: GND
Blastgate 3 : 47 LED+:46 LED-: GND
Blastgate 4 : 45 LED+:44 LED-: GND
Blastgate 5 : 43 LED+:42 LED-: GND
Blastgate 6 : 41 LED+:40 LED-: GND
Blastgate 7 : 39 LED+:38 LED-: GND
Unbedingt drauf achten, das die LED's 5V vertragen (normalerweise nicht). Ansonsten einen ca. 150 Ohm Widerstand einfügen.
-------------------------------------------
Relais : S= 8 += 5V -= GND
-------------------------------------------
Stomsensoren (ZMCT103C):
Stromsensor 0: S= A0 G= GND
Stromsensor 1: S= A1 G= GND
Stromsensor 2: S= A2 G= GND
Stromsensor 3: S= A3 G= GND
Stromsensor 4: S= A4 G= GND
Stromsensor 5: S= A5 G= GND
Stromsensor 6: S= A6 G= GND
Stromsensor 7: S= A7 G= GND
-------------------------------------------
Servos (MG996R):
Servo 0: Orange= 22 Rot= +7V Braun= GND
Servo 1: Orange= 23 Rot= +7V Braun= GND
Servo 2: Orange= 24 Rot= +7V Braun= GND
Servo 3: Orange= 25 Rot= +7V Braun= GND
Servo 4: Orange= 26 Rot= +7V Braun= GND
Servo 5: Orange= 27 Rot= +7V Braun= GND
Servo 6: Orange= 28 Rot= +7V Braun= GND
Servo 7: Orange= 29 Rot= +7V Braun= GND
-------------------------------------------
Stromsensoren für die Servos (ACS712 von AZ-Delivery):
Sensor 0: VCC= 5V GND= GND OUT= A8
Sensor 1: VCC= 5V GND= GND OUT= A9
Sensor 2: VCC= 5V GND= GND OUT= A10
Sensor 3: VCC= 5V GND= GND OUT= A11
Sensor 4: VCC= 5V GND= GND OUT= A12
Sensor 5: VCC= 5V GND= GND OUT= A13
Sensor 6: VCC= 5V GND= GND OUT= A14
Sensor 7: VCC= 5V GND= GND OUT= A15
Bei nicht angeschlossenen Stromsensoren MÜSSEN die entsprechenden A8-A15 mit einen Kabel zu GND verbunden werden.
Das aber nur, wenn an dem Kanal ein Blastgate ohne Stromsensor hängt.
****************************************************************************************************
*
*
* EINSTELLUNGEN
*
*
****************************************************************************************************/
// Blastgate 1
// Die Auf/Zu-Position kann durch austauschen der Min und Max Werte geändert werden. servo(0-7)Min = ZU Stellung / servo(0-7)Max = AUF Stellung
// Wenn der Min UND Max Wert auf 0 gestellt wird, ist der Kanal deaktiviert. (Neu ab V1.2)
int servo0Min = 86 ; // Klappe ZU Stellwinkel in Grad (Standard:90)
int servo0Max = 0 ; // Klappe AUF Stellwinkel in Grad (Standard:0)
bool autoOn0 = false ; // AC Stromsensor für den Kanal: true = aktiv, false = inaktiv bzw. nicht vorhanden
// Blastgate 2
int servo1Min = 98 ;
int servo1Max = 0 ;
bool autoOn1 = true ;
// Blastgate 3
int servo2Min = 98 ;
int servo2Max = 0 ;
bool autoOn2 = true ;
// Blastgate 4
int servo3Min = 102 ;
int servo3Max = 5 ;
bool autoOn3 = true ;
// Blastgate 5
int servo4Min = 96 ;
int servo4Max = 0 ;
bool autoOn4 = true ;
// Blastgate 6
int servo5Min = 88 ;
int servo5Max = 0 ;
bool autoOn5 = true ;
// Blastgate 7
int servo6Min = 0 ;
int servo6Max = 0 ;
bool autoOn6 = false ;
// Blastgate 8
int servo7Min = 0 ;
int servo7Max = 0 ;
bool autoOn7 = false ;
// Öffnungsgrad in Grad für Falschluftbetrieb. (Voraussetzung: Eine, oder mehr Klappen sind von der Automatik geöffnet und es wird manuell eine Klappe
// zusätzlich geöffnet. (Standard:45)
int falschLuftStellung = 45 ;
// Trägheit der Strommessung für die Einschalautomatik. Kleinere Werte = schneller und fehleranfälliger,
// größere Werte = träger und fehlertoleranter (Standard:200)
int samples = 200 ;
// Auslöseschwelle der Einschaltautomatik. Kleinere Werte = schaltet bei niedrigerem Stromverbrauch ein ist aber fehleranfälliger
// 10 erkennt damit zuverlässig einen 125W "Dreeeeeeeemel" auf kleinster Stufe, ein Wert von 14 (Standard) ist sicher gegen Beeinflussung
// anderer Kanäle auf denen hoher Strom fließt, z.B. eine Kreissäge.
int acTrigger = 14 ;
// Nachlaufzeit des Staubsaugers in Millisekunden (Standard:4000)
long acNachlaufValue = 4000 ;
// Verzögerung des Staubsaugers in Millisekunden.
// Sobald eine Klappe mit der Einschaltautomatik AUF fährt, schaltet sich der Stabsauger nach dieser Verzögerung ein, bzw.
// wenn die klappe ZU fahren soll,schaltet sich der Staubsauger diese Zeit vor Klappen-ZU-fahrt aus.
// Somit fahren die Klappen nicht bei eingeschalteter Absaugung. (Standard:1000)
long absaugungEinAusDelay = 500 ;
// Servo Schutzfunktionen (Neu ab V1.2)
// Schaltet die aktive Servo Überwachung ein, wobei die Stromaufnahme der Servos überprüft und die Servos ggf abgeschaltet werden
// dafür muss in die GND-Leitung jedes Servos ein ACS712 Stromsensor eingebaut werden (VCC=+5V,GND=-,OUT=A8-A15).
// Der Servo sollte von Magnetfeldern ferngehalten werden, da es sonst zu Fehlmessungen kommt
// Geht ein Servo auf Störung, blinkt seine LED schnell und der Servo ist abgeschaltet. Reaktivierung erfolgt mit Drücken des entsprechendnen Klappenschalters.
bool servoSaver = true ; // Schaltet die aktive Überwachung des Servos ein (true) oder aus (false)
int errorAfter = 500 ; // Zeit in Millisekunden die ein Servo Strom ziehen darf.
// 500 ist OK, da der Servo beim Positionieren Strom zieht und dann nicht ausfallen soll.
int errorCurrent = 350 ; // Strom in Milliampere, der den Servo auf Störung gehen lässt (nach der errorAfter Zeit)
// Die Auflösung beträgt ca. 30 Millampere (Werte < 150 können zu Fehlalarmen führen)
// Schaltet die Servos in einen pulsenden Modus. Die Servos werden jetzt nur noch für eine Neupositionierung aktiviert und danach deaktiviert bis eine erneute
// Positionsänderung angefordert wird oder die in "posInterval" eingestellte Zeit in Millisekunden erreicht wird.
// Dieser Modus alleine kann den Nachteil haben, das die Klappen von alleine (Luftstrom, Gewicht) ihre Position verändern. Das kann dann mit kleinerem posInterval
// ausgeglichen werden.
bool pulseMode = true ; // Schaltet den Puls Modus ein (true) bzw. aus (false)
int runTime = 550 ; // Die Zeit, die ein Servo bekommt um die Position zu ändern (Millisekunden)
long posInterval = 10000 ; // Nach dieser Zeit (Millisekunden) werden alle Positionen aufgefrischt. Der Wert -1 deaktiviert die Auffrischung.
// Die beste Strategie ist pulseMode + servoSafer, wobei die runTime (pulseMode) größer als die errorAfter(servoSafer) sein muss,
// damit überhaupt ein Fehler erkannt wird
// Reinigungsschritt
bool cleanSystem = false ; // true = aktiv, false = deaktiviert
// Führt nach der Nachlaufzeit der Absaugung eine Reinigungsprozedur aller aktiven Blastgates aus. Die Klappen werden nacheinander (einzelnd) für eine bestimmte
// Zeit geöffnet, um das Rohrsystem zu reinigen.
long cleanTimePerGate = 3000 ; // Zeit in Millisekunden, die jede Klappe geöffnet wird
int cleanOrder0 = 7 ; // Nummer (Servo bzw. Kanal) der ersten Klappe, die geöffnet werden soll (0-7). Ein Wert von -1 überspringt die Klappe. Nicht aktive Klappen werden automatisch übersprungen.
int cleanOrder1 = 6 ; // Zweite Klappe
int cleanOrder2 = 5 ; // Dritte Klappe
int cleanOrder3 = 4 ; // Vierte Klappe
int cleanOrder4 = 3 ; // Fünfte Klappe
int cleanOrder5 = 2 ; // Sechste Klappe
int cleanOrder6 = 1 ; // Siebente Klappe
int cleanOrder7 = 0 ; // Achte Klappe
/***************************************************************
*
*
*
* Einstellungen ENDE
*
*
*
*
***************************************************************/
bool cleaningSystem=false;
bool debug = false;
int cleanCounter=0;
int cleanTimer=0;;
bool chan0Active = true;
bool chan1Active = true;
bool chan2Active = true;
bool chan3Active = true;
bool chan4Active = true;
bool chan5Active = true;
bool chan6Active = true;
bool chan7Active = true;
bool aufZu0 = false;
bool aufZu1 = false;
bool aufZu2 = false;
bool aufZu3 = false;
bool aufZu4 = false;
bool aufZu5 = false;
bool aufZu6 = false;
bool aufZu7 = false;
bool absaugungEinAus = false;
bool aufZuOver0 = false;
bool aufZuOver1 = false;
bool aufZuOver2 = false;
bool aufZuOver3 = false;
bool aufZuOver4 = false;
bool aufZuOver5 = false;
bool aufZuOver6 = false;
bool aufZuOver7 = false;
bool ac0Triggered = false;
bool ac1Triggered = false;
bool ac2Triggered = false;
bool ac3Triggered = false;
bool ac4Triggered = false;
bool ac5Triggered = false;
bool ac6Triggered = false;
bool ac7Triggered = false;
bool ac0Nachlauf = false;
bool ac1Nachlauf = false;
bool ac2Nachlauf = false;
bool ac3Nachlauf = false;
bool ac4Nachlauf = false;
bool ac5Nachlauf = false;
bool ac6Nachlauf = false;
bool ac7Nachlauf = false;
int ac0 = 0; int ac1 = 0; int ac2 = 0; int ac3 = 0; int ac4 = 0; int ac5 = 0; int ac6 = 0; int ac7 = 0;
int sc = 0;
long sumA0 = 0; long sumA1 = 0; long sumA2 = 0; long sumA3 = 0; long sumA4 = 0; long sumA5 = 0; long sumA6 = 0; long sumA7 = 0;
long acNlVal0 = 0;
long acNlVal1 = 0;
long acNlVal2 = 0;
long acNlVal3 = 0;
long acNlVal4 = 0;
long acNlVal5 = 0;
long acNlVal6 = 0;
long acNlVal7 = 0;
long absEAD = 0;
bool wasOver0 = false;
bool wasOver1 = false;
bool wasOver2 = false;
bool wasOver3 = false;
bool wasOver4 = false;
bool wasOver5 = false;
bool wasOver6 = false;
bool wasOver7 = false;
int runTime0 = 0;
int runTime1 = 0;
int runTime2 = 0;
int runTime3 = 0;
int runTime4 = 0;
int runTime5 = 0;
int runTime6 = 0;
int runTime7 = 0;
int posIntervalCount = 0;
bool rePos = true;
unsigned long millisOld = 0;
unsigned long millisDif = 0;
int currentSamples = 50;
int currentSamplesCount = 0;
int current0 = 0;
int current1 = 0;
int current2 = 0;
int current3 = 0;
int current4 = 0;
int current5 = 0;
int current6 = 0;
int current7 = 0;
long current0Sum = 0;
long current1Sum = 0;
long current2Sum = 0;
long current3Sum = 0;
long current4Sum = 0;
long current5Sum = 0;
long current6Sum = 0;
long current7Sum = 0;
long error0Counter = 0;
long error1Counter = 0;
long error2Counter = 0;
long error3Counter = 0;
long error4Counter = 0;
long error5Counter = 0;
long error6Counter = 0;
long error7Counter = 0;
bool servo0Error = false;
bool servo1Error = false;
bool servo2Error = false;
bool servo3Error = false;
bool servo4Error = false;
bool servo5Error = false;
bool servo6Error = false;
bool servo7Error = false;
#include <Servo.h>
Servo servo0, servo1, servo2, servo3, servo4, servo5, servo6, servo7, servo8;
void setup() {
Serial.begin(115200);
// Relais
pinMode(8, OUTPUT);
// LED's
pinMode(52, OUTPUT); //Kanal 1
pinMode(50, OUTPUT); //Kanal 2
pinMode(48, OUTPUT); //Kanal 3
pinMode(46, OUTPUT); //Kanal 4
pinMode(44, OUTPUT); //Kanal 5
pinMode(42, OUTPUT); //Kanal 6
pinMode(40, OUTPUT); //Kanal 7
pinMode(38, OUTPUT); //Kanal 8
pinMode(7, OUTPUT); //Vacuum
// Taster
pinMode(53, INPUT_PULLUP); //Kanal 1
pinMode(51, INPUT_PULLUP); //Kanal 2
pinMode(49, INPUT_PULLUP); //Kanal 3
pinMode(47, INPUT_PULLUP); //Kanal 4
pinMode(45, INPUT_PULLUP); //Kanal 5
pinMode(43, INPUT_PULLUP); //Kanal 6
pinMode(41, INPUT_PULLUP); //Kanal 7
pinMode(39, INPUT_PULLUP); //Kanal 8
pinMode(6, INPUT_PULLUP); //Vakuum
// Servos
servo0.attach(22); //Kanal 1
servo1.attach(23); //Kanal 2
servo2.attach(24); //Kanal 3
servo3.attach(25); //Kanal 4
servo4.attach(26); //Kanal 5
servo5.attach(27); //Kanal 6
servo6.attach(28); //Kanal 7
servo7.attach(29); //Kanal 8
// Kanäle aktiv/inaktiv
if(servo0Min==0 && servo0Max==0){
chan0Active=false;
}else{
chan0Active=true;
}
if(servo1Min==0 && servo1Max==0){
chan1Active=false;
}else{
chan1Active=true;
}
if(servo2Min==0 && servo2Max==0){
chan2Active=false;
}else{
chan2Active=true;
}
if(servo3Min==0 && servo3Max==0){
chan3Active=false;
}else{
chan3Active=true;
}
if(servo4Min==0 && servo4Max==0){
chan4Active=false;
}else{
chan4Active=true;
}
if(servo5Min==0 && servo5Max==0){
chan5Active=false;
}else{
chan5Active=true;
}
if(servo6Min==0 && servo6Max==0){
chan6Active=false;
}else{
chan6Active=true;
}
if(servo7Min==0 && servo7Max==0){
chan7Active=false;
}else{
chan7Active=true;
}
}
void loop() {
// millisTimer
if (millisOld != millis()) {
millisDif = millis() - millisOld;
if (millisDif < 0) {
millisDif = 0;
}
millisOld = millis();
}
// ServoSaver
if (servoSaver == true) {
current0Sum = current0Sum + analogRead(A8);
current1Sum = current1Sum + analogRead(A9);
current2Sum = current2Sum + analogRead(A10);
current3Sum = current3Sum + analogRead(A11);
current4Sum = current4Sum + analogRead(A12);
current5Sum = current5Sum + analogRead(A13);
current6Sum = current6Sum + analogRead(A14);
current7Sum = current7Sum + analogRead(A15);
currentSamplesCount++;
if (currentSamplesCount >= currentSamples) {
current0 = abs(512 - (current0Sum / currentSamples)) * 30;
current1 = abs(512 - (current1Sum / currentSamples)) * 30;
current2 = abs(512 - (current2Sum / currentSamples)) * 30;
current3 = abs(512 - (current3Sum / currentSamples)) * 30;
current4 = abs(512 - (current4Sum / currentSamples)) * 30;
current5 = abs(512 - (current5Sum / currentSamples)) * 30;
current6 = abs(512 - (current6Sum / currentSamples)) * 30;
current7 = abs(512 - (current7Sum / currentSamples)) * 30;
current0Sum = 0;
current1Sum = 0;
current2Sum = 0;
current3Sum = 0;
current4Sum = 0;
current5Sum = 0;
current6Sum = 0;
current7Sum = 0;
currentSamplesCount = 0;
}
if (current0 > errorCurrent && chan0Active==true) {
error0Counter = error0Counter + millisDif;
} else {
error0Counter = 0;
}
if (current1 > errorCurrent && chan1Active==true) {
error1Counter = error1Counter + millisDif;
} else {
error1Counter = 0;
}
if (current2 > errorCurrent && chan2Active==true) {
error2Counter = error2Counter + millisDif;
} else {
error2Counter = 0;
}
if (current3 > errorCurrent && chan3Active==true) {
error3Counter = error3Counter + millisDif;
} else {
error3Counter = 0;
}
if (current4 > errorCurrent && chan4Active==true) {
error4Counter = error4Counter + millisDif;
} else {
error4Counter = 0;
}
if (current5 > errorCurrent && chan5Active==true) {
error5Counter = error5Counter + millisDif;
} else {
error5Counter = 0;
}
if (current6 > errorCurrent && chan6Active==true) {
error6Counter = error6Counter + millisDif;
} else {
error6Counter = 0;
}
if (current7 > errorCurrent && chan7Active==true) {
error7Counter = error7Counter + millisDif;
} else {
error7Counter = 0;
}
if (error0Counter > errorAfter) {
servo0Error = true;
servo0.detach();
}
if (error1Counter > errorAfter) {
servo1Error = true;
servo1.detach();
}
if (error2Counter > errorAfter) {
servo2Error = true;
servo2.detach();
}
if (error3Counter > errorAfter) {
servo3Error = true;
servo3.detach();
}
if (error4Counter > errorAfter) {
servo4Error = true;
servo4.detach();
}
if (error5Counter > errorAfter) {
servo5Error = true;
servo5.detach();
}
if (error6Counter > errorAfter) {
servo6Error = true;
servo6.detach();
}
if (error7Counter > errorAfter) {
servo7Error = true;
servo7.detach();
}
if (servo0Error == true) {
if (millis() % 100 < 80) {
digitalWrite(52, LOW);
} else {
digitalWrite(52, HIGH);
}
}
if (servo1Error == true) {
if (millis() % 100 < 80) {
digitalWrite(50, LOW);
} else {
digitalWrite(50, HIGH);
}
}
if (servo2Error == true) {
if (millis() % 100 < 80) {
digitalWrite(48, LOW);
} else {
digitalWrite(48, HIGH);
}
}
if (servo3Error == true) {
if (millis() % 100 < 80) {
digitalWrite(46, LOW);
} else {
digitalWrite(46, HIGH);
}
}
if (servo4Error == true) {
if (millis() % 100 < 80) {
digitalWrite(44, LOW);
} else {
digitalWrite(44, HIGH);
}
}
if (servo5Error == true) {
if (millis() % 100 < 80) {
digitalWrite(42, LOW);
} else {
digitalWrite(42, HIGH);
}
}
if (servo6Error == true) {
if (millis() % 100 < 80) {
digitalWrite(40, LOW);
} else {
digitalWrite(40, HIGH);
}
}
if (servo7Error == true) {
if (millis() % 100 < 80) {
digitalWrite(38, LOW);
} else {
digitalWrite(38, HIGH);
}
}
}
// Positionsinterval & passive Positionierung
if (pulseMode == true) {
if (posInterval > 0) { // posinterval
posIntervalCount = posIntervalCount + millisDif;
if (posIntervalCount >= posInterval + runTime) {
posIntervalCount = 0;
rePos = true;
}
}
runTime0 = runTime0 + millisDif;
runTime1 = runTime1 + millisDif;
runTime2 = runTime2 + millisDif;
runTime3 = runTime3 + millisDif;
runTime4 = runTime4 + millisDif;
runTime5 = runTime5 + millisDif;
runTime6 = runTime6 + millisDif;
runTime7 = runTime7 + millisDif;
if (runTime0 >= runTime) {
runTime0 = runTime;
servo0.detach();
}
if (runTime1 >= runTime) {
runTime1 = runTime;
servo1.detach();
}
if (runTime2 >= runTime) {
runTime2 = runTime;
servo2.detach();
}
if (runTime3 >= runTime) {
runTime3 = runTime;
servo3.detach();
}
if (runTime4 >= runTime) {
runTime4 = runTime;
servo4.detach();
}
if (runTime5 >= runTime) {
runTime5 = runTime;
servo5.detach();
}
if (runTime6 >= runTime) {
runTime6 = runTime;
servo6.detach();
}
if (runTime7 >= runTime) {
runTime7 = runTime;
servo7.detach();
}
}
if (rePos == true) {
if(servo0Error==false){servo0.attach(22); } //Kanal 1
if(servo1Error==false){servo1.attach(23); } //Kanal 2
if(servo2Error==false){servo2.attach(24); } //Kanal 3
if(servo3Error==false){servo3.attach(25); } //Kanal 4
if(servo4Error==false){servo4.attach(26); } //Kanal 5
if(servo5Error==false){servo5.attach(27); } //Kanal 6
if(servo6Error==false){servo6.attach(28); } //Kanal 7
if(servo7Error==false){servo7.attach(29); } //Kanal 8
runTime0 = 0;
runTime1 = 0;
runTime2 = 0;
runTime3 = 0;
runTime4 = 0;
runTime5 = 0;
runTime6 = 0;
runTime7 = 0;
rePos = false;
}
// Analog Summierer
if(chan0Active==true && autoOn0==true){sumA0 = sumA0 + analogRead(A0);}else{sumA0=0;}
if(chan1Active==true && autoOn1==true){sumA1 = sumA1 + analogRead(A1);}else{sumA1=0;}
if(chan2Active==true && autoOn2==true){sumA2 = sumA2 + analogRead(A2);}else{sumA2=0;}
if(chan3Active==true && autoOn3==true){sumA3 = sumA3 + analogRead(A3);}else{sumA3=0;}
if(chan4Active==true && autoOn4==true){sumA4 = sumA4 + analogRead(A4);}else{sumA4=0;}
if(chan5Active==true && autoOn5==true){sumA5 = sumA5 + analogRead(A5);}else{sumA5=0;}
if(chan6Active==true && autoOn6==true){sumA6 = sumA6 + analogRead(A6);}else{sumA6=0;}
if(chan7Active==true && autoOn7==true){sumA7 = sumA7 + analogRead(A7);}else{sumA7=0;}
sc++;
if (sc > samples) {
sc = 0;
ac0 = sumA0 / samples; sumA0 = 0;
ac1 = sumA1 / samples; sumA1 = 0;
ac2 = sumA2 / samples; sumA2 = 0;
ac3 = sumA3 / samples; sumA3 = 0;
ac4 = sumA4 / samples; sumA4 = 0;
ac5 = sumA5 / samples; sumA5 = 0;
ac6 = sumA6 / samples; sumA6 = 0;
ac7 = sumA7 / samples; sumA7 = 0;
}
// Bedienung über AC-Detect
if (ac0 > acTrigger || ac1 > acTrigger || ac2 > acTrigger || ac3 > acTrigger || ac4 > acTrigger || ac5 > acTrigger || ac6 > acTrigger || ac7 > acTrigger) {
cleaningSystem=false;
if (ac0 > acTrigger) {
aufZu0 = true;
ac0Triggered = true;
acNlVal0 = 0;
aufZuOver0 = false;
wasOver0 = false;
}
if (ac1 > acTrigger) {
aufZu1 = true;
ac1Triggered = true;
acNlVal1 = 0;
aufZuOver1 = false;
wasOver1 = false;
}
if (ac2 > acTrigger) {
aufZu2 = true;
ac2Triggered = true;
acNlVal2 = 0;
aufZuOver2 = false;
wasOver2 = false;
}
if (ac3 > acTrigger) {
aufZu3 = true;
ac3Triggered = true;
acNlVal3 = 0;
aufZuOver3 = false;
wasOver3 = false;
}
if (ac4 > acTrigger) {
aufZu4 = true;
ac4Triggered = true;
acNlVal4 = 0;
aufZuOver4 = false;
wasOver4 = false;
}
if (ac5 > acTrigger) {
aufZu5 = true;
ac5Triggered = true;
acNlVal5 = 0;
aufZuOver5 = false;
wasOver5 = false;
}
if (ac6 > acTrigger) {
aufZu6 = true;
ac6Triggered = true;
acNlVal6 = 0;
aufZuOver6 = false;
wasOver6 = false;
}
if (ac7 > acTrigger) {
aufZu7 = true;
ac7Triggered = true;
acNlVal7 = 0;
aufZuOver7 = false;
wasOver7 = false;
}
if (ac0Triggered == false && aufZu0 == true && ac0Nachlauf == 0 && aufZuOver0 == false) {
aufZu0 = false;
}
if (ac1Triggered == false && aufZu1 == true && ac1Nachlauf == 0 && aufZuOver1 == false) {
aufZu1 = false;
}
if (ac2Triggered == false && aufZu2 == true && ac2Nachlauf == 0 && aufZuOver2 == false) {
aufZu2 = false;
}
if (ac3Triggered == false && aufZu3 == true && ac3Nachlauf == 0 && aufZuOver3 == false) {
aufZu3 = false;
}
if (ac4Triggered == false && aufZu4 == true && ac4Nachlauf == 0 && aufZuOver4 == false) {
aufZu4 = false;
}
if (ac5Triggered == false && aufZu5 == true && ac5Nachlauf == 0 && aufZuOver5 == false) {
aufZu5 = false;
}
if (ac6Triggered == false && aufZu6 == true && ac6Nachlauf == 0 && aufZuOver6 == false) {
aufZu6 = false;
}
if (ac7Triggered == false && aufZu7 == true && ac7Nachlauf == 0 && aufZuOver7 == false) {
aufZu7 = false;
}
absEAD = absEAD + millisDif;
if (absEAD > absaugungEinAusDelay + 1) {
absEAD = absaugungEinAusDelay + 1;
}
}
if (ac0 < acTrigger && ac0Triggered == true) {
ac0Nachlauf = true;
ac0Triggered = false;
}
if (ac1 < acTrigger && ac1Triggered == true) {
ac1Nachlauf = true;
ac1Triggered = false;
}
if (ac2 < acTrigger && ac2Triggered == true) {
ac2Nachlauf = true;
ac2Triggered = false;
}
if (ac3 < acTrigger && ac3Triggered == true) {
ac3Nachlauf = true;
ac3Triggered = false;
}
if (ac4 < acTrigger && ac4Triggered == true) {
ac4Nachlauf = true;
ac4Triggered = false;
}
if (ac5 < acTrigger && ac5Triggered == true) {
ac5Nachlauf = true;
ac5Triggered = false;
}
if (ac6 < acTrigger && ac6Triggered == true) {
ac6Nachlauf = true;
ac6Triggered = false;
}
if (ac7 < acTrigger && ac7Triggered == true) {
ac7Nachlauf = true;
ac7Triggered = false;
}
if (ac0Nachlauf == true && ac0Triggered == false) {
acNlVal0 = acNlVal0 + millisDif;
absEAD = 0;
if (aufZuOver1 == true) {
aufZu1 = false;
aufZuOver1 = false;
}
if (aufZuOver2 == true) {
aufZu2 = false;
aufZuOver2 = false;
}
if (aufZuOver3 == true) {
aufZu3 = false;
aufZuOver3 = false;
}
if (aufZuOver4 == true) {
aufZu4 = false;
aufZuOver4 = false;
}
if (aufZuOver5 == true) {
aufZu5 = false;
aufZuOver5 = false;
}
if (aufZuOver6 == true) {
aufZu6 = false;
aufZuOver6 = false;
}
if (aufZuOver7 == true) {
aufZu7 = false;
aufZuOver7 = false;
}
}
if (ac1Nachlauf == true && ac1Triggered == false) {
acNlVal1 = acNlVal1 + millisDif;
absEAD = 0;
if (aufZuOver0 == true) {
aufZu0 = false;
aufZuOver0 = false;
}
if (aufZuOver2 == true) {
aufZu2 = false;
aufZuOver2 = false;
}
if (aufZuOver3 == true) {
aufZu3 = false;
aufZuOver3 = false;
}
if (aufZuOver4 == true) {
aufZu4 = false;
aufZuOver4 = false;
}
if (aufZuOver5 == true) {
aufZu5 = false;
aufZuOver5 = false;
}
if (aufZuOver6 == true) {
aufZu6 = false;
aufZuOver6 = false;
}
if (aufZuOver7 == true) {
aufZu7 = false;
aufZuOver7 = false;
}
}
if (ac2Nachlauf == true && ac2Triggered == false) {
acNlVal2 = acNlVal2 + millisDif;
absEAD = 0;
if (aufZuOver0 == true) {
aufZu0 = false;
aufZuOver0 = false;
}
if (aufZuOver1 == true) {
aufZu1 = false;
aufZuOver1 = false;
}
if (aufZuOver3 == true) {
aufZu3 = false;
aufZuOver3 = false;
}
if (aufZuOver4 == true) {
aufZu4 = false;
aufZuOver4 = false;
}
if (aufZuOver5 == true) {
aufZu5 = false;
aufZuOver5 = false;
}
if (aufZuOver6 == true) {
aufZu6 = false;
aufZuOver6 = false;
}
if (aufZuOver7 == true) {
aufZu7 = false;
aufZuOver7 = false;
}
}
if (ac3Nachlauf == true && ac3Triggered == false) {
acNlVal3 = acNlVal3 + millisDif;
absEAD = 0;
if (aufZuOver0 == true) {
aufZu0 = false;
aufZuOver0 = false;
}
if (aufZuOver1 == true) {
aufZu1 = false;
aufZuOver1 = false;
}
if (aufZuOver2 == true) {
aufZu2 = false;
aufZuOver2 = false;
}
if (aufZuOver4 == true) {
aufZu4 = false;
aufZuOver4 = false;
}
if (aufZuOver5 == true) {
aufZu5 = false;
aufZuOver5 = false;
}
if (aufZuOver6 == true) {
aufZu6 = false;
aufZuOver6 = false;
}
if (aufZuOver7 == true) {
aufZu7 = false;
aufZuOver7 = false;
}
}
if (ac4Nachlauf == true && ac4Triggered == false) {
acNlVal4 = acNlVal4 + millisDif;
absEAD = 0;
if (aufZuOver0 == true) {
aufZu0 = false;
aufZuOver0 = false;
}
if (aufZuOver1 == true) {
aufZu1 = false;
aufZuOver1 = false;
}
if (aufZuOver2 == true) {
aufZu2 = false;
aufZuOver2 = false;
}
if (aufZuOver3 == true) {
aufZu3 = false;
aufZuOver3 = false;
}
if (aufZuOver5 == true) {
aufZu5 = false;
aufZuOver5 = false;
}
if (aufZuOver6 == true) {
aufZu6 = false;
aufZuOver6 = false;
}
if (aufZuOver7 == true) {
aufZu7 = false;
aufZuOver7 = false;
}
}
if (ac5Nachlauf == true && ac5Triggered == false) {
acNlVal5 = acNlVal5 + millisDif;
absEAD = 0;
if (aufZuOver0 == true) {
aufZu0 = false;
aufZuOver0 = false;
}
if (aufZuOver1 == true) {
aufZu1 = false;
aufZuOver1 = false;
}
if (aufZuOver2 == true) {
aufZu2 = false;
aufZuOver2 = false;
}
if (aufZuOver3 == true) {
aufZu3 = false;
aufZuOver3 = false;
}
if (aufZuOver4 == true) {
aufZu4 = false;
aufZuOver4 = false;
}
if (aufZuOver6 == true) {
aufZu6 = false;
aufZuOver6 = false;
}
if (aufZuOver7 == true) {
aufZu7 = false;
aufZuOver7 = false;
}
}
if (ac6Nachlauf == true && ac6Triggered == false) {
acNlVal6 = acNlVal6 + millisDif;
absEAD = 0;
if (aufZuOver0 == true) {
aufZu0 = false;
aufZuOver0 = false;
}
if (aufZuOver1 == true) {
aufZu1 = false;
aufZuOver1 = false;
}
if (aufZuOver2 == true) {
aufZu2 = false;
aufZuOver2 = false;
}
if (aufZuOver3 == true) {
aufZu3 = false;
aufZuOver3 = false;
}
if (aufZuOver4 == true) {
aufZu4 = false;
aufZuOver4 = false;
}
if (aufZuOver5 == true) {
aufZu5 = false;
aufZuOver5 = false;
}
if (aufZuOver7 == true) {
aufZu7 = false;
aufZuOver7 = false;
}
}
if (ac7Nachlauf == true && ac7Triggered == false) {
acNlVal7 = acNlVal7 + millisDif;
absEAD = 0;
if (aufZuOver0 == true) {
aufZu0 = false;
aufZuOver0 = false;
}
if (aufZuOver1 == true) {
aufZu1 = false;
aufZuOver1 = false;
}
if (aufZuOver2 == true) {
aufZu2 = false;
aufZuOver2 = false;
}
if (aufZuOver3 == true) {
aufZu3 = false;
aufZuOver3 = false;
}
if (aufZuOver4 == true) {
aufZu4 = false;
aufZuOver4 = false;
}
if (aufZuOver5 == true) {
aufZu5 = false;
aufZuOver5 = false;
}
if (aufZuOver6 == true) {
aufZu6 = false;
aufZuOver6 = false;
}
}
if (acNlVal0 > acNachlaufValue) {
if (ac1Triggered == false && ac2Triggered == false && ac3Triggered == false && ac4Triggered == false && ac5Triggered == false && ac6Triggered == false && ac7Triggered == false) {
if(cleanSystem==false){
absaugungEinAus = false;
}else{
cleaningSystem=true;
}
}
}
if (acNlVal1 > acNachlaufValue ) {
if (ac0Triggered == false && ac2Triggered == false && ac3Triggered == false && ac4Triggered == false && ac5Triggered == false && ac6Triggered == false && ac7Triggered == false) {
if(cleanSystem==false){
absaugungEinAus = false;
}else{
cleaningSystem=true;
}
}
}
if (acNlVal2 > acNachlaufValue) {
if (ac0Triggered == false && ac1Triggered == false && ac3Triggered == false && ac4Triggered == false && ac5Triggered == false && ac6Triggered == false && ac7Triggered == false) {
if(cleanSystem==false){
absaugungEinAus = false;
}else{
cleaningSystem=true;
}
}
}
if (acNlVal3 > acNachlaufValue) {
if (ac0Triggered == false && ac1Triggered == false && ac2Triggered == false && ac4Triggered == false && ac5Triggered == false && ac6Triggered == false && ac7Triggered == false) {
if(cleanSystem==false){
absaugungEinAus = false;
}else{
cleaningSystem=true;
}
}
}
if (acNlVal4 > acNachlaufValue) {
if (ac0Triggered == false && ac1Triggered == false && ac2Triggered == false && ac3Triggered == false && ac5Triggered == false && ac6Triggered == false && ac7Triggered == false) {
if(cleanSystem==false){
absaugungEinAus = false;
}else{
cleaningSystem=true;
}
}
}
if (acNlVal5 > acNachlaufValue) {
if (ac0Triggered == false && ac1Triggered == false && ac2Triggered == false && ac3Triggered == false && ac4Triggered == false && ac6Triggered == false && ac7Triggered == false) {
if(cleanSystem==false){
absaugungEinAus = false;
}else{
cleaningSystem=true;
}
}
}
if (acNlVal6 > acNachlaufValue) {
if (ac0Triggered == false && ac1Triggered == false && ac2Triggered == false && ac3Triggered == false && ac4Triggered == false && ac5Triggered == false && ac7Triggered == false) {
if(cleanSystem==false){
absaugungEinAus = false;
}else{
cleaningSystem=true;
}
}
}
if (acNlVal7 > acNachlaufValue) {
if (ac0Triggered == false && ac1Triggered == false && ac2Triggered == false && ac3Triggered == false && ac4Triggered == false && ac5Triggered == false && ac6Triggered == false) {
if(cleanSystem==false){
absaugungEinAus = false;
}else{
cleaningSystem=true;
}
}
}
if (acNlVal0 > acNachlaufValue + absaugungEinAusDelay) {
acNlVal0 = 0;
if (ac0Nachlauf == true) {
ac0Nachlauf = false;
aufZu0 = false;
}
}
if (acNlVal1 > acNachlaufValue + absaugungEinAusDelay) {
acNlVal1 = 0;
if (ac1Nachlauf == true) {
ac1Nachlauf = false;
aufZu1 = false;
}
}
if (acNlVal2 > acNachlaufValue + absaugungEinAusDelay) {
acNlVal2 = 0;
if (ac2Nachlauf == true) {
ac2Nachlauf = false;
aufZu2 = false;
}
}
if (acNlVal3 > acNachlaufValue + absaugungEinAusDelay) {
acNlVal3 = 0;
if (ac3Nachlauf == true) {
ac3Nachlauf = false;
aufZu3 = false;
}
}
if (acNlVal4 > acNachlaufValue + absaugungEinAusDelay) {
acNlVal4 = 0;
if (ac4Nachlauf == true) {
ac4Nachlauf = false;
aufZu4 = false;
}
}
if (acNlVal5 > acNachlaufValue + absaugungEinAusDelay) {
acNlVal5 = 0;
if (ac5Nachlauf == true) {
ac5Nachlauf = false;
aufZu5 = false;
}
}
if (acNlVal6 > acNachlaufValue + absaugungEinAusDelay) {
acNlVal6 = 0;
if (ac6Nachlauf == true) {
ac6Nachlauf = false;
aufZu6 = false;
}
}
if (acNlVal7 > acNachlaufValue + absaugungEinAusDelay) {
acNlVal7 = 0;
if (ac7Nachlauf == true) {
ac7Nachlauf = false;
aufZu7 = false;
}
}
// Bedienung über Taster
if (digitalRead(53) == LOW) {
if (aufZu0 == false) {
aufZu0 = true; aufZu1 = false; aufZu2 = false; aufZu3 = false; aufZu4 = false; aufZu5 = false; aufZu6 = false; aufZu7 = false;
if (ac1Triggered == true || ac3Triggered == true || ac4Triggered == true || ac5Triggered == true || ac6Triggered == true || ac7Triggered == true) {
aufZuOver0 = true;
wasOver0 = true;
}
} else {
aufZu0 = false;
aufZuOver0 = false;
wasOver0 = false;
}
if (servo0Error == true) {
servo0Error = false;
}
delay(300);
while (digitalRead(53) == LOW) {}
millisOld = millis();
millisDif = 1;
}
if (digitalRead(51) == LOW) {
if (aufZu1 == false) {
aufZu0 = false; aufZu1 = true; aufZu2 = false; aufZu3 = false; aufZu4 = false; aufZu5 = false; aufZu6 = false; aufZu7 = false;
if (ac0Triggered == true || ac2Triggered == true || ac3Triggered == true || ac4Triggered == true || ac5Triggered == true || ac6Triggered == true || ac7Triggered == true) {
aufZuOver1 = true;
wasOver1 = true;
}
} else {
aufZu1 = false;
aufZuOver1 = false;
wasOver1 = false;
}
if (servo1Error == true) {
servo1Error = false;
}
delay(300);
while (digitalRead(51) == LOW) {}
millisOld = millis();
millisDif = 1;
}
if (digitalRead(49) == LOW) {
if (aufZu2 == false) {
aufZu0 = false; aufZu1 = false; aufZu2 = true; aufZu3 = false; aufZu4 = false; aufZu5 = false; aufZu6 = false; aufZu7 = false;
if (ac0Triggered == true || ac1Triggered == true || ac3Triggered == true || ac4Triggered == true || ac5Triggered == true || ac6Triggered == true || ac7Triggered == true) {
aufZuOver2 = true;
wasOver2 = true;
}
} else {
aufZu2 = false;
aufZuOver2 = false;
wasOver2 = false;
}
if (servo2Error == true) {
servo2Error = false;
}
delay(300);
while (digitalRead(49) == LOW) {}
millisOld = millis();
millisDif = 1;
}
if (digitalRead(47) == LOW) {
if (aufZu3 == false) {
aufZu0 = false; aufZu1 = false; aufZu2 = false; aufZu3 = true; aufZu4 = false; aufZu5 = false; aufZu6 = false; aufZu7 = false;
if (ac0Triggered == true || ac1Triggered == true || ac2Triggered == true || ac4Triggered == true || ac5Triggered == true || ac6Triggered == true || ac7Triggered == true) {
aufZuOver3 = true;
wasOver3 = true;
}
} else {
aufZu3 = false;
aufZuOver3 = false;
wasOver3 = false;
}
if (servo3Error == true) {
servo3Error = false;
}
delay(300);
while (digitalRead(47) == LOW) {}
millisOld = millis();
millisDif = 1;
}
if (digitalRead(45) == LOW) {
if (aufZu4 == false) {
aufZu0 = false; aufZu1 = false; aufZu2 = false; aufZu3 = false; aufZu4 = true; aufZu5 = false; aufZu6 = false; aufZu7 = false;
if (ac0Triggered == true || ac1Triggered == true || ac2Triggered == true || ac3Triggered == true || ac5Triggered == true || ac6Triggered == true || ac7Triggered == true) {
aufZuOver4 = true;
wasOver4 = true;
}
} else {
aufZu4 = false;
aufZuOver4 = false;
wasOver4 = false;
}
if (servo4Error == true) {
servo4Error = false;
}
delay(300);
while (digitalRead(45) == LOW) {}
millisOld = millis();
millisDif = 1;
}
if (digitalRead(43) == LOW) {
if (aufZu5 == false) {
aufZu0 = false; aufZu1 = false; aufZu2 = false; aufZu3 = false; aufZu4 = false; aufZu5 = true; aufZu6 = false; aufZu7 = false;
if (ac0Triggered == true || ac1Triggered == true || ac2Triggered == true || ac3Triggered == true || ac4Triggered == true || ac6Triggered == true || ac7Triggered == true) {
aufZuOver5 = true;
wasOver5 = true;
}
} else {
aufZu5 = false;
aufZuOver5 = false;
wasOver5 = false;
}
if (servo5Error == true) {
servo5Error = false;
}
delay(300);
while (digitalRead(43) == LOW) {}
millisOld = millis();
millisDif = 1;
}
if (digitalRead(41) == LOW) {
if (aufZu6 == false) {
aufZu0 = false; aufZu1 = false; aufZu2 = false; aufZu3 = false; aufZu4 = false; aufZu5 = false; aufZu6 = true; aufZu7 = false;
if (ac0Triggered == true || ac1Triggered == true || ac2Triggered == true || ac3Triggered == true || ac4Triggered == true || ac5Triggered == true || ac7Triggered == true) {
aufZuOver6 = true;
wasOver6 = true;
}
} else {
aufZu6 = false;
aufZuOver6 = false;
wasOver6 = false;
}
if (servo6Error == true) {
servo6Error = false;
}
delay(300);
while (digitalRead(41) == LOW) {}
millisOld = millis();
millisDif = 1;
}
if (digitalRead(39) == LOW) {
if (aufZu7 == false) {
aufZu0 = false; aufZu1 = false; aufZu2 = false; aufZu3 = false; aufZu4 = false; aufZu5 = false; aufZu6 = false; aufZu7 = true;
if (ac0Triggered == true || ac1Triggered == true || ac2Triggered == true || ac3Triggered == true || ac4Triggered == true || ac5Triggered == true || ac6Triggered == true) {
aufZuOver7 = true;
wasOver7 = true;
}
} else {
aufZu7 = false;
aufZuOver7 = false;
wasOver7 = false;
}
if (servo7Error == true) {
servo7Error = false;
}
delay(300);
while (digitalRead(39) == LOW) {}
millisOld = millis();
millisDif = 1;
}
// Taster Absaugung
if (digitalRead(6) == LOW) {
if (absaugungEinAus == false) {
absaugungEinAus = true;
} else {
if(cleanSystem==false){
absaugungEinAus = false;
}else{
cleaningSystem=true;
}
}
delay(300);
while (digitalRead(6) == LOW) {}
}
// Absaugung ausschalten wenn alle Klappen zu sind ansonsten Bereitschaft-blinken
if (aufZu0 == false && aufZu1 == false && aufZu2 == false && aufZu3 == false && aufZu4 == false && aufZu5 == false && aufZu6 == false && aufZu7 == false) {
absaugungEinAus = false;
} else {
absaugungEinAus = true;
// if (absaugungEinAus == false) {
// if (millis() % 1000 < 200) {
// digitalWrite(7, HIGH);
// } else {
// digitalWrite(7, LOW);
// }
// }
}
// Absaugung Auto ON
if ((ac0Triggered == true && absaugungEinAusDelay < absEAD) ||
(ac1Triggered == true && absaugungEinAusDelay < absEAD) ||
(ac2Triggered == true && absaugungEinAusDelay < absEAD) ||
(ac3Triggered == true && absaugungEinAusDelay < absEAD) ||
(ac4Triggered == true && absaugungEinAusDelay < absEAD) ||
(ac5Triggered == true && absaugungEinAusDelay < absEAD) ||
(ac6Triggered == true && absaugungEinAusDelay < absEAD) ||
(ac7Triggered == true && absaugungEinAusDelay < absEAD)) {
absaugungEinAus = true;
}
// Falls Falschluftklappen offen waren -> reOpen
if (ac0Triggered == true ||
ac1Triggered == true ||
ac2Triggered == true ||
ac3Triggered == true ||
ac4Triggered == true ||
ac5Triggered == true ||
ac6Triggered == true ||
ac6Triggered == true) {
if (wasOver0 == true) {
aufZuOver0 = true;
aufZu0 = true;
}
if (wasOver1 == true) {
aufZuOver1 = true;
aufZu1 = true;
}
if (wasOver2 == true) {
aufZuOver2 = true;
aufZu2 = true;
}
if (wasOver3 == true) {
aufZuOver3 = true;
aufZu3 = true;
}
if (wasOver4 == true) {
aufZuOver4 = true;
aufZu4 = true;
}
if (wasOver5 == true) {
aufZuOver5 = true;
aufZu5 = true;
}
if (wasOver6 == true) {
aufZuOver6 = true;
aufZu6 = true;
}
if (wasOver7 == true) {
aufZuOver7 = true;
aufZu7 = true;
}
}
// Reinigungsschritte
if(cleaningSystem==true && ac0Nachlauf==false && ac1Nachlauf==false && ac2Nachlauf==false && ac3Nachlauf==false && ac4Nachlauf==false && ac5Nachlauf==false && ac6Nachlauf==false && ac7Nachlauf==false){
absaugungEinAus=true;
if(cleanCounter<8){
if(cleanCounter==0){if(cleanOrder0!=-1){cleanGate(cleanOrder0);}else{cleanCounter=1;}}
if(cleanCounter==1){if(cleanOrder1!=-1){cleanGate(cleanOrder1);}else{cleanCounter=2;}}
if(cleanCounter==2){if(cleanOrder2!=-1){cleanGate(cleanOrder2);}else{cleanCounter=3;}}
if(cleanCounter==3){if(cleanOrder3!=-1){cleanGate(cleanOrder3);}else{cleanCounter=4;}}
if(cleanCounter==4){if(cleanOrder4!=-1){cleanGate(cleanOrder4);}else{cleanCounter=5;}}
if(cleanCounter==5){if(cleanOrder5!=-1){cleanGate(cleanOrder5);}else{cleanCounter=6;}}
if(cleanCounter==6){if(cleanOrder6!=-1){cleanGate(cleanOrder6);}else{cleanCounter=7;}}
if(cleanCounter==7){if(cleanOrder7!=-1){cleanGate(cleanOrder7);}else{cleanCounter=8;}}
cleanTimer=cleanTimer+millisDif;
if(cleanTimer>cleanTimePerGate){
cleanTimer=0;
cleanCounter++;
}
if(cleanCounter>7){cleanTimer=0;}
}else{
cleanTimer=cleanTimer+millisDif;
if(cleanTimer>absaugungEinAusDelay+acNachlaufValue){
cleanGate(-1);
cleanTimer=0;
cleanCounter=0;
cleaningSystem=false;
absaugungEinAus=false;
}else{
absaugungEinAus=true;
}
if(cleanTimer>acNachlaufValue){
absaugungEinAus=false;
}
}
}
// Klappen fahren
if (servo0Error == false) {
if (aufZuOver0 == false) {
if (aufZu0 == true) {
if (ac0Triggered == false && ac0Nachlauf == true) {
if (millis() % 200 < 100) {
digitalWrite(52, HIGH);
} else {
digitalWrite(52, LOW);
}
} else {
digitalWrite(52, HIGH);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo0.read() != servo0Max) {
if (servo0.attached() == false) {
servo0.attach(22);
}
runTime0 = 0;
}
}
servo0.write(servo0Max);
} else {
digitalWrite(52, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo0.read() != servo0Min) {
if (servo0.attached() == false) {
servo0.attach(22);
}
runTime0 = 0;
}
}
servo0.write(servo0Min);
}
} else {
if (aufZu0 == true) {
if (millis() % 1000 < 100) {
digitalWrite(52, HIGH);
} else {
digitalWrite(52, LOW);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo0.read() != falschLuftStellung) {
if (servo0.attached() == false) {
servo0.attach(22);
}
runTime0 = 0;
}
}
servo0.write(falschLuftStellung);
} else {
digitalWrite(52, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo0.read() != servo0Min) {
if (servo0.attached() == false) {
servo0.attach(22);
}
runTime0 = 0;
}
}
servo0.write(servo0Min);
}
}
}
if (servo1Error == false) {
if (aufZuOver1 == false) {
if (aufZu1 == true) {
if (ac1Triggered == false && ac1Nachlauf == true) {
if (millis() % 200 < 100) {
digitalWrite(50, HIGH);
} else {
digitalWrite(50, LOW);
}
} else {
digitalWrite(50, HIGH);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo1.read() != servo1Max) {
servo1.attach(23);
runTime1 = 0;
}
}
servo1.write(servo1Max);
} else {
digitalWrite(50, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo1.read() != servo1Min) {
servo1.attach(23);
runTime1 = 0;
}
}
servo1.write(servo1Min);
}
} else {
if (aufZu1 == true) {
if (millis() % 1000 < 100) {
digitalWrite(50, HIGH);
} else {
digitalWrite(50, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo1.read() != falschLuftStellung) {
servo1.attach(23);
runTime1 = 0;
}
}
} servo1.write(falschLuftStellung);
} else {
digitalWrite(50, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo1.read() != servo1Min) {
servo1.attach(23);
runTime1 = 0;
}
}
servo1.write(servo1Min);
}
}
}
if (servo2Error == false) {
if (aufZuOver2 == false) {
if (aufZu2 == true) {
if (ac2Triggered == false && ac2Nachlauf == true) {
if (millis() % 200 < 100) {
digitalWrite(48, HIGH);
} else {
digitalWrite(48, LOW);
}
} else {
digitalWrite(48, HIGH);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo2.read() != servo2Max) {
servo2.attach(24);
runTime2 = 0;
}
}
servo2.write(servo2Max);
} else {
digitalWrite(48, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo2.read() != servo2Min) {
servo2.attach(24);
runTime2 = 0;
}
}
servo2.write(servo2Min);
}
} else {
if (aufZu2 == true) {
if (millis() % 1000 < 100) {
digitalWrite(48, HIGH);
} else {
digitalWrite(48, LOW);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo2.read() != falschLuftStellung) {
servo2.attach(24);
runTime2 = 0;
}
}
servo2.write(falschLuftStellung);
} else {
digitalWrite(48, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo2.read() != servo2Min) {
servo2.attach(24);
runTime2 = 0;
}
}
servo2.write(servo2Min);
}
}
}
if (servo3Error == false) {
if (aufZuOver3 == false) {
if (aufZu3 == true) {
if (ac3Triggered == false && ac3Nachlauf == true) {
if (millis() % 200 < 100) {
digitalWrite(46, HIGH);
} else {
digitalWrite(46, LOW);
}
} else {
digitalWrite(46, HIGH);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo3.read() != servo3Max) {
servo3.attach(25);
runTime3 = 0;
}
}
servo3.write(servo3Max);
} else {
digitalWrite(46, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo3.read() != servo3Min) {
servo3.attach(25);
runTime3 = 0;
}
}
servo3.write(servo3Min);
}
} else {
if (aufZu3 == true) {
if (millis() % 1000 < 100) {
digitalWrite(46, HIGH);
} else {
digitalWrite(46, LOW);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo3.read() != falschLuftStellung) {
servo3.attach(25);
runTime3 = 0;
}
}
servo3.write(falschLuftStellung);
} else {
digitalWrite(46, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo3.read() != servo3Min) {
servo3.attach(25);
runTime3 = 0;
}
}
servo3.write(servo3Min);
}
}
}
if (servo4Error == false) {
if (aufZuOver4 == false) {
if (aufZu4 == true) {
if (ac4Triggered == false && ac4Nachlauf == true) {
if (millis() % 200 < 100) {
digitalWrite(44, HIGH);
} else {
digitalWrite(44, LOW);
}
} else {
digitalWrite(44, HIGH);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo4.read() != servo4Max) {
servo4.attach(26);
runTime4 = 0;
}
}
servo4.write(servo4Max);
} else {
digitalWrite(44, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo4.read() != servo4Min) {
servo4.attach(26);
runTime4 = 0;
}
}
servo4.write(servo4Min);
}
} else {
if (aufZu4 == true) {
if (millis() % 1000 < 100) {
digitalWrite(44, HIGH);
} else {
digitalWrite(44, LOW);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo4.read() != falschLuftStellung) {
servo4.attach(26);
runTime4 = 0;
}
}
servo4.write(falschLuftStellung);
} else {
digitalWrite(44, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo4.read() != servo4Min) {
servo4.attach(26);
runTime4 = 0;
}
}
servo4.write(servo4Min);
}
}
}
if (servo5Error == false) {
if (aufZuOver5 == false) {
if (aufZu5 == true) {
if (ac5Triggered == false && ac5Nachlauf == true) {
if (millis() % 200 < 100) {
digitalWrite(42, HIGH);
} else {
digitalWrite(42, LOW);
}
} else {
digitalWrite(42, HIGH);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo5.read() != servo5Max) {
servo5.attach(27);
runTime5 = 0;
}
}
servo5.write(servo5Max);
} else {
digitalWrite(42, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo5.read() != servo5Min) {
servo5.attach(27);
runTime5 = 0;
}
}
servo5.write(servo5Min);
}
} else {
if (aufZu5 == true) {
if (millis() % 1000 < 100) {
digitalWrite(42, HIGH);
} else {
digitalWrite(42, LOW);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo5.read() != falschLuftStellung) {
servo5.attach(27);
runTime5 = 0;
}
}
servo5.write(falschLuftStellung);
} else {
digitalWrite(42, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo5.read() != servo5Min) {
servo5.attach(27);
runTime5 = 0;
}
}
servo5.write(servo5Min);
}
}
}
if (servo6Error == false) {
if (aufZuOver6 == false) {
if (aufZu6 == true) {
if (ac6Triggered == false && ac6Nachlauf == true) {
if (millis() % 200 < 100) {
digitalWrite(40, HIGH);
} else {
digitalWrite(40, LOW);
}
} else {
digitalWrite(40, HIGH);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo6.read() != servo6Max) {
servo6.attach(28);
runTime6 = 0;
}
}
servo6.write(servo6Max);
} else {
digitalWrite(40, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo6.read() != servo6Min) {
servo6.attach(28);
runTime6 = 0;
}
}
servo6.write(servo6Min);
}
} else {
if (aufZu6 == true) {
if (millis() % 1000 < 100) {
digitalWrite(40, HIGH);
} else {
digitalWrite(40, LOW);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo6.read() != falschLuftStellung) {
servo6.attach(28);
runTime6 = 0;
}
}
servo6.write(falschLuftStellung);
} else {
digitalWrite(40, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo6.read() != servo6Min) {
servo6.attach(28);
runTime6 = 0;
}
}
servo6.write(servo6Min);
}
}
}
if (servo7Error == false) {
if (aufZuOver7 == false) {
if (aufZu7 == true) {
if (ac7Triggered == false && ac7Nachlauf == true) {
if (millis() % 200 < 100) {
digitalWrite(38, HIGH);
} else {
digitalWrite(38, LOW);
}
} else {
digitalWrite(38, HIGH);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo7.read() != servo7Max) {
servo7.attach(29);
runTime7 = 0;
}
}
servo7.write(servo7Max);
} else {
digitalWrite(38, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo7.read() != servo7Min) {
servo7.attach(29);
runTime7 = 0;
}
}
servo7.write(servo7Min);
}
} else {
if (aufZu7 == true) {
if (millis() % 1000 < 100) {
digitalWrite(38, HIGH);
} else {
digitalWrite(38, LOW);
}
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo7.read() != falschLuftStellung) {
servo7.attach(29);
runTime7 = 0;
}
}
servo7.write(falschLuftStellung);
} else {
digitalWrite(38, LOW);
if (pulseMode == true) { // <------------------ PASSIV MODE
if (servo7.read() != servo7Min) {
servo7.attach(29);
runTime7 = 0;
}
}
servo7.write(servo7Min);
}
}
}
// Servos reseten nach auto-aus
if (servo0Error == false && servo0.attached() == false) {
servo0.attach(22);
}
if (servo1Error == false && servo1.attached() == false) {
servo1.attach(23);
}
if (servo2Error == false && servo2.attached() == false) {
servo2.attach(24);
}
if (servo3Error == false && servo3.attached() == false) {
servo3.attach(25);
}
if (servo4Error == false && servo4.attached() == false) {
servo4.attach(26);
}
if (servo5Error == false && servo5.attached() == false) {
servo5.attach(27);
}
if (servo6Error == false && servo6.attached() == false) {
servo6.attach(28);
}
if (servo7Error == false && servo7.attached() == false) {
servo7.attach(29);
}
// Absaugung schalten
if (absaugungEinAus == true) {
digitalWrite(8, HIGH);
if(cleaningSystem==false){
digitalWrite(7, HIGH);
}else{
if(millis()%1000<200){digitalWrite(7,HIGH);}else{digitalWrite(7,LOW);}
}
} else {
digitalWrite(8, LOW);
digitalWrite(7, LOW);
}
// DEBUG
if(debug==true){
Serial.print("current1=");Serial.print(current1); Serial.print(", ");
Serial.print("cleanTimer=");Serial.print(cleanTimer); Serial.print(", ");
Serial.print("aufZu0=");Serial.print(aufZu0); Serial.print(", ");
Serial.print("aufZu1=");Serial.print(aufZu1); Serial.print(", ");
Serial.print("aufZu2=");Serial.print(aufZu2); Serial.print(", ");
Serial.print("aufZu3=");Serial.print(aufZu3); Serial.print(", ");
Serial.print("aufZu4=");Serial.print(aufZu4); Serial.print(", ");
Serial.print("aufZu5=");Serial.print(aufZu5); Serial.print(", ");
Serial.print("aufZu6=");Serial.print(aufZu6); Serial.print(", ");
Serial.print("aufZu7=");Serial.print(aufZu7); Serial.print(", ");
Serial.print("cleanCounter=");Serial.print(cleanCounter); Serial.print(", ");
Serial.print("cleanTimer=");Serial.print(cleanTimer); Serial.print(", ");
Serial.print("cleaning=");Serial.println(cleaningSystem);
}
}
void cleanGate(int gateNo){
bool action=true;
if(gateNo==0 && chan0Active==false){action=false;}
if(gateNo==1 && chan1Active==false){action=false;}
if(gateNo==2 && chan2Active==false){action=false;}
if(gateNo==3 && chan3Active==false){action=false;}
if(gateNo==4 && chan4Active==false){action=false;}
if(gateNo==5 && chan5Active==false){action=false;}
if(gateNo==6 && chan6Active==false){action=false;}
if(gateNo==7 && chan7Active==false){action=false;}
if(action==true){
posIntervalCount=0;
if(gateNo==0){aufZu0=true;aufZu1=false;aufZu2=false;aufZu3=false;aufZu4=false;aufZu5=false;aufZu6=false;aufZu7=false;}
if(gateNo==1){aufZu0=false;aufZu1=true;aufZu2=false;aufZu3=false;aufZu4=false;aufZu5=false;aufZu6=false;aufZu7=false;}
if(gateNo==2){aufZu0=false;aufZu1=false;aufZu2=true;aufZu3=false;aufZu4=false;aufZu5=false;aufZu6=false;aufZu7=false;}
if(gateNo==3){aufZu0=false;aufZu1=false;aufZu2=false;aufZu3=true;aufZu4=false;aufZu5=false;aufZu6=false;aufZu7=false;}
if(gateNo==4){aufZu0=false;aufZu1=false;aufZu2=false;aufZu3=false;aufZu4=true;aufZu5=false;aufZu6=false;aufZu7=false;}
if(gateNo==5){aufZu0=false;aufZu1=false;aufZu2=false;aufZu3=false;aufZu4=false;aufZu5=true;aufZu6=false;aufZu7=false;}
if(gateNo==6){aufZu0=false;aufZu1=false;aufZu2=false;aufZu3=false;aufZu4=false;aufZu5=false;aufZu6=true;aufZu7=false;}
if(gateNo==7){aufZu0=false;aufZu1=false;aufZu2=false;aufZu3=false;aufZu4=false;aufZu5=false;aufZu6=false;aufZu7=true;}
if(gateNo==-1){aufZu0=false;aufZu1=false;aufZu2=false;aufZu3=false;aufZu4=false;aufZu5=false;aufZu6=false;aufZu7=false;}
}else{
cleanCounter++;
}
}