//Generator Steueerung 4.3.2023 11:00
//Treibstoff verbrauch + Treibsoff nach füllen Fertieg.
//Anzeige Treibstoff und Leistung Fertieg.
//Abschaltung Haubtsorom, Einschalten not Strom und Zurück vertieg bei Treibsoff Fertieg.
//Überhitzung und wegsel der Kühlung Fertieg.
//Wegsel von Defeckten Bauteilen Fertieg.
//Genaue Zeit Plan in Stunden und Tagen Fertieg.
//Fehler Katalog gemacht!
#include <Servo.h>
Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;
#include "SevenSegmentTM1637.h"
#include "SevenSegmentExtended.h"
const byte PIN_CLK = 12;
const byte PIN_DIO = 13;
SevenSegmentExtended display(PIN_CLK, PIN_DIO);
int an; //Betrib an
int feh;// Fehler Cod
unsigned long pru;// prüfzeit
unsigned long t;// tatenzeit
unsigned long t2;// tatenzeit
unsigned long tl;// Treibstof
unsigned long tl2;// Treibstof
unsigned long th;// Hitzeentwicklung
unsigned long th2;// Hitzeentwicklung
unsigned long ent;//Teile entfernt
unsigned long ent1;//Teile entfernt
unsigned long ent2;//Teile entfernt
unsigned long ab1;// abschaltung
unsigned long dis;//Displaytaimer
int lmin;//Treibstoff min
int lmax;//Treibstoff max
int pmin;//Leistungs min
int pmax;//Leistungs max
int on;// Strom da
int lt;//Treibstoff vorhanden
int lf;//Teibstoff resserfe
int off;//kein Treibstoff
int wegsel;//Treibstoff Tausch
int temp;// Temperatu
int pumpek;//Khlpumpe
int wegselk;//Kuhlföusigkeit im wegsel
int st;//Entstört
int l;//Teile fehlen
int l1;//Teile fehlen
int l2;//Teile fehlen
int de;//Zeit nach wegsel
int db;//Bauteil Numer defeckt
int wb;//Bauteil wegsel
int bf;//fehler Bauteil
int ab;//abschaltung
int teimer;
int ab2;
int but;
int but2;
int qit;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // initializes the Serial connection @ 9600 baud
display.begin(); // initializes the display
display.setBacklight(100); // set the brightness to 100 %
delay(1000); // wait 1000 ms
myservo1.attach(A0);//Leistung
myservo2.attach(A1);//Tereibstoff
myservo3.attach(4);//Normalkreis
myservo4.attach(5);//Notkreis
pinMode(11, OUTPUT);//r1
pinMode(10, OUTPUT);//g1
pinMode(9, OUTPUT);//b1
pinMode(6, OUTPUT);//Lebenserhaltung
pinMode(3, OUTPUT);//Alarm Syrene
pinMode(8, OUTPUT);//Stör LED
pinMode(A2, INPUT_PULLUP);//Treibstoff
pinMode(A3, INPUT_PULLUP);//Kühlmittel
pinMode(A4, INPUT_PULLUP);//Störung quittieren
pinMode(A5, INPUT_PULLUP);//Bauteile
pinMode(7, INPUT_PULLUP);//Leistung +
pinMode(2, INPUT_PULLUP);//Leistung -
an=1; //Betrieb
on=1;//Strom an
pmin=110;//Leistungs bereich
pmax=120;
lmin=175;//Treibstoff bereich
lmax=180;
lt=millis();
lf=0;
off=0;
wegsel=0;
feh=0000;
th=0;
temp=80;
pumpek=0;
wegselk=0;
st=0;
l=0;
l1=0;
l2=0;
de=3600000;
db=0;
wb=0;
bf=4415;
//defeckt=millis();
myservo3.write(170);//Normal an
myservo4.write(150);//Not an
lt-4*3600000;
teimer=240;
ab2=0;
but=1;
but2;
qit=0;
}
void loop() {
// put your main code here, to run repeatedly:
if (digitalRead(A4)==false && millis()- t> 1*6000 && ab2==0){//Störung Quitieren
st=2;
ab++;
qit=15;
t=millis();
feh=0000;
digitalWrite(8, LOW);
digitalWrite(3, LOW);
digitalWrite(6, HIGH);
myservo3.write(170);//Normal an
myservo4.write(150);//Not an
}
if (digitalRead(A4)==true && millis()- t2> 1*6000 && ab2==0&&qit>=1){
t2=millis();
//st=0;
//ab=0;
qit--;
}
if (an==1 && millis()-pru>1000 && off==0){ //Led flackern bei Betrieb
pru = millis();
digitalWrite(random(9,11),HIGH);
digitalWrite(random(9,11),LOW);
digitalWrite(random(9,11),HIGH);
digitalWrite(11,HIGH);
}
if (off==1){//Abschaltung
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
}
if (on==1 && millis()-pru>500){ //Kontrol anzeige
myservo1.write(random(pmin,pmax));
myservo2.write(random(lmin,lmax));
}
if (digitalRead(7)==false && millis()-t>1000 && ab2<=2){//Leistung rauf
t=millis();
but2++;
//display.clear();
pmin+=5;
pmax+=5;
}
if (digitalRead(7)==true && millis()-t>1500){
but2=0;
}
if (digitalRead(2)==false && millis()-t>1000 && ab2==0){//Leistung runter
t=millis();
//display.clear();
pmin-=5;
pmax-=5;
}
if (pmax >= 175){//ot Motorsicherung
pmax-=5;
pmin-=5;
}
if (pmin <=0){//ot Motorsicherung
pmax+5;
pmin+=5;
}
if (pmin <=0){//ot Motorsicherung
lmax+1;
lmin+=1;
}
if (digitalRead(A2)==false && millis()-lt>(9*432000000 / pmax) && st==0 && ab2==0&&qit==0) {//*3600000 für Stunden Treibsoff verbraucht
st=1;
feh=1264;
lf=1;
//lt=millis();
digitalWrite(8, HIGH);
}
if (lf==1 && millis()-tl2>2400000/pmax && ab2==0){//Treibstoff abnahme
lmax-=1;
lmin-=1;
tl2=millis();
}
if (lmax <50 && lmax > 30 && pmin > 10 && millis()-pru>100 && st<=1 && off==0 && ab2==0&&qit==0){//Reserfe Treibstoff
digitalWrite(8, HIGH);
digitalWrite(3, HIGH);
pmax=40;
pmin=30;
myservo3.write(40);//Normal aus
myservo4.write(150);//Not an
digitalWrite(6, HIGH);
feh=2264;
st=1;
}
if (lmax <10 && millis()-pru>100 && st<=1 && ab2==0&&qit==0){//keine Kein Treibsoff
digitalWrite(8, HIGH);
digitalWrite(3, HIGH);
feh=3264;
off=1;
lmax=0;
lmin=0;
pmax=0;
pmin=0;
myservo3.write(40);//Normal aus
myservo4.write(20);//Not aus
//display.print(lmax);
st=1;
digitalWrite(6, LOW);
}
if (digitalRead(A2)==true && wegsel==0 && st<=2 && ab2==0){//Tank entvernt
wegsel=1;
//lf=1;
}
if (digitalRead(A2)==false && wegsel==1 && st<=2 && ab2==0){//neuer Tank eingebaut
lt=millis();
wegsel=0;
off=0;
lmax=180;
lmin=170;
pmax=100;
pmin=90;
myservo3.write(170);//Normal an
myservo4.write(150);//Not an
digitalWrite(8, LOW);
digitalWrite(3, LOW);
digitalWrite(6, HIGH);
feh=0000;
st=0;
//lf=0;
}//Stand bis ok
if (millis()-th>(88*432000000 / pmax) && st==0 && ab2==0&&qit==0){//Leistungs schwankung + überhitzung pmax*60000 für Minuten
// th=millis();
pmax=50;
pmin=40;
feh=1341;
pumpek=1;
st=1;
digitalWrite(8, HIGH);
}
if (pumpek==1 && millis()-th2>4*(60000-(pmax*10)) && off==0 && ab2==0){//Steigende Hitze Stündlich/Leistung
th2=millis();
temp+=10;
display.clear();
display.print(temp);
}
if (temp>2000 && temp<4000 && millis()-pru>850 && st<=1 && ab2==0&&qit==0){//kritische Temperatur
feh=2341;
digitalWrite(8, HIGH);
st=1;
pmax=50;
pmin=40;
myservo3.write(40);//Normal aus
myservo4.write(150);//Not an
digitalWrite(6, HIGH);
}
if (temp >4000 && millis()-pru>900 && st<=1 && ab2==0&&qit==0){//notabschalt Temperatur
off=1;
feh=3341;
digitalWrite(8, HIGH);
digitalWrite(3, HIGH);
st=1;
pmax=0;
pmin=0;
myservo3.write(40);//Normal aus
myservo4.write(20);//Not aus
digitalWrite(6, LOW);
}
if (digitalRead(A3)==true && wegselk==0 && st<=2 && ab2==0){//kühlung entvernt
wegselk=1;
//pumpek=1;
}
if (digitalRead(A3)==false && wegselk==1 && st<=2 && ab2==0){//kuhlung ersetzt
wegselk=0;
th=millis();
off=0;
temp=120;
digitalWrite(8, LOW);
digitalWrite(3, LOW);
feh=0000;
st=0;
//pumpek=0;
pmin=90;
pmax=100;
myservo3.write(170);//Normal an
myservo4.write(150);//Not an
digitalWrite(6, HIGH);
}
if (digitalRead(A5)==false && db==0 && millis()-30*3600000>de){//Defeckte Bauteil schleife
digitalWrite(8, HIGH);
myservo3.write(40);//Normal aus
feh=bf;
db=2;
st=1;
}
if (digitalRead(A5)==true && db==2 && millis()-t>10000){
db=4;
t=millis();
de=millis();
st=0;
}
if (digitalRead(A5)==false && db==4 && millis()-de >9*3600000){
digitalWrite(8, LOW);
myservo3.write(40);//Normal aus
feh=0000;
bf=4259;
db=6;
t=millis();
st=1;
}
if (digitalRead(A5)==true && db==6 && millis()-t>10000){
db=8;
t=millis();
de=millis();
st=0;
}
if (digitalRead(A5)==false && db==8 && millis()-de >4*3600000){
digitalWrite(8, LOW);
myservo3.write(40);//Normal aus
feh=0000;
bf=4391;
db=10;
t=millis();
st=1;
}
if (digitalRead(A5)==true && db==10 && millis()-t>10000){
db=12;
t=millis();
de=millis();
st=0;
}
if (digitalRead(A5)==false && db==12 && millis()-de >3*3600000){
digitalWrite(8, LOW);
myservo3.write(40);//Normal aus
feh=0000;
bf=4646;
db=14;
t=millis();
st=1;
}
if (digitalRead(A5)==true && db==14 && millis()-t>10000){
db=16;
t=millis();
de=millis();
st=0;
}
if (digitalRead(A5)==false && db==16 && millis()-de >6*3600000){
digitalWrite(8, LOW);
myservo3.write(40);//Normal aus
feh=0000;
bf=4259;
db=18;
t=millis();
st=1;
}
if (digitalRead(A5)==true && db==18 && millis()-t>10000){
db=20;
de+=6*3600000;//in Stunden umwandeln
t=millis();
de=millis();
st=0;
}
if (digitalRead(A5)==false && st==0 && millis()-t>10000 && ab2==0){
digitalWrite(8, LOW);
myservo3.write(170);//Normal an
t=millis();
}
if (pmax <50 && pmax > 30 && millis()-pru>100 && st<=1 && off==0 && ab2==0&&qit==0){//Notstrom
digitalWrite(8, HIGH);
digitalWrite(3, HIGH);
myservo3.write(40);//Normal aus
myservo4.write(150);//Not an
digitalWrite(6, HIGH);
feh=2264;
st=1;
}
if (pmin <10 && millis()-pru>100 && st<=1 && ab2==0){//Strom aus
digitalWrite(8, HIGH);
digitalWrite(3, HIGH);
feh=3264;
off=1;
pmax=0;
pmin=0;
myservo3.write(40);//Normal aus
myservo4.write(20);//Not aus
digitalWrite(6, LOW);
//display.print(lmax);
st=1;
}
if (pmax >55 && millis()-pru>100 && st<=1 && off==0 && ab2==0){//Strom an
digitalWrite(8, LOW);
digitalWrite(3, LOW);
myservo3.write(170);//Normal an
myservo4.write(150);//Not an
digitalWrite(6, HIGH);
st=0;
feh=0000;
}
if (pmax <50 && pmin >10 && millis()-pru>100 && st<=1 && ab2==0&&qit==0){//Notstrom an
digitalWrite(8, HIGH);
digitalWrite(3, HIGH);
feh=2264;
off=0;
myservo3.write(40);//Normal aus
myservo4.write(150);//Not an
digitalWrite(6, HIGH);
//display.print(lmax);
st=1;
}
if (millis()-dis>500 && ab2==0){//Fehler anzeige
display.clear();
display.print(feh);
dis=millis();
}
if (digitalRead(A5)==true && millis()-ent>60000 && ab2==0){//Bauteil entvernt
ent=millis();
l++;
}
if (l>=3 && millis()-ent>6000 && ab2==0){
myservo3.write(40);//Normal aus
myservo4.write(20);//Not aus
st=3;
}
if (digitalRead(A5)==false && millis()-ent>100){//Bauteil eingebaut
ent=millis();
l=0;
st=0;
}
if (digitalRead(A2)==true && millis()-ent1>60000){//Tank entvernt
ent1=millis();
l1++;
}
if (l1>=3 && millis()-ent1>6000){
lf=1;
st=3;
}
if (digitalRead(A2)==false && millis()-ent1>100){//Tank eingebaut
ent1=millis();
l1=0;
st=0;
}
if (digitalRead(A3)==true && millis()-ent2>60000){//Kuhlung entvernt
ent2=millis();
l2++;
}
if (l2>=3 && millis()-ent2>6000){
pumpek=1;
st=3;
}
if (digitalRead(A3)==false && millis()-ent2>100){//Kuhlung eingebaut
ent2=millis();
l2=0;
st=0;
}
if (ab>=3 && millis()-ab1>1000 && teimer >=0){
ab1=millis();
display.clear();
display.print(teimer);
teimer--;
ab2=1;
st=3;
}
if (teimer==0 && st==3 && ab2==1){
lmax=0;
lmin=0;
pmax=0;
pmin=0;
digitalWrite(6, LOW);
off=1;
digitalWrite(8, HIGH);
ab2=1;
}
if (pmin <10 && millis()-pru>100 && st<=1 && ab2==1){//Strom aus
myservo3.write(40);//Normal aus
myservo4.write(20);//Not aus
ab2=2;
}
if (but2==12 && ab2==2){//Hochfahren
t=millis();
st=0;
ab2=3;
display.clear();
display.print(but);
}
if (ab>=3 && millis()-ab1>1200 && ab2 ==3){
ab1=millis();
display.clear();
display.print(but);
but++;
}
if (but==600 && ab2==3){
pmax=55;
pmin=45;
lmax=90;
lmin=85;
myservo4.write(150);//Not an
digitalWrite(6, HIGH);
off=1;
digitalWrite(8, LOW);
}
if (but==999 && ab2==3){
pmax=120;
pmin=100;
myservo4.write(150);//Not an
off=0;
myservo3.write(170);//Normal an
ab2=0;
display.clear();
ab=0;
teimer=240;
}
if (but2==3 && ab2==1 && ab==3){//Hochfahren
t=millis();
st=0;
ab2=0;
ab=0;
display.clear();
teimer=240;
}
}