// проект AMF
uint32_t tmr1, tmr2, tmr3, tmr4, tmr5, tmr6, tmr7, tmr8; // переменная таймера
#define TIMER_INPUT 50000
#define TIMER_MAINS1 5000
#define TIMER_MAINS2 5000
#define TIMER_CUOPLING 6000
#define TIMER_GEN 3000
#define PERIOD1 300
//byte pins [] {
//27, //mains1,
//26,
//19,
//32,
//33,
//25,
//23,
//255,
//};
//enum {
//mains1,
//mains2,
//generator,
//Mains_br_1,
//Mains_br_2,
//Coupling,
//genBr
//};
byte PinsInput [] = {27, 13, 19}
byte PinsOutput [] = {32, 33, 25, 26}
#define MAINS1 27 // напряжение из города 1
#define MAINS2 13 // напряжение из города 2
#define GENERATOR 19 //напряжение на ген
#define MAINS_BR_1 32 // контактор город 1
#define MAINS_BR_2 33 // контактор город 2
#define COUPLING 25 // контактор секционник
#define GEN_BR 26 // контактор ген
// задаю переменные
int status[] = {main1, main2, gen}; //отображает работу генератора
//int main1 = 0; //отображает наличие напряжения город 1
//int main2 = 0; //отображает наличие напряжения город 2
int stat = 0; //отображает state
int flag1 = 0;
int flag2 = 0;
int flag3 = 0;
bool flag8 = LOW;
bool flag9 = LOW;
int Fun_state (int var1, int var2, int var3);
void setup() {
//for (int i = 0; i < INPUTS; i++) {
// pinMode(pins[mains1 + i], INPUT_PULLUP);
// pinMode(pins[Mains_br_1 + i], OUTPUT);
// digitalWrite(pins[Mains_br_1 + i], LOW);
//}
pinMode(MAINS_BR_1, OUTPUT); // устанавливает режим работы - выход
pinMode(MAINS_BR_2, OUTPUT); // устанавливает режим работы - выход
pinMode(COUPLING, OUTPUT); // устанавливает режим работы - выход
pinMode(GEN_BR, OUTPUT); // устанавливает режим работы - выход
pinMode(MAINS1, INPUT_PULLUP); // назначаем входом напряжение из города 1
pinMode(MAINS2, INPUT_PULLUP); // назначаем входом напряжение из города 2
pinMode(GENERATOR, INPUT_PULLUP); // назначаем the_voltage входом напряжение с ген
digitalWrite(GEN_BR, LOW);
digitalWrite(COUPLING, LOW);
digitalWrite(MAINS_BR_1, LOW);
digitalWrite(MAINS_BR_2, LOW);
Serial.begin(9600); // установка связи по serial
}
void loop()
{
//status[main1] = !digitalRead(MAINS1);
//status[main2] = !digitalRead(MAINS2);
//status[gen] = !digitalRead(GENERATOR);
for (int i = 0; i < sizeof(PinsInput); i++) {
status[i] = !digitalRead(i); // ищем разницу
if (status)
uint32_t tmr = 0;
millis() - tmr >= TIMER_INPUT;
flag1 = 1;
tmr = millis();
}
else flag1 = 0; //if (!digitalRead(MAINS1) && millis() - tmr5 >= TIMER_INPUT) {
//flag1 = 0;
//tmr5 = millis();
//}
Serial.print("Main 1 - ");
Serial.print(flag1);
Serial.println();
}
if (!digitalRead(MAINS1)) { // ищем разницу
uint32_t tmr = 0;
millis() - tmr >= TIMER_INPUT;
flag1 = 1;
tmr = millis();
}
else flag1 = 0; //if (!digitalRead(MAINS1) && millis() - tmr5 >= TIMER_INPUT) {
//flag1 = 0;
//tmr5 = millis();
//}
Serial.print("Main 1 - ");
Serial.print(flag1);
Serial.println();
//main2 = !digitalRead(MAINS2);
if (!digitalRead(MAINS2)) { // ищем разницу
uint32_t tmr = 0;
millis() - tmr >= TIMER_INPUT;
flag2 = 1;
tmr = millis();
}
else flag2 = 0;//if (!main2 && flag2 && millis() - tmr5 >= TIMER_INPUT) {
//flag2 = 0;
//tmr5 = millis();
//}
Serial.print("Main 2 - ");
Serial.print(flag2);
Serial.println();
//gen = !digitalRead(GENERATOR);
if (!digitalRead(GENERATOR)) { // ищем разницу
uint32_t tmr = 0;
millis() - tmr >= TIMER_INPUT;
tmr = millis();
flag3 = 1;
}
else flag3 = 0; //if (!gen && flag3 && millis() - tmr5 >= TIMER_INPUT) {
//flag3 = 0;
//tmr5 = millis();
//}
Serial.print("Gener - ");
Serial.print(flag3);
Serial.println();
stat = Fun_state(flag1, flag2, flag3);
//Serial.print("State - ");
//Serial.println(stat);
if (stat == 1) {
//if (millis() - tmr1 >= PERIOD1) { // ищем разницу
//tmr1 = millis();
Serial.print("State 1 - ACTIVE ");
Serial.println(stat);
//delay (100);
//flag = !flag;
// tmr1 = millis();
//if (millis() - tmr1 >= TIMER_CUOPLING) { // ищем разницу
// tmr1 = millis(); // сброс таймера
digitalWrite(COUPLING, LOW);// выполнить действие
//}
//flag = !flag;
// tmr1 = millis();
//if (millis() - tmr2 >= TIMER_GEN) { // ищем разницу
// tmr2 = millis(); // сброс таймера
digitalWrite(GEN_BR, LOW);// выполнить действие// выполнить действие
//}
//flag = !flag;
// tmr1 = millis();
if (millis() - tmr3 >= TIMER_MAINS1) { // ищем разницу
tmr3 = millis(); // сброс таймера
digitalWrite(MAINS_BR_1, HIGH);// выполнить действие
}
//flag = !flag;
// tmr1 = millis();
if (millis() - tmr4 >= TIMER_MAINS2) { // ищем разницу
tmr4 = millis(); // сброс таймера
digitalWrite(MAINS_BR_2, HIGH);// выполнить действие
}
//if (flag && millis() - tmr1 >= MY_PERIOD) {
//flag = 0; // сброс таймера
//digitalWrite(genBr, LOW);// выполнить действие
// }
//flag = !flag;
//tmr1 = millis();
//stat = 0;
//}
}
else if (stat == 2) {
//if (millis() - tmr1 >= PERIOD1) { // ищем разницу
//tmr1 = millis(); // сброс таймера
Serial.print("State 2 - ACTIVE ");
Serial.println(stat);
//flag = !flag;
// tmr1 = millis();
//if (millis() - tmr1 >= TIMER_GEN) { // ищем разницу
// tmr1 = millis(); // сброс таймера
//digitalWrite(COUPLING, LOW);// выполнить действие
digitalWrite(GEN_BR, LOW);// выполнить действие// выполнить действие
//}
//flag = !flag;
// tmr1 = millis();
//if (millis() - tmr2 >= TIMER_MAINS2) { // ищем разницу
// tmr2 = millis(); // сброс таймера
digitalWrite(MAINS_BR_2, LOW);// выполнить действие
//}
//flag = !flag;
// tmr1 = millis();
if (flag1 == true && flag3 == true && flag8 == true) {
digitalWrite(COUPLING, LOW);// выполнить действие
flag8 = 0;
}
if (millis() - tmr3 >= TIMER_MAINS1) { // ищем разницу
tmr3 = millis(); // сброс таймера
digitalWrite(MAINS_BR_1, HIGH);// выполнить действие
}
//flag = !flag;
// tmr1 = millis();
//flag8 = 1;
if (millis() - tmr4 >= TIMER_CUOPLING) { // ищем разницу
tmr4 = millis(); // сброс таймера
digitalWrite(COUPLING, HIGH);// выполнить действие
}
flag9 = 1;
//if (flag && millis() - tmr1 >= MY_PERIOD) {
//flag = 0; // сброс таймера
//digitalWrite(genBr, LOW);// выполнить действие
// }
//flag = !flag;
//tmr1 = millis();
//stat = 0;
//}
}
else if (stat == 3) {
//if (millis() - tmr1 >= PERIOD1) { // ищем разницу
//tmr1 = millis(); // сброс таймера
Serial.print("State 3 - ACTIVE ");
Serial.println(stat);
//flag = !flag;
// tmr1 = millis();
//if (millis() - tmr1 >= TIMER_GEN) { // ищем разницу
// tmr1 = millis(); // сброс таймера
//digitalWrite(COUPLING, LOW);// выполнить действие
digitalWrite(GEN_BR, LOW);// выполнить действие// выполнить действие
//}
//flag = !flag;
// tmr1 = millis();
//if (millis() - tmr2 >= TIMER_MAINS1) { // ищем разницу
// tmr2 = millis(); // сброс таймера
digitalWrite(MAINS_BR_1, LOW);// выполнить действие
//}
//flag = !flag;
// tmr1 = millis();
if (millis() - tmr3 >= TIMER_MAINS2) { // ищем разницу
tmr3 = millis(); // сброс таймера
digitalWrite(MAINS_BR_2, HIGH);// выполнить действие
}
//flag = !flag;
// tmr1 = millis();
//flag8 = 1;
if (flag2 == true && flag3 == true && flag8 == true) {
digitalWrite(COUPLING, LOW);// выполнить действие
flag8 = 0;
}
if (millis() - tmr4 >= TIMER_CUOPLING) { // ищем разницу
tmr4 = millis(); // сброс таймера
digitalWrite(COUPLING, HIGH);// выполнить действие
}
flag9 = 1;
//if (flag && millis() - tmr1 >= MY_PERIOD) {
//flag = 0; // сброс таймера
//digitalWrite(genBr, LOW);// выполнить действие
// }
//flag = !flag;
//tmr1 = millis();
//stat = 0;
//}
}
else if (stat == 4) {
//if (millis() - tmr1 >= PERIOD1) { // ищем разницу
// tmr1 = millis(); // сброс таймера
Serial.print("State 4 - ACTIVE ");
Serial.println(stat);
//flag = !flag;
// tmr1 = millis();
//if (millis() - tmr1 >= TIMER_MAINS1) { // ищем разницу
// tmr1 = millis(); // сброс таймера
digitalWrite(MAINS_BR_1, LOW);// выполнить действие
//}
//flag = !flag;
// tmr1 = millis();
//if (millis() - tmr2 >= TIMER_MAINS2) { // ищем разницу
// tmr2 = millis(); // сброс таймера
digitalWrite(MAINS_BR_2, LOW);// выполнить действие
//}
//flag = !flag;
// tmr1 = millis();
if (!flag1 == true && !flag2 == true && flag3 == true && flag9 == true) {
digitalWrite(COUPLING, LOW);// выполнить действие
flag9 = 0;
}
if (millis() - tmr3 >= TIMER_GEN) { // ищем разницу
tmr3 = millis(); // сброс таймера
digitalWrite(GEN_BR, HIGH);// выполнить действие// выполнить действие
}
//flag = !flag;
// tmr1 = millis();
if (millis() - tmr4 >= TIMER_CUOPLING) { // ищем разницу
tmr4 = millis(); // сброс таймера
digitalWrite(COUPLING, HIGH);// выполнить действие
}
flag8 = 1;
//if (flag && millis() - tmr1 >= MY_PERIOD) {
//flag = 0; // сброс таймера
//digitalWrite(genBr, LOW);// выполнить действие
// }
//flag = !flag;
//tmr1 = millis();
//stat = 0;
//}
}
/*else if (stat == 6) {
Serial.print("State 6 - ACTIVE ");
Serial.println(stat);
digitalWrite(MAINS_BR_1, LOW);// выполнить действие
digitalWrite(MAINS_BR_2, LOW);// выполнить действие
//if (flag8 && millis() - tmr1 >= PERIOD1) {
// flag8 = 0; // остановить
digitalWrite(COUPLING, LOW);// выполнить действие
// выполнить действие
// }
digitalWrite(GEN_BR, LOW);// выполнить действие
stat == 3;
}
*/
else {
Serial.print("State 0 - ACTIVE ");
Serial.println(stat);
//flag = !flag;
// tmr1 = millis();
//if (millis() - tmr1 >= TIMER_MAINS1) { // ищем разницу
//tmr1 = millis(); // сброс таймера
digitalWrite(MAINS_BR_1, LOW);// выполнить действие
//}
//flag = !flag;
// tmr1 = millis();
//if (millis() - tmr2 >= TIMER_MAINS1) { // ищем разницу
//tmr2 = millis(); // сброс таймера
digitalWrite(MAINS_BR_2, LOW);// выполнить действие
//}
//flag = !flag;
// tmr1 = millis();
//if (millis() - tmr3 >= TIMER_CUOPLING) { // ищем разницу
//tmr3 = millis(); // сброс таймера
digitalWrite(COUPLING, LOW);// выполнить действие
//}
//flag = !flag;
// tmr1 = millis();
//if (millis() - tmr4 >= TIMER_GEN) { // ищем разницу
//tmr4 = millis(); // сброс таймера
digitalWrite(GEN_BR, LOW);// выполнить действие// выполнить действие
//}
//if (flag && millis() - tmr1 >= MY_PERIOD) {
//flag = 0; // сброс таймера
//digitalWrite(genBr, LOW);// выполнить действие
// }
//flag = !flag;
//tmr1 = millis();
//stat = 0;
}
//stat = 5;
}
int Fun_state (int var1, int var2, int var3) {
int var4;
if (var1 == HIGH && var2 == HIGH) {
var4 = 1;
}
else if (var1 == HIGH && var2 == LOW) {
var4 = 2;
}
else if (var1 == LOW && var2 == HIGH) {
var4 = 3;
}
else if (var1 == LOW && var2 == LOW && var3 == HIGH) {
var4 = 4;
}
//else if (var1 == LOW && var2 == HIGH && var3 == HIGH || var1 == HIGH && var2 == LOW && var3 == HIGH) {
// var4 = 6;
//}
else var4 = 0;
return var4;
}