// #include <Bounce2.h>
#define START_PR 12 // START SIGNAL FROM MOTOR POWER
#define ROTATE 2 // READ ROTATE
#define EM_STOP 10 // EMERGENCY STOP SIGNAL FOR RELAY STOP
long int rot = 0; // переменная для хранения количества оборотов
/// sensor log
// #define ENCODER_BTN 4 // pin SW
// #define ENCODER_CLK 2
// #define ENCODER_DT 3
byte buttons[] = {START_PR, ROTATE, EM_STOP}; // button pins init
#define NUMBUTTONS sizeof(buttons) // num pins for work
boolean rotate = false;
boolean emergency = false;
void setup() {
Serial.begin(9600);
// Make input & enable pull-up resistors on switch pins
for (int i=0; i<NUMBUTTONS; i++) {
pinMode( buttons[i], INPUT_PULLUP);
}
attachInterrupt(digitalPinToInterrupt(ROTATE), detect, CHANGE);
/// sensor log
// pinMode(ENCODER_BTN, INPUT_PULLUP);
// pinMode(LED_BUILTIN, OUTPUT);
// pinMode(ENCODER_CLK, INPUT_PULLUP);
// pinMode(ENCODER_DT, INPUT_PULLUP);
// attachInterrupt(digitalPinToInterrupt(ROTATE), readEncoder, FALLING);
// pinMode(ROTATE, );
}
void loop() {
int tmp = 0;
if(digitalRead(START_PR) == LOW){
// Serial.print("-START_PROGRAM_CONTROL-");
// if(analogRead(ROTATE) > 800) rotate_count++;
// Serial.println(rot);
delay(1000);
if(tmp == rot){
digitalWrite(EM_STOP, LOW);
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
Serial.println("EMERGENCY STOP!!!"); Serial.println(rot); Serial.println(tmp);
tmp = rot = 0;
// detect();
} else {
digitalWrite(EM_STOP, HIGH);
digitalWrite(LED_BUILTIN, LOW);
delay(100);
Serial.println("EMERGENCY START"); Serial.println(rot); Serial.println(tmp);
tmp = rot = 0;
// detect();
}
tmp = rot;
// Serial.print("Rotate: ");Serial.print(rotate_count);
// if(rotate){
// digitalWrite(LED_BUILTIN, HIGH);
// } else {
// digitalWrite(LED_BUILTIN, LOW);
// }
} else {
rot = 0;
tmp = 0;
}
// blink_button(ENCODER_BTN);
}
// функция-обработчик, которая вызывается во время прерывания
void detect() {
rot += 1;
}
// void blink_button(byte pinnew){
// if (digitalRead(pinnew) == LOW) {
// digitalWrite(LED_BUILTIN, HIGH);
// } else {
// digitalWrite(LED_BUILTIN, LOW);
// }
// }
// void readEncoder() {
// int dtValue = digitalRead(ROTATE);
// if (dtValue == HIGH) {
// int tmp = rotate_count++;
// rotate = false;
// Serial.print("Rotated ⏩ temp: "); Serial.print(tmp);
// Serial.print(" count: "); Serial.print(rotate_count);
// }
// }