#define BTN_PIN 3 // кнопка подключена сюда (BTN_PIN --- КНОПКА --- GND)
#define BTN_PIN1 2 // кнопка подключена сюда (BTN_PIN --- КНОПКА --- GND)
#include "GyverButton.h"
GButton butt1(BTN_PIN);
GButton butt2(BTN_PIN1);
//int value = 0;
#include "GyverStepper2.h"
GStepper2< STEPPER4WIRE> stepper(2048, 8, 6, 9, 5);
bool dir = 1;
bool fan = false;
bool flag = false;
bool rel1 = false;
bool rel2 = false;
bool led1 = false;
bool led2 = false;
bool digivent = false;
int dec_digits [10] {1,79,18,6,76,36,32,15,0,4};
unsigned char binary_pattern[] = {
0b11111111, //0 "off"
0b11111010, //1
0b11111110, //2 "-"
0b00111110, //3 "="^
0b10011100, //4
0b00011010, //5--
0b11111100, //6--
0b01111010, //7--
0b10011110, //8--
0b11011110, //9==
0b10001110, //10 --
0b11001100, //11 4
10111110, //12 "3"
0b11110110, //13 "="_
0b01101110, //14 --
0b00101110, //15 --
0b00001100, //16 "0"
0b10001000, //17 "A"
0b01111000, //18 "|-"
0b10101110, //19 " "
0b00011100, //20 "*"
0b10101000, //21 --
0b00101010, //22-
0b11111110, //23 "-"
0b11001110, //24 --
0b11100110, //25 --
0b00001010, //26 --
0b10110110, //27 --
0b10001100, //28 9
0b01111100, //29 --
0b00111000, //30 "F"
0b01010110, //31 --
0b01100110, //32 --
0b11011010, //33 --
01101110, //34 "H"
};
uint32_t tmr;
//Pin connected to ST_CP of 74HC595
int STCP_pin = 4;
//Pin connected to SH_CP of 74HC595
int SHCP_pin = 12;
//Pin connected to DS of 74HC595
int DS_pin = 13;
//------------------------------------
void digit_H(){
digitalWrite(STCP_pin,LOW);
shiftOut(DS_pin, SHCP_pin, LSBFIRST,binary_pattern[34]);
digitalWrite(STCP_pin, HIGH);
}
void digitoff(){
digitalWrite(7, LOW);
}
void digit0(){
digitalWrite(7, HIGH);
digitalWrite(STCP_pin,LOW);
shiftOut(DS_pin, SHCP_pin, LSBFIRST,dec_digits[0]);
digitalWrite(STCP_pin, HIGH);
}
void digit1(){
digitalWrite(7, HIGH);
digitalWrite(STCP_pin,LOW);
shiftOut(DS_pin, SHCP_pin, LSBFIRST,dec_digits[1]);
digitalWrite(STCP_pin, HIGH);
}
void digit2(){
digitalWrite(7, HIGH);
digitalWrite(STCP_pin,LOW);
shiftOut(DS_pin, SHCP_pin, LSBFIRST,dec_digits[2]);
digitalWrite(STCP_pin, HIGH);
}
void digit3(){
digitalWrite(7, HIGH);
digitalWrite(STCP_pin,LOW);
shiftOut(DS_pin, SHCP_pin, LSBFIRST,dec_digits[3]);
digitalWrite(STCP_pin, HIGH);
}
void digit4(){
digitalWrite(7, HIGH);
digitalWrite(STCP_pin,LOW);
shiftOut(DS_pin, SHCP_pin, LSBFIRST,dec_digits[4]);
digitalWrite(STCP_pin, HIGH);
}
//------------------------------------
void setup() {
Serial.begin(9600);
Serial.setTimeout(50);
stepper.setMaxSpeed(50); // скорость движения к цели
stepper.setAcceleration(50); // ускорение
//stepper.setTarget(50); // цель
attachInterrupt(1, isr, CHANGE);
attachInterrupt(0, isr, CHANGE);
butt1.setDebounce(40); // настройка антидребезга (по умолчанию 80 мс)
butt1.setTimeout(500); // настройка таймаута на удержание (по умолчанию 500 мс)
butt2.setDebounce(40); // настройка антидребезга (по умолчанию 80 мс)
butt2.setTimeout(500); // настройка таймаута на удержание (по умолчанию 500 мс)
pinMode(5, OUTPUT);
pinMode(6, OUTPUT); // D6 как выход
pinMode(7,OUTPUT); // D7 как выход MR
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(A1, OUTPUT); // A1 как выход (Nano/UNO)
pinMode(A2, OUTPUT); // A2 как выход
pinMode(A3, OUTPUT); // A3 как выход
pinMode(A4, OUTPUT); // A4 как выход
pinMode(A5, OUTPUT); // A5 как выход
// set the 74HC595 Control pin as output
pinMode(DS_pin, OUTPUT);
pinMode(STCP_pin, OUTPUT);
pinMode(SHCP_pin, OUTPUT);
digitalWrite(A2, LOW); // nizkiy сигнал на rele1
digitalWrite(A4, LOW); // nizkiy сигнал на rele2
digitalWrite(7, LOW);
}
void isr() {
butt1.tick(); // опрашиваем в прерывании, чтобы поймать нажатие в любом случае
butt2.tick(); // опрашиваем в прерывании, чтобы поймать нажатие в любом случае
}
void loop() {
stepper.tick(); // мотор асинхронно крутится тут
butt1.tick(); // опрашиваем в скетче, иначе не будут работать проверки по времени!
butt2.tick(); // опрашиваем в скетче, иначе не будут работать проверки по времени!
//----------------------------------
if (Serial.available()) {
int val = Serial.parseInt();
switch (val){
case 1: //Ventilator i 1ten
digit1();
rel1 = true;
rel2 = false;
flag = false;
stepper.setTarget(50);
Serial.println(val);
break;
case 2: //Ventilator i 2tena
digit2();
rel1 = true;
rel2 = true;
flag = false;
stepper.setTarget(50);
Serial.println(val);
break;
case 3: //Ventilator oba tena i swing
stepper.setTarget(50);
digit3();
rel1 = true;
rel2 = true;
flag = true;
Serial.println(val);
break;
case 4: // задача 4
digit4();
Serial.println(val);
break;
case 5: // задача 5
//digit5();
Serial.println(val);
break;
case 6: // Otkluchenie vsego
//digitalWrite(7, LOW);
digitoff();
rel1 = false;
rel2 = false;
stepper.setTarget(0);
flag = false;
Serial.println("OFF");
break;
}
}
//--------------------------------------
if (butt1.hasClicks()) {
switch (butt1.getClicks()) {
case 0: // задача 0
break;
case 1: //Ventilator i 1ten
digit1();
rel1 = true;
rel2 = false;
flag = false;
stepper.setTarget(50);
Serial.println(butt1.getClicks()); // вывести число нажатий
break;
case 2: //Ventilator i 2tena
digit2();
rel1 = true;
rel2 = true;
flag = false;
stepper.setTarget(50);
Serial.println(butt1.getClicks()); // вывести число нажатий
break;
case 3: // задача 3
stepper.setTarget(50);
digit3();
rel1 = true;
rel2 = true;
flag = true;
Serial.println(butt1.getClicks()); // и вывести число нажатий
break;
case 4: // задача OFF
digitoff();
rel1 = false;
rel2 = false;
stepper.setTarget(0);
flag = false;
Serial.println(butt1.getClicks()); // вывести число нажатий
break;
}
}
//---------------------------------------
//----------------------------------
if (butt1.isHolded()) {
digitoff();
rel1 = false;
rel2 = false;
stepper.setTarget(0);
flag = false;
Serial.println("OFF"); // проверка на удержание
}
if (butt2.isHolded()) {
rel1 = false;
rel2 = false;
stepper.setTarget(0);
flag = false;
Serial.println("Holded"); // проверка на удержание
digitoff();
}
if (rel1){
digitalWrite(A1, HIGH); // высокий сигнал на TEN_1
digitalWrite(A2, HIGH); // высокий сигнал на Led_1
}
if (rel2){
digitalWrite(A3, HIGH); // высокий сигнал на TEN_2
digitalWrite(A4, HIGH); // высокий сигнал на Led_2
}
if (flag){ //zapusk kachanija zaslonki
if (stepper.ready()) { // если приехали
dir = !dir; // разворачиваем
stepper.setTarget(dir * 40); // едем в другую сторону
}
}
if (!rel1){
digitalWrite(A1, LOW); // LOW сигнал на D6
digitalWrite(A2, LOW); // LOW сигнал на D10
}
if (!rel2){
digitalWrite(A3, LOW); // LOW сигнал на D7
digitalWrite(A4, LOW); // LOW сигнал на D11
}
/*
//-----------------------асинхронный вывод в порт
static uint32_t tmr;
if (millis() - tmr >= 30) {
tmr = millis();
Serial.println(stepper.pos);
}
*/
//----------------------------
/*
if (digivent){
int vals[] = { // digivent animation
0b01111110, //0 "="^
0b11110110, //1 "="_
0b11111110
};
for (int i=0;i<3;i++) {
int dat = vals[i];
if (millis() - tmr >= 200) {
digitalWrite(STCP_pin,LOW);
shiftOut(DS_pin, SHCP_pin, LSBFIRST,dat);
digitalWrite(STCP_pin, HIGH);
tmr = millis();
}
}
}
*/
//--------------------------------------------
//if (butt1.isHold()) Serial.println("Hold"); // возвращает состояние кнопки
//if (butt1.isClick()) //Serial.println("Click"); // проверка на один клик
//if (butt1.isSingle()) Serial.println("Single"); // проверка на один клик
//if (butt1.isDouble()) Serial.println("Double"); // проверка на двойной клик
//if (butt1.isTriple()) Serial.println("Triple"); // проверка на тройной клик
//if (butt1.isPress()) Serial.println("Press"); // нажатие на кнопку (+ дебаунс)
//if (butt1.isRelease()) Serial.println("Release"); // отпускание кнопки (+ дебаунс)
//--------------------------------
}