Jak zrobić żeby przy kontroli oleju dopompowywanie ( digitalWrite(5,HIGH); //pompuje ) nie mogło trwać więcej niż np. 20 sekund a po zadanym czasie jeżeli nie dopompowało powinno zmienić i=3 a wtedy wiadomo wyskoczyła by awaria. No i najważniejsze nie może to blokować trwania pętli programu bo program musi cały czas sprawdzać fotkę. Domyślam się że funkcja milis ale nie bardzo wiem jak się do tego zabrać.int foto;
int tempoil;
int i;
int oil;
int pushButton1 = 12;
int pushButton2 = 13;
#include <EEPROM.h>
#include <OneWire.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2) ;
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
pinMode(pushButton1, INPUT_PULLUP);
pinMode(pushButton2, INPUT_PULLUP);
oil = EEPROM.read(0);
i = EEPROM.read(1);
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(3, INPUT_PULLUP); //zarowanie awarii
pinMode(4, INPUT_PULLUP); //pływak
pinMode(A0,INPUT); //foto
pinMode(5,OUTPUT);//pompa
pinMode(6,OUTPUT); //iskra
pinMode(7,OUTPUT); //wentylator
pinMode(8,OUTPUT); //grzalka
pinMode(9,OUTPUT); //elektrozawor
pinMode(10,OUTPUT);//awaria
pinMode(11,OUTPUT);//grzalka drazka
digitalWrite(5,LOW);//pompa
digitalWrite(6,LOW); //iskra
digitalWrite(7,LOW); //wentylator
digitalWrite(8,LOW); //grzalka
digitalWrite(9,LOW); //elektrozawor
digitalWrite(10,LOW);//awaria
digitalWrite(11,LOW);//grzanie drazka dyszy
sensors.begin();
}
void loop(){
int buttonState1 = digitalRead(pushButton1);
int buttonState2 = digitalRead(pushButton2);
if (buttonState1 == LOW) {
oil++;
delay(1);
EEPROM.write(0, oil);
}
if (buttonState2 == LOW) {
oil--;
delay(1);
EEPROM.write(0, oil);
}
sensors.requestTemperatures(); // Send the command to get temperatures
float tempoil = (sensors.getTempCByIndex(0));
foto = analogRead(0);
digitalWrite(11,HIGH);
if ( i<3 && foto<300 && tempoil>oil && digitalRead(4)==HIGH) //brak płomienia , 3 pruby , olej zagzany i dopompowany
{
on(); // wykonaj sekwencje zapłonu
check(); //wykonaj sekwencje check
}
if(i==3) // 3 pruby i brak zapłonu
{
if (digitalRead(3)==LOW) { // zerowanie awarii
i=0;
EEPROM.write(1, i);
}
EEPROM.write(1, i);
awaria(); // awaria
}
if (digitalRead(4)==LOW && i<3){ //kontrola oleju ,
digitalWrite(5,HIGH); //pompuje
lcd.setCursor(0,0);
lcd.print ("POMPUJE OLEJ ");
lcd.setCursor(0,1);
lcd.print (tempoil);
lcd.print (" 'C / " );
lcd.print (oil);
lcd.print ("'C");
if (foto<300){ //kontrola foto
digitalWrite(9,LOW);
}
}
else {
digitalWrite(5,LOW);
}
if (tempoil<oil && i<3 && digitalRead(4)==HIGH){ //kontrola temp , !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
digitalWrite(8,HIGH); //pompuje
lcd.setCursor(0,0);
lcd.print ("PODGRZEWAM OLEJ ");
lcd.setCursor(0,1);
lcd.print (tempoil);
lcd.print (" 'C / " );
lcd.print (oil);
lcd.print ("'C");
delay(100);
if (foto<300){ //kontrola foto
digitalWrite(9,LOW);
}
}
else {
digitalWrite(8,LOW);
}
if (digitalRead(4)==HIGH && foto>300 && i<3 && tempoil>oil){ // praca palnika,
lcd.setCursor(0,0);
lcd.print (" PALNIK PRACUJE ");
lcd.setCursor(0,1);
lcd.print (tempoil);
lcd.print (" 'C / " );
lcd.print (oil);
lcd.print ("'C");
}
}
void on () { // Procedura zaplonu
{
lcd.setCursor(0,0);
lcd.print(" PROCEDURA ");
lcd.setCursor(0,1);
lcd.print (" ZAPLONU ");
digitalWrite(5,LOW); //wylaczam pompe
digitalWrite(6,LOW); // wylczam iskre
digitalWrite(7,LOW); // wylczam wentylator
digitalWrite(8,LOW); //wylczam grzalke
digitalWrite(9,LOW); // wylczam elektrozawor
digitalWrite(7,HIGH); // wlczam wentylator
delay(5000); // czekaj 5 s wentyluje piec
digitalWrite(6,HIGH); // podaje iskre
delay(1000); // czekam 1 sekunde
digitalWrite(9,HIGH); // wlczam elektrozawor, nastepuje zaplon
delay (10000); // 10 sekund na zaplon
}
}
void check()
{
foto = analogRead(0); // odczyt fotokomorki
if (i<3 && foto>300 ) // , jest plomien przechodzi do pracy
{
i=0;
praca ();
}
else
{
i++;
}
}
void praca() {
digitalWrite(6,LOW); // wylczam iskre
digitalWrite(9,HIGH); // wlczam elektrozawor
digitalWrite(7,HIGH); // wlczam wentylator
digitalWrite(10,LOW); //zeruje awarie
lcd.setCursor(0,0);
lcd.print (" Palnik pracuje ");
lcd.setCursor(0,1);
lcd.print(" prawidlowo ");
}
void awaria ()
{
digitalWrite(5,LOW); //wylaczam pompe
digitalWrite(6,LOW); // wylaczam iskre
digitalWrite(7,LOW); // wylaczam powietrze
digitalWrite(8,LOW); // wylaczam grzalke
digitalWrite(9,LOW); // wylaczam elektrozawor
digitalWrite(10,HIGH);//awaria
digitalWrite(11,LOW);//drazek dyszy
lcd.clear();
lcd.print (" AWARIA PALNIKA");
delay (500);
}
Ważne: Nie ponoszę odpowiedzialności za szkody wyrządzone w skutek używania mojego wsadu!!! Palniki to nie zabawki!!! Wsad jest opracowywany w celach EDUKACYJNYCH może i na pewno zawiera błędy !!! Jeżeli go używasz robisz to na własną odpowiedzialność!!!