#define burnInputPin 36
#define spreadMotRel 38
#define kapSensPin4 29
#define conLed1Pin 15 // Buchse 15, viol (Control Led 1)
#define conLed2Pin 17 // Buchse 15, rosa (Control Led 2)
#define loadled 6
#define kapled 7
unsigned int spreadMotRunTme = 5; // Nachlaufzeit in sek
bool loadProzIsRun = LOW;
bool kapSens4 = LOW;
bool kapSens4State = LOW;
bool firstRunState = LOW;
byte spreadMotSwL = 0; // VerteilMotor LevelSwitch
unsigned long spreadMotNow; // Flag für Motornachlauf
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(burnInputPin, INPUT_PULLUP);
pinMode(kapSensPin4, INPUT_PULLUP);
pinMode(spreadMotRel, OUTPUT);
pinMode(conLed1Pin, OUTPUT);
pinMode(conLed2Pin, OUTPUT);
pinMode(loadled, OUTPUT);
pinMode(kapled, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if (digitalRead(burnInputPin) == LOW){
loadProzIsRun = HIGH;
digitalWrite(loadled, HIGH); // Invers Rot-Rel aus
}
else{
loadProzIsRun = LOW;
digitalWrite(loadled, LOW);
}
//---------------------------------------------------------------
if (digitalRead(kapSensPin4) == LOW){
kapSens4 = HIGH;
digitalWrite(kapled, HIGH);
} else {
kapSens4 = LOW;
digitalWrite(kapled, LOW);
}
spreadMotor();
serial();
}
void spreadMotor(){
//----norm start
if (loadProzIsRun == HIGH && kapSens4State == LOW && kapSens4 == LOW && spreadMotSwL == 0){
spreadMotSwL = 1;
firstRunState = LOW; // reset hier da sonst nach erstem DL swl in 2 und rel dauerAn
}
if (spreadMotSwL == 1){ // ON
digitalWrite(spreadMotRel, HIGH); // Invers Rot-Rel ein
digitalWrite(conLed2Pin, HIGH); // ControlLED ein
spreadMotSwL = 2;
}
// ---aus ohne Kap erreicht
if (loadProzIsRun == LOW && kapSens4State == LOW && kapSens4 == LOW && spreadMotSwL == 2){
//firstRunState = LOW; // reset siehe oben
kapSens4State = LOW;
digitalWrite(spreadMotRel, LOW); // Invers Rot-Rel aus
digitalWrite(conLed2Pin, LOW); // ControlLED aus
spreadMotSwL = 0;
}
// xx erste Kap erkennung im load, dann noch x sek
if (loadProzIsRun == HIGH && kapSens4State == LOW && kapSens4 == HIGH && firstRunState == LOW){
kapSens4State = HIGH;
firstRunState = HIGH;
spreadMotSwL = 10;
}
//---ladeprozess beendet, pellets werden entnommen-------------------------------------------
// erste Kap erkennung nach load, Motor schiebt links, Pellets erreichen Kap
if (loadProzIsRun == LOW && kapSens4State == LOW && kapSens4 == HIGH){
kapSens4State = HIGH;
}
// Pellets werden entnommen und kap wird wieder low, Motor wird erneut für x sek angefordert
if (loadProzIsRun == LOW && kapSens4State == HIGH && kapSens4 == LOW && spreadMotSwL == 0){
//kapSens4State = LOW;
spreadMotSwL = 10;
}
//---------------------------------------------------------------------------
if (spreadMotSwL == 10){ // Run and Time
digitalWrite(spreadMotRel, HIGH); // Invers Rot-Rel ein
digitalWrite(conLed2Pin, HIGH); // ControlLED ein
spreadMotSwL = 11;
}
if (spreadMotSwL == 11 ){
//kapSens4SwUp = LOW;
spreadMotNow = millis();
spreadMotSwL = 12;
}
if (spreadMotSwL == 12){
if (millis() - spreadMotNow >= (spreadMotRunTme*1000)){
kapSens4State = LOW;
digitalWrite(spreadMotRel, LOW); // Invers Rot-Rel aus
digitalWrite(conLed2Pin, LOW); // ControlLED aus
spreadMotSwL = 0;
}
}
}
//-----------------------------------------------------------
void serial(){
Serial.print("loadProzIsRun: ");
Serial.print(loadProzIsRun);
Serial.print(" kapSens4: ");
Serial.print(kapSens4);
Serial.print(" kapSens4State: ");
Serial.print(kapSens4State);
Serial.print(" spreadMotSwL: ");
Serial.print(spreadMotSwL);
Serial.print(" firstRunState: ");
Serial.println(firstRunState);
}