Thank you for responding to my request for help. I want to control the 8 channel relay block with this code using 3 thermocouples and a flame sensor. It should be noted that when the temp1 does not reach the specified temperature and the flame sensor is inactive, pin_4 should be operated at intervals of 5 and 10 seconds and pin_8 at intervals of 7 and 10 seconds, and when the flame sensor is activated and the temperature is still lower than the specified pin_8, it should be LOW and pin_4 should be in range 3 and 7 seconds. when it reaches the highest specified temperature pin_4 and pin_8 to be LOW, but every 20 seconds they get "HIGH" for about a quarter of a second
I use the FSM for the timer.
those curly brackets are just a mistake. I've made some changes to my colleague comments, but no one changes.
#include <Fsm.h>
#define servo_pin 12
#define PWM_pin 2
#define pad_pin 4
#define doz_pin 3
#define siur1_pin 5
#define siur2_pin 6
#define pam_pin 8
#define uzd_pin 7
float temp1;
#define temp1_pin A0
float temp2;
#define temp2_pin A1
float temp3;
#define temp3_pin A2
#define led_pin 13
#define flame_sensor_pin 10
int flame_pin = HIGH;
void on_doz_on_enter() {
Serial.println("dozavimas ijugtas");
digitalWrite(doz_pin, HIGH);
}
void on_doz_off_enter() {
Serial.println("dozavimas isjungtas");
digitalWrite(doz_pin, LOW);
}
void on_uzd_on_enter() {
Serial.println("uzdegimas ijungtas");
digitalWrite(uzd_pin, HIGH);
}
void on_uzd_off_enter() {
Serial.println("uzdegimas isjungtas");
digitalWrite(uzd_pin, LOW);
}
State state_doz_on(&on_doz_on_enter, NULL);
State state_doz_off(&on_doz_off_enter, NULL);
State state_uzd_on(&on_uzd_on_enter, NULL);
State state_uzd_off(&on_uzd_off_enter, NULL);
Fsm fsm_doz(&state_doz_off);
Fsm fsm_uzd(&state_uzd_off);
Fsm fsm1_doz(&state_doz_off);
Fsm fsm1_uzd(&state_uzd_off);
Fsm fsm2_doz(&state_doz_off);
void setup() {
Serial.begin(9600);
pinMode(doz_pin, OUTPUT);
pinMode(uzd_pin, OUTPUT);
pinMode(PWM_pin, OUTPUT);
pinMode(pad_pin, OUTPUT);
pinMode(pam_pin, OUTPUT);
pinMode(siur1_pin, OUTPUT);
pinMode(siur2_pin, OUTPUT);
pinMode(temp1_pin, INPUT);
pinMode(temp2_pin, INPUT);
pinMode(temp3_pin, INPUT);
pinMode(flame_pin, INPUT);
pinMode(led_pin, OUTPUT );
fsm_doz.add_timed_transition(&state_doz_off, &state_doz_on, 5000, NULL);
fsm_doz.add_timed_transition(&state_doz_on, &state_doz_off, 10000, NULL);
fsm_uzd.add_timed_transition(&state_uzd_off, &state_uzd_on, 10000, NULL);
fsm_uzd.add_timed_transition(&state_uzd_on, &state_uzd_off, 7000, NULL);
fsm1_doz.add_timed_transition(&state_doz_off, &state_doz_on, 3000, NULL);
fsm1_doz.add_timed_transition(&state_doz_on, &state_doz_off, 7000, NULL);
fsm1_uzd.add_timed_transition(&state_uzd_off, &state_uzd_on, 0, NULL);
}
void loop() {
flame_pin = digitalRead ( flame_sensor_pin ) ;
if (flame_pin == HIGH)
{
Serial.println("nera liepsnos");
digitalWrite(led_pin, LOW);
}
else {
digitalWrite(led_pin, HIGH);
Serial.println("LIEPSNA");
digitalWrite (uzd_pin, LOW);
}
temp1 = analogRead (temp1_pin);
temp1 = temp1 * 0.3725;
Serial.println("KATILO TEMPRATURA = ");
Serial.print(temp1);
Serial.println("*C");
temp2 = analogRead(temp2_pin);
temp2 = temp2 * 0.3725;
Serial.println("RADIATORIU TEMPRATURA ");
Serial.print(temp2);
Serial.println("*C");
temp3 = analogRead (temp3_pin);
temp3 = temp3 * 0.3725;
Serial.println("BOILERIO TEMPRATURA ");
Serial.print(temp3);
Serial.println("*C");
if (temp1 <= 20 && flame_pin, HIGH)
{
fsm_doz.check_timer();
fsm_uzd.check_timer();
}
else if (temp1 <= 20 && flame_pin, LOW)
{
fsm1_doz.check_timer();
fsm1_uzd.check_timer();
}
if (temp1 <= 22)
{
digitalWrite (PWM_pin, 150);
Serial.println ("ventiliatorius ijungtas");
digitalWrite (pad_pin, HIGH);
Serial.println ("padavimas ijungtas");
}
else if (temp1 >= 22)
{
digitalWrite (PWM_pin, 0);
Serial.println ("ventiliatorius isjungtas");
digitalWrite (pad_pin, LOW);
Serial.println ("padavimas isjungtas");
digitalWrite (doz_pin, LOW);
digitalWrite (uzd_pin, LOW);
}
if (temp1 > 20)
{
digitalWrite(siur1_pin, HIGH);
Serial.println("radiatoriu siurblys ijungtas");
}
else
{
digitalWrite (siur1_pin, LOW);
Serial.println("radiatoriu siurblys isjungtas");
}
if (temp3 > 20 && temp1 > 20)
{
digitalWrite(siur2_pin, LOW);
Serial.println("boilerio siurblys isjungtas");
}
else if (temp3 < 20 && temp1 > 20)
{
digitalWrite(siur2_pin, HIGH);
Serial.println("boilerio siurblys ijungtas");
}
if (temp2 <= 20)
{
digitalWrite (pam_pin, HIGH);
Serial.println ("pamaisymas mazeja");
}
else
{
digitalWrite (pam_pin, LOW);
Serial.println ("pamaisymas dideja");
}
delay(1000);
}