- Kód: Vybrat vše
int trigPin01 = 12; //nasypka
int echoPin01 = 10; //nasypka
int motorove_tlacitko = 4; //kontakt kompaktoru
int Rele01 = 8; //rele kompaktoru
int Rele02 = 7; //rele podavace
int bypass_tlacitko = 6; //tlacitko pro rucni plneni nasypky
int plneni_tlacitko = 5; //mikrospinac konpaktoru (plneni)
int analog, pwm;
int Rele01State = LOW; //vychozi stav rele kompaktoru
int Rele02State = LOW; //vychozi stav rele podavace
#include <SPI.h>
int duration,distance,percentage,heightTank,deviation;
unsigned long previousMillis = 0;
long interval01 = 20000; //cas za jak dlouho probehne sepnuti rele kompaktoru
long interval02 = 1600; //cas jak dlouho bude sepnute rele podavace
long interval03 = 1500; //cas vypisu bypass stavu
void setup(){
Serial.begin (9600);
pinMode(trigPin01,OUTPUT);
pinMode(echoPin01,INPUT);
pinMode(motorove_tlacitko,INPUT);
pinMode(Rele01,OUTPUT);
pinMode(Rele02,OUTPUT);
pinMode(bypass_tlacitko,INPUT);
pinMode(plneni_tlacitko,INPUT);
// pinMode(control,OUTPUT);
// pinMode(volt,INPUT);
heightTank=45; //hloubka nasypky
deviation=0; //vzdalenost cidla od horni hladiny paliva v nasypce
}
void loop(){ //1A
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > interval01){ //2A - pokud je rozdil mezi aktualnim casem a casem predeslym vetsi nez hodnota intervalu, proved nasledujici:
previousMillis = currentMillis; //aktualizuj cas
// Rele01State = HIGH; //sepni rele kompaktoru
// digitalWrite(Rele01, Rele01State); //zapis stav rele do prommene
digitalWrite(trigPin01,LOW); //zacatek procesu mereni nasypky
delayMicroseconds(2);
digitalWrite(trigPin01,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin01,LOW);
duration=pulseIn(echoPin01,HIGH); //konec procesu mereni nasypky
distance=(duration/2)/29.1; //vypocitej vzdalenost mezi cidlem a hladinou paliva v cm
percentage=100-(((distance-deviation)*100)/heightTank); //vypocitej vzdalenost mezi cidlem a hladinou paliva v procentech, po odectu vzdalenosti cidla od max. hladiny paliva
Serial.println("_________________________"); //zacatek vypisu na seriovou linku stavu predesleho mereni a vypoctu
Serial.println();
Serial.println("Stav nasypky:");
Serial.print(percentage);
Serial.println("% naplneni");
Serial.print(distance);
Serial.println("cm od okraje");
Serial.println(); //konec vypisu na seriovou linku
if (percentage >= 5){ //3A
Rele01State = HIGH; //sepni rele kompaktoru
digitalWrite(Rele01, Rele01State); //zapis stav rele do prommene
} //3B
if ((digitalRead(plneni_tlacitko) == HIGH)&&(percentage >= 5)){ //4A - pokud je sepnute tlacitko plneni a v nasypce je 5% a vice paliva proved nasledujici
Rele02State = HIGH; //sepni rele podavace
digitalWrite(Rele02, Rele02State); //zapis stav rele do promenne
Serial.println("Zapinam podavac paliva... "); //vypis cinnosti na seriovou linku
Serial.print("Rele podavace ve stavu: ");
Serial.println(digitalRead(Rele02));
Serial.println("-------------------------");
Serial.println(); //konec vypisu
} //4B
else if (Serial.println("Cekam na dalsi mereni... ")){ //5A - pokud se predesly blok neprovedl, vypis stav rele na seriovou linku
Serial.print("Rele podavace ve stavu: ");
Serial.println(digitalRead(Rele02));
Serial.println("-------------------------");
Serial.println();
} //5B
} //2B
if ((digitalRead(Rele01) == HIGH)&&(digitalRead(motorove_tlacitko) == LOW)){ //6A preruseni otaceni kompaktoru
// if (digitalRead(motorove_tlacitko) == LOW){//3A
Rele01State = LOW; //vypni rele kompaktoru
digitalWrite(Rele01, Rele01State); //zapis stav rele do promenne
} //6B
if ((digitalRead(Rele02) == HIGH)&&(currentMillis - previousMillis >= interval02)&&(digitalRead(bypass_tlacitko) == LOW)){ //7A - pokud je rele sepnute a cas od posledniho zapisu je vetsi nebo stejny nez hodnota intervalu02 a tlacitko bypassu neni sepnute, proved nasledujici:
previousMillis = currentMillis; //aktualizuj cas
Rele02State = LOW; //vypni rele podavace
digitalWrite(Rele02, Rele02State); //zapis stav rele do promenne
Serial.println("Vypinam podavac paliva... "); //vypis cinnosti na seriovou linku
Serial.print("Rele podavace ve stavu: ");
Serial.println(digitalRead(Rele02));
Serial.println("-------------------------");
Serial.println(); //konec vypisu na seriovou linku
} //7B
if (digitalRead(bypass_tlacitko)){ //8A - pokud napeti na pinu tlacitka
Rele02State = HIGH; //sepni rele podavace
digitalWrite(Rele02, Rele02State); //zapis stav rele do prommene
} //8B
if ((digitalRead(bypass_tlacitko))&&(currentMillis - previousMillis >= interval03)){ //9A - pokud napeti na pinu tlacitka a cas od posledniho zapisu je vetsi nez interval03
previousMillis = currentMillis; //aktualizuj cas
Serial.println("Provadim rucni plneni... "); //vypis cinnosti na seriovou linku
Serial.print("Rele podavace ve stavu: ");
Serial.println(digitalRead(Rele02));
Serial.println("-------------------------");
Serial.println(); //konec vypisu na seriovou linku
} //9B
{ //10A
analog = analogRead(A0); //kde cist hodnotu napeti
pwm = map(analog,0,1023,190,10); //mapovani rozsahu cteni/zapis
// Serial.print("Analog: "); //kontrolni vypis hodnoty mereni napeti
// Serial.print(analog); //kontrolni vypis hodnoty mereni napeti
// Serial.print(" PWM: "); //kontrolni vypis hodnoty PWM
// Serial.println(pwm); //kontrolni vypis hodnoty PWM
analogWrite(3,pwm); //zapis na pin 3 hodnotu pwm podle mapovani
} //10B
} //1B