#define CLK 2 #define DIO 3 #define RELEY_PIN 10 #include "GyverTM1637.h" const int DISP_PIN = A1; int val = 0; int timer = 1; bool relayOpened = false; GyverTM1637 disp(CLK, DIO); void setup() { // put your setup code here, to run once: pinMode(RELEY_PIN, OUTPUT); closeRelay(); Serial.begin(9600); disp.clear(); disp.brightness(0); } void loop() { // put your main code here, to run repeatedly: val = analogRead(DISP_PIN); switch (buttonFromValue(val)) { case 1: addTimer(); break; case 2: declineTimer(); break; case 3: shoot(); break; case 4: workingLight(); break; } disp.displayInt(timer); } //Открывается по низкому сигналу, com с NO void openRelay() { digitalWrite(RELEY_PIN, LOW); relayOpened = true; } //Закрываясь замыкает com с NC void closeRelay(){ digitalWrite(RELEY_PIN, HIGH); relayOpened = false; } void addTimer() { delay(500); if (buttonFromValue(analogRead(DISP_PIN)) == 1) { timer = timer * 2; } else { timer++; } } void declineTimer() { if(timer > 1) { delay(500); if (buttonFromValue(analogRead(DISP_PIN)) == 2) { timer = timer / 2; } else if (timer>1) { timer--; } } } void shoot() { closeRelay(); int ms = timer * 1000; delay(1000); openRelay(); while (ms>0) { delay(1000); ms = ms - 1000; disp.displayInt(ms/1000); } closeRelay(); } void workingLight() { if ( relayOpened == true ) { closeRelay(); } else { openRelay(); } delay(500); } byte buttonFromValue(int analogValue) { if (analogValue>950) { return 4; } if (analogValue > 713 && analogValue < 950) { return 3; } if (analogValue > 506 && analogValue < 713) { return 2; } if (analogValue > 200 && analogValue < 506) { return 1; } return 0; }