int otchet1=0;
int otchet2=0;
int lengthpressid=0;
int lengthpressid1=0;
int lengthpressid2=0; //применяется в сверке правила по типам нажатия
int lengthpressid3=0;
int lengthpress[5][5]={
0,1,50,1500,10,
1,2,1501,2499,11,
2,3,2500,7000,12,
3,10,9000,13000,13,
4,888,0,0,0
};
/*
0 id,
1 type
2 mintime
3 maxtime
4 стоблик в массиве inp
*/
int inpid=1;
int inpid2=1;
int inpid3=1;
int inpid4=1;
unsigned long inp[9][14]={
0,1,2, 3,4,5,6,7,8,9,10,11,12,13,
1,2,1, 0,0,0,0,0,0,0, 0, 0, 0, 0, // кнопка простая
2,3,2, 0,2,0,0,0,0,0, 0, 0, 0, 0, // качелька
3,4,1,1000,0,0,0,0,0,0, 0, 0, 0, 0,
4,5,1,1000,0,0,0,0,0,0, 0, 0, 0, 0,
5,6,1,1000,0,0,0,0,0,0, 0, 0, 0, 0,
6,7,1,1000,0,0,0,0,0,0, 0, 0, 0, 0,
7,8,3,3000,2,0,0,0,0,0, 0, 0, 0, 0, //держим более 1 секунды и после секунды пошел сценарий выключить все реле
8,888, 0,0,0,0,0,0,0, 0, 0, 0, 0
};
/*
0 id,
1 port
2 type(click,perekl)
3 Pause Wait Next Push
4 defaultstate 0,1,2(0or1)
5 laststate
6 starttimepush
7 stoptimepush
8 lasttime stoptimepush
9 показатель наличия любого нажатия
10 push 1
11 push 2
12 push 3
13 push 10
*/
int pravid=1;
int prav[14][14]={
0, 1,2, 3,4,5, 6, 7,8,9,10,11,12,13,
1, 2,1,39,0,1, 0, 0,1,0, 1, 0, 0, 0,
2, 2,1,39,1,0, 0, 0,0,0, 1, 0, 0, 0,
3, 3,1,41,0,1, 0, 0,1,0, 1, 0, 0, 0,
4, 3,1,41,1,0, 0, 0,0,0, 1, 0, 0, 0,
5, 5,1,43,0,1, 0, 0,1,0, 1, 0, 0, 0,
6, 5,1,43,1,0, 0, 0,0,0, 1, 0, 0, 0,
7, 8,1,39,1,0, 0, 0,0,0, 1, 0, 0, 0,
8, 8,1,41,1,0, 0, 0,0,0, 1, 0, 0, 0,
9, 8,1,39,0,0, 0, 0,0,0, 1, 0, 0, 0,
10, 8,1,41,0,0, 0, 0,0,0, 1, 0, 0, 0,
11, 8,1,43,1,0, 0, 0,0,0, 1, 0, 0, 0,
12, 8,1,43,0,0, 0, 0,0,0, 1, 0, 0, 0,
// 8, 5,1,45,0,0, 0, 0,1,0, 0, 1, 0, 0,
// 9, 6,1,47,1,0, 0, 0,0,0, 0, 2, 0, 0,
// 10, 6,1,47,0,0, 0, 0,1,0, 0, 2, 0, 0,
// 11, 7,1,49,1,0, 0, 0,0,0, 1, 1, 0, 0,
// 12, 7,1,49,0,0, 0, 0,1,0, 1, 1, 0, 0,
13,888,1,43,1,1,0,0,0,0, 1, 0, 0, 0
};
/*
0 id,
1 вход
2 состояние входа
3 выход
4 состояние выхода текущее
5 состояние выхода требуемое
6 пауза старта
7 длительность вкл
8 состояние после
9 id след задания
10 тип нажатия 1
11 push 2
12 push 3
13 push 10
*/
int workid=1;
int workid2=1;
int workid3=1; //делаем работу
unsigned long work[8][10]={
0, 1,2,3,4,5,6,7,8,9,
1, 39,0,0,0,0,0,0,0,0,
2, 41,0,0,0,0,0,0,0,0,
3, 43,0,0,0,0,0,0,0,0,
4, 45,0,0,0,0,0,0,0,0,
5, 47,0,0,0,0,0,0,0,0,
6, 49,0,0,0,0,0,0,0,0,
7,888,0,0,0,0,0,0,0,0
};
/*
0 id
1 выход
2 состояние текущее
3 пауза вкл
4 длительность выполнения
5 состояние после выполнения
6 послед задание №правила
7 время нач
8 время старта.
9 занятость
*/
void setup() {
Serial.begin(57600);
inpid = 1;
while(inp[inpid][1]!=888){
pinMode(inp[inpid][1], INPUT);
inp[inpid][4]=digitalRead(inp[inpid][1]);
inpid++;
}
workid=1;
while (work[workid][1]!=888){
pinMode(work[workid][1], OUTPUT);
if (work[workid][2]==1){
digitalWrite(work[workid][1],0);
Serial.print("start state ");Serial.print(work[workid][1]);Serial.print(" ");Serial.print(work[workid][2]);Serial.println("-> 0");
}
else {digitalWrite(work[workid][1],1);
Serial.print("start state ");Serial.print(work[workid][1]);Serial.print(" ");Serial.print(work[workid][2]);Serial.println("-> 1");
}
workid++;
}
}
void loop(){
//==========================================================================================================================================
// нажатия
inpid = 1;
while(inp[inpid][1]!=888){
// Serial.println(inp[inpid][0]);
if (inp[inpid][2]==1){
if (inp[inpid][4]!=digitalRead(inp[inpid][1])){
if (inp[inpid][6]==0){
inp[inpid][6]=millis(); //starttimepush
Serial.println("starttimepush");
Serial.print("inp ");Serial.print(inp[inpid][1]);Serial.print(" state ");Serial.println(digitalRead(inp[inpid][1]));
inp[inpid][5]!=digitalRead(inp[inpid][1]);
}
}
if (inp[inpid][4]==digitalRead(inp[inpid][1])){
if (inp[inpid][6]!=0){
inp[inpid][7]=millis(); //stoptimepush
Serial.println("stoptimepush");
lengthpressid=0;
while(lengthpress[lengthpressid][1]!=888){
if ((inp[inpid][7]-inp[inpid][6])>lengthpress[lengthpressid][2]){ // если длительность нажатия больше mintime
if ((inp[inpid][7]-inp[inpid][6])<lengthpress[lengthpressid][3]){ // если длительность нажатия меньше maxtime
inp[inpid][9]=1; //ставим 1 в соотвествующий типу нажатия столбик
inp[inpid][10]=1;
Serial.print("inp ");Serial.print(inp[inpid][1]);Serial.print(" reset starttime. ");Serial.print("pushtype ");Serial.print(lengthpress[lengthpressid][1]);Serial.print(" sum push ");Serial.print(inp[inpid][lengthpress[lengthpressid][4]]);
Serial.print(" pushes: ");Serial.print(inp[inpid][9]);Serial.print(" ");Serial.print(inp[inpid][10]);Serial.print(" ");Serial.print(inp[inpid][11]);Serial.print(" ");Serial.print(inp[inpid][12]);Serial.print(" ");Serial.print(inp[inpid][13]);Serial.println(".");
otchet1=1;
}
}
lengthpressid++;
}
inp[inpid][8]=inp[inpid][7]; //lasttime stoptimepush
inp[inpid][6]=0;
}
}
}
if (inp[inpid][2]==2){
if (inp[inpid][4]!=digitalRead(inp[inpid][1])){
inp[inpid][9]=1;
inp[inpid][10]=1;
inp[inpid][8]=millis(); //lasttime stoptimepush
inp[inpid][4]=digitalRead(inp[inpid][1]);
Serial.print("inp (kachelka)");Serial.print(inp[inpid][1]);Serial.print(" pushes: ");Serial.println(inp[inpid][9]);
otchet1=1;
}
}
if (inp[inpid][2]==3){
if (inp[inpid][4]!=digitalRead(inp[inpid][1])){
//// Serial.print("inp ");Serial.print(inp[inpid][1]);Serial.print(" state ");Serial.println(digitalRead(inp[inpid][1]));
if (inp[inpid][6]==0){
inp[inpid][6]=millis(); //starttimepush
Serial.println("inp[inpid][6]=millis(); ");
}
if ((inp[inpid][3]+inp[inpid][6])<millis()){
Serial.print(inp[inpid][3]);Serial.print(" + ");Serial.print(inp[inpid][6]);Serial.print(" millis -> pause ");Serial.println(millis());
// if (inp[inpid][5]!=1){;
inp[inpid][9]=1;
inp[inpid][10]=1;
inp[inpid][6]=0;
// inp[inpid][5]=1;
// }
}
// }
// else{
// inp[inpid][5]=0;
// inp[inpid][6]=0;
// }
// if (inp[inpid][6]!=0){
// inp[inpid][6]=0;
}
}
// if (inp[inpid][2]==3){
// if (inp[inpid][4]!=digitalRead(inp[inpid][1])){
// if (inp[inpid][6]==0){
// inp[inpid][6]=millis(); //starttimepush
// Serial.println("starttimepush 3");
// Serial.print("inp ");Serial.print(inp[inpid][1]);Serial.print(" state ");Serial.println(digitalRead(inp[inpid][1]));
// inp[inpid][4]=digitalRead(inp[inpid][1]);
// }
// else{
// if (inp[inpid][3]+inp[inpid][6]<millis()){
// inp[inpid][9]=1; //ставим 1 в соотвествующий типу нажатия столбик
// inp[inpid][10]=1;
// inp[inpid][6]=0;
// inp[inpid][4]=digitalRead(inp[inpid][1]);
// otchet1=1;
// }
// Serial.print("inp ");Serial.print(inp[inpid][1]);Serial.print(" reset starttime. ");Serial.print("pushtype ");Serial.print(lengthpress[lengthpressid][1]);Serial.print(" sum push ");Serial.print(inp[inpid][lengthpress[lengthpressid][4]]);
// Serial.print(" pushes: ");Serial.print(inp[inpid][9]);Serial.print(" ");Serial.print(inp[inpid][10]);Serial.print(" ");Serial.print(inp[inpid][11]);Serial.print(" ");Serial.print(inp[inpid][12]);Serial.print(" ");Serial.print(inp[inpid][13]);Serial.println(".");
//
//// inp[inpid][8]=inp[inpid][7]; //lasttime stoptimepush
//// inp[inpid][6]=0;
// }
// }
//
// }
inpid++;
}
// обработка нажатий закончена
//выводим отчет по всем нажатиям
if (otchet1==1){
Serial.println(" inp[][]");
inpid2 = 1;
while(inp[inpid2][1]!=888){
Serial.print(" inp ");Serial.print(inp[inpid2][1]);
Serial.print(" laststate ");Serial.print(inp[inpid2][5]);
Serial.print(" laststoptp ");Serial.print(inp[inpid2][8]);
Serial.print(" pushes: ");Serial.print(inp[inpid2][9]);
Serial.print(" ");Serial.print(inp[inpid2][10]);
Serial.print(" ");Serial.print(inp[inpid2][11]);
Serial.print(" ");Serial.print(inp[inpid2][12]);
Serial.print(" ");Serial.print(inp[inpid2][13]);Serial.println(".");
inpid2++;
}
otchet1=0;
}
//==========================================================================================================================================
// поиск правил