#define SGA 12
#define SGB 11
#define SGC 7
#define SGD 9
#define SGE 10
#define SGF 13
#define SGG 8
#define SDP 6
#define AN1 5
#define AN0 4
#define A 10
#define B 11
#define C 12
#define D 13
#define E 14
#define F 15
#define SPK 2
#define MINUS A4//кнопка -
#define PLUS A5//кнопка +
#define POT A0//потенциометр
#define MOSFET 3//mosfet IRL520A
#define START A3//but
int disp0;
int disp1;
int active = 0;
int counter = 0;
int pvt = 0;
int kn = 0;//счетчик длительности кнопки
int kn1 = 0;
int sec = 0;
int tempPOT = 0;
void setup() {
// put your setup code here, to run once:
pinMode(SGA, OUTPUT);
pinMode(SGB, OUTPUT);
pinMode(SGC, OUTPUT);
pinMode(SGD, OUTPUT);
pinMode(SGE, OUTPUT);
pinMode(SGF, OUTPUT);
pinMode(SGG, OUTPUT);
pinMode(SDP, OUTPUT);
pinMode(AN1, OUTPUT);
pinMode(AN0, OUTPUT);
//tone(SPK, 500, 250);
//delay(100);
//tone(SPK, 1000, 250);
//delay(100);
//tone(SPK, 2500, 250);
pinMode(MINUS, INPUT_PULLUP);
pinMode(PLUS, INPUT_PULLUP);
pinMode(MOSFET, OUTPUT);
pinMode(START, INPUT_PULLUP);
digitalWrite(MOSFET, LOW);
digitalWrite(START, HIGH);
//potenciometr4.7KOM
}
void off() {
digitalWrite(SGA, HIGH);
digitalWrite(SGB, HIGH);
digitalWrite(SGC, HIGH);
digitalWrite(SGD, HIGH);
digitalWrite(SGE, HIGH);
digitalWrite(SGF, HIGH);
digitalWrite(SGG, HIGH);
digitalWrite(SDP, HIGH);
}
void nible(int n) {
if(n == 0) {
digitalWrite(SGA, LOW);
digitalWrite(SGB, LOW);
digitalWrite(SGC, LOW);
digitalWrite(SGD, LOW);
digitalWrite(SGE, LOW);
digitalWrite(SGF, LOW);
digitalWrite(SGG, HIGH);
digitalWrite(SDP, HIGH);
}
if(n == 1) {
digitalWrite(SGA, HIGH);
digitalWrite(SGB, LOW);
digitalWrite(SGC, LOW);
digitalWrite(SGD, HIGH);
digitalWrite(SGE, HIGH);
digitalWrite(SGF, HIGH);
digitalWrite(SGG, HIGH);
digitalWrite(SDP, HIGH);
}
if(n == 2) {
digitalWrite(SGA, LOW);
digitalWrite(SGB, LOW);
digitalWrite(SGC, HIGH);
digitalWrite(SGD, LOW);
digitalWrite(SGE, LOW);
digitalWrite(SGF, HIGH);
digitalWrite(SGG, LOW);
digitalWrite(SDP, HIGH);
}
if(n == 3) {
digitalWrite(SGA, LOW);
digitalWrite(SGB, LOW);
digitalWrite(SGC, LOW);
digitalWrite(SGD, LOW);
digitalWrite(SGE, HIGH);
digitalWrite(SGF, HIGH);
digitalWrite(SGG, LOW);
digitalWrite(SDP, HIGH);
}
if(n == 4) {
digitalWrite(SGA, HIGH);
digitalWrite(SGB, LOW);
digitalWrite(SGC, LOW);
digitalWrite(SGD, HIGH);
digitalWrite(SGE, HIGH);
digitalWrite(SGF, LOW);
digitalWrite(SGG, LOW);
digitalWrite(SDP, HIGH);
}
if(n == 5) {
digitalWrite(SGA, LOW);
digitalWrite(SGB, HIGH);
digitalWrite(SGC, LOW);
digitalWrite(SGD, LOW);
digitalWrite(SGE, HIGH);
digitalWrite(SGF, LOW);
digitalWrite(SGG, LOW);
digitalWrite(SDP, HIGH);
}
if(n == 6) {
digitalWrite(SGA, LOW);
digitalWrite(SGB, HIGH);
digitalWrite(SGC, LOW);
digitalWrite(SGD, LOW);
digitalWrite(SGE, LOW);
digitalWrite(SGF, LOW);
digitalWrite(SGG, LOW);
digitalWrite(SDP, HIGH);
}
if(n == 7) {
digitalWrite(SGA, LOW);
digitalWrite(SGB, LOW);
digitalWrite(SGC, LOW);
digitalWrite(SGD, HIGH);
digitalWrite(SGE, HIGH);
digitalWrite(SGF, HIGH);
digitalWrite(SGG, HIGH);
digitalWrite(SDP, HIGH);
}
if(n == 8) {
digitalWrite(SGA, LOW);
digitalWrite(SGB, LOW);
digitalWrite(SGC, LOW);
digitalWrite(SGD, LOW);
digitalWrite(SGE, LOW);
digitalWrite(SGF, LOW);
digitalWrite(SGG, LOW);
digitalWrite(SDP, HIGH);
}
if(n == 9) {
digitalWrite(SGA, LOW);
digitalWrite(SGB, LOW);
digitalWrite(SGC, LOW);
digitalWrite(SGD, HIGH);
digitalWrite(SGE, HIGH);
digitalWrite(SGF, LOW);
digitalWrite(SGG, LOW);
digitalWrite(SDP, HIGH);
}
if(n == A) {
digitalWrite(SGA, LOW);
digitalWrite(SGB, LOW);
digitalWrite(SGC, LOW);
digitalWrite(SGD, HIGH);
digitalWrite(SGE, LOW);
digitalWrite(SGF, LOW);
digitalWrite(SGG, LOW);
digitalWrite(SDP, HIGH);
}
if(n == B) {
digitalWrite(SGA, HIGH);
digitalWrite(SGB, HIGH);
digitalWrite(SGC, LOW);
digitalWrite(SGD, LOW);
digitalWrite(SGE, LOW);
digitalWrite(SGF, LOW);
digitalWrite(SGG, LOW);
digitalWrite(SDP, HIGH);
}
if(n == C) {
digitalWrite(SGA, LOW);
digitalWrite(SGB, HIGH);
digitalWrite(SGC, HIGH);
digitalWrite(SGD, LOW);
digitalWrite(SGE, LOW);
digitalWrite(SGF, LOW);
digitalWrite(SGG, HIGH);
digitalWrite(SDP, HIGH);
}
if(n == D) {
digitalWrite(SGA, HIGH);
digitalWrite(SGB, LOW);
digitalWrite(SGC, LOW);
digitalWrite(SGD, LOW);
digitalWrite(SGE, LOW);
digitalWrite(SGF, HIGH);
digitalWrite(SGG, LOW);
digitalWrite(SDP, HIGH);
}
if(n == E) {
digitalWrite(SGA, LOW);
digitalWrite(SGB, HIGH);
digitalWrite(SGC, HIGH);
digitalWrite(SGD, LOW);
digitalWrite(SGE, LOW);
digitalWrite(SGF, LOW);
digitalWrite(SGG, LOW);
digitalWrite(SDP, HIGH);
}
if(n == F) {
digitalWrite(SGA, LOW);
digitalWrite(SGB, HIGH);
digitalWrite(SGC, HIGH);
digitalWrite(SGD, HIGH);
digitalWrite(SGE, LOW);
digitalWrite(SGF, LOW);
digitalWrite(SGG, LOW);
digitalWrite(SDP, HIGH);
}
if(n == 17) {
digitalWrite(SGA, HIGH);
digitalWrite(SGB, HIGH);
digitalWrite(SGC, HIGH);
digitalWrite(SGD, HIGH);
digitalWrite(SGE, HIGH);
digitalWrite(SGF, HIGH);
digitalWrite(SGG, LOW);
digitalWrite(SDP, HIGH);
}
}
void decimal(int n){
if(n>99){
disp0 = 17;
disp1 = 17;
} else {
disp1 = (int) (n/10);
disp0 = n % 10;
}
}
void loop() {
// put your main code here, to run repeatedly:
//int arr[] = {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F};
//int sec = millis() / 250;
if(counter == 0) {
decimal(110);//если счетчик 0 прочерки
} else {
decimal(counter);//если нет вывести счетчик
}
if(analogRead(POT) / 10 != tempPOT && counter >= 0 && counter<100 && active == 0){
sec = analogRead(POT) / 10;
counter = sec;
tempPOT = sec;
pvt = 0;
}
//переход в рабочий режим
if(digitalRead(START) == LOW){
// if(counter > 50){
active = 1;
digitalWrite(MOSFET, HIGH);//включаем нагрузку
//tone(SPK,1500,50);
delay(100);
//tone(SPK,1500,50);
delay(100);
//tone(SPK,1500,50);
delay(100);
}
//опрос клавишь
if(digitalRead(PLUS) == LOW){
kn++;
if(kn > 2 && counter < 99) {
counter++;
//tone(SPK,3000,75);
//digitalWrite(MOSFET, HIGH);
kn = -2;
//while(digitalRead(PLUS)==LOW) delay(50);
}
}else{
kn=0;
}
if(digitalRead(MINUS) == LOW) {
kn1++;
if(kn1 > 2 && counter > 0){
counter--;
//tone(SPK,3000,75);
//digitalWrite(MOSFET, LOW);
kn1 = -2;
//while(digitalRead(MINUS)==LOW) delay(50);
kn1 = 0;
if(millis() - pvt >= 1000){
counter--;
pvt = millis();
}
pvt = 0;
}
}else {
kn1=0;
}
//обратный отсчет
if(active) {
//уменьшение счетчика раз в секунду
if(millis() - pvt >= 1000){
counter--;
pvt = millis();
//звуковой сигнал последние 10 сек
//if(counter < 11 && counter > 0) tone(SPK,1000+counter*50,50);
}
if(counter == 0){
active = 0;//счетчик достиг нуля, отключаем
digitalWrite(MOSFET, LOW);//отключаем нагрузку
counter = 0;
pvt = 0;
//tone(SPK,250,1000);
}
}
//decimal(sec);
digitalWrite(AN0, LOW);
digitalWrite(AN1, LOW);
nible(disp1);
digitalWrite(AN0, LOW);
digitalWrite(AN1, HIGH);
delay(50);
digitalWrite(AN0, LOW);
digitalWrite(AN1, LOW);
nible(disp0);
digitalWrite(AN0, HIGH);
digitalWrite(AN1, LOW);
delay(50);
}