Login
Завтра была война ?
357852 просмотров
Перейти к просмотру всей ветки
in Antwort uscheswoi_82 15.03.23 21:25
Вот здесь найди ошибку и я тебе поверю.... ))
unsigned long LaufzeitPumpe=0;
unsigned long TimerSK=0;
unsigned long TimerVisu=0;
int _Menge=0;
int MengeH=0;
int MengeSP=0;
//--------------Ablaufkette------------------------------------------------
const uint8_t START =0;
const uint8_t SOLLWERT =1;
const uint8_t DREHEN =2;
const uint8_t PAUSE1 =3;
const uint8_t PUMPE =4;
const uint8_t PAUSE2 =5;
const uint8_t GRUNDSTELLUNG =6;
void Ablauf(){
//****Visualisierung ->Schnapsmenge im Glas und Rest in Flaschen******************
if (PumpeAnAus>0){
if (Flasche[PosSoll]==0) _Menge=((millis()-TimerVisu)*50/FaktorPumpeLinks); else _Menge=((millis()-TimerVisu)*50/FaktorPumpeRechts);
MengeH=_Menge-MengeSP; MengeSP=_Menge;Menge+=MengeH;
if (PumpeAnAus==1 && InhaltFl_L>0) {InhaltFl_L-= MengeH;}
else if (PumpeAnAus==2 && InhaltFl_R>0) {InhaltFl_R-= MengeH;}}
else {TimerVisu=millis();MengeSP=0;}
if (Count_Auto <PUMPE) {Menge=0;}
PumpeAnAus=0;
//*********************************************************************************
//Zustand Belegung:
FlagGlasLeer=0; for (uint8_t i=0;i<GlasAnzahl;i++) {if (Belegung[1]==2) FlagGlasLeer+=1;} //Position mit leerem Glas
FlagGlasVoll=0; for (uint8_t i=0;i<GlasAnzahl;i++) {if (Belegung[1]==3) FlagGlasVoll+=1;} //Position mit vollem Glas
FlagKalibr=0; for (uint8_t i=0;i<GlasAnzahl;i++) {if (Belegung[1]==0) FlagKalibr+= 1; } //Position unkalibriert
//*****Reset*************
if (BetrArt==0 && Count_Auto!=GRUNDSTELLUNG) Count_Auto=START;
//************Schrittkette*********************************************************
switch (Count_Auto){
case START: { // :0
if (FlagGlasLeer>0&&(BetrArt==BA_Auto||(BetrArt==BA_HalbAuto && Impuls==TasteRot)||(BetrArt==BA_PumpeEntl))) Count_Auto=SOLLWERT;
else if (ServoRead!=Position[0]&&MenueX!=7) Count_Auto=GRUNDSTELLUNG;
break;
}
case SOLLWERT: // :1 Suche leeren Glas mit kleinster Entfernung zu Istposition
{
ServoSoll=Position[0];PosSoll=0;
for (uint8_t i=1;i<=5;i++)
{
if ((Belegung[i-1][1]==2)&&((abs(Position-ServoRead)<abs(ServoSoll-ServoRead))||(ServoSoll<=Position[0]))) {ServoSoll=Position;PosSoll=i;}
}
if (PosSoll!=0) Count_Auto=DREHEN; else Count_Auto=START;
break;
}
case DREHEN:{ // :2
ServoV=300;
if (ServoRead==ServoSoll) {TimerSK=millis();Count_Auto=PAUSE1;}
break;
}
case PAUSE1:{
if (TimerSK+ZeitPause1<millis()){
if (Belegung[PosSoll-1][1]==2) {TimerSK=millis();Count_Auto=PUMPE;} else Count_Auto=START;
}
break;
}
case PUMPE:{
if (BetrArt==BA_Auto||BetrArt==BA_HalbAuto) {
Belegung[PosSoll-1][1]=3;
if (Flasche[PosSoll]==0) LaufzeitPumpe=(FaktorPumpeLinks*Dose[PosSoll]) /50;
else LaufzeitPumpe=(FaktorPumpeRechts*Dose[PosSoll])/50; }
if ((TimerSK+LaufzeitPumpe<millis()&&BetrArt!=3)||BetrArt==0||Belegung[PosSoll-1][0]<2 ) { TimerSK=millis(); Count_Auto=PAUSE2;}
break;
}
case PAUSE2:{
if (TimerSK+ZeitPause2<millis()) {
TimerSK=millis();
if (FlagGlasLeer>0) Count_Auto=SOLLWERT; else Count_Auto=GRUNDSTELLUNG; }
break;
}
case GRUNDSTELLUNG:{
ServoV=300; ServoSoll=Position[0];
if (ServoSoll==ServoRead) Count_Auto=START;
break;
}
}
//********Ansteuerung Pumpe 1 *********************
if (Count_Auto==PUMPE && FlagPumpeAus==0 && (((BetrArt==BA_Auto||BetrArt==BA_HalbAuto)&&Flasche[PosSoll]==0) // Automatik
||(BetrArt==BA_PumpeEntl && TasterQ==TasteRot && MenueY==3))) // Entluften
{digitalWrite(Pumpe1,HIGH);PumpeAnAus=1;}
else digitalWrite(Pumpe1,LOW);
//********Ansteuerung Pumpe 2 *********************
if (Count_Auto==PUMPE && FlagPumpeAus==0 && (((BetrArt==BA_Auto||BetrArt==BA_HalbAuto)&&Flasche[PosSoll]==1) // Automatik
|| (BetrArt==BA_PumpeEntl && TasterQ==TasteRot && MenueY==4))) // Entluften
{digitalWrite(Pumpe2,HIGH);PumpeAnAus=2;}
else digitalWrite(Pumpe2,LOW);