#include <Wire.h>
#include "TM1637.h"// TM1637 библиотека
#include <AccelStepper.h>//M Подключаем библиотеку AccelStepper// мотор
const int CLK = 5;// TM1637 Определения контактов для TM1637 и могут быть изменены на другие порты
const int DIO = 4;// TM1637 Определения контактов для TM1637 и могут быть изменены на другие порты
TM1637 tm1637(CLK, DIO);// TM1637
#include "RTClib.h"// RTC 1307 часы
RTC_DS1307 rtc;// RTC 1307 часы
#define BUTTON11_PIN 11// кнопка 11
#define BUTTON10_PIN 10// кнопка 10
#define BUTTON9_PIN 9// кнопка 9
#define BUTTON8_PIN 8// кнопка 8
#define BUTTON7_PIN 7//
#define BUTTON6_PIN 6//
const int dirPin = 2;//M Устанавливаем выводы// мотор
const int stepPin = 3;//M Устанавливаем выводы// мотор
#define motorInterfaceType 1//M Определение тип интерфейса двигателя// мотор
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);//M Создаем экземпляр// мотор
#define RELAY_IN 12 // реле
int lastState = HIGH;// кнопка
int CH=1;// если СН=1 то часы показывают
int DA = 0; int ME = 0; int GO = 2024;int CHA = 12; int MI = 11; int SEC = 0;
int potpin = 0; // аналоговый выход для подключения потенциомера
int POT; // переменная для считывания с аналогово выхода
int SIN1=0;
int VSEKNOPKI=1;
void setup() {//_______________________________________________________________________________________________________________
pinMode(RELAY_IN, OUTPUT);// реле
pinMode(BUTTON11_PIN, INPUT_PULLUP);// кнопка 11
pinMode(BUTTON10_PIN, INPUT_PULLUP);// кнопка 10
pinMode(BUTTON9_PIN, INPUT_PULLUP);// кнопка 9
pinMode(BUTTON8_PIN, INPUT_PULLUP);// кнопка 8
pinMode(BUTTON7_PIN, INPUT_PULLUP);// кнопка 7
pinMode(BUTTON6_PIN, INPUT_PULLUP);//
tm1637.init();// TM1637 Инициализация модуля
tm1637.set(5);// TM1637 BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
//_________
POT = analogRead(potpin);// считывает значения потенциомера (value between 0 and 1023)
delay(500);
Serial.println(POT);
//__________
Serial.begin(57600);// RTC 1307 часы
#ifndef ESP8266 // RTC 1307 часы
while (!Serial); // RTC 1307 часы дождитесь подключения последовательного порта. Требуется для встроенного USB
#endif// RTC 1307 часы
if (! rtc.begin()) {// RTC 1307 часы
Serial.println("Couldn't find RTC");//Не удалось найти RTC RTC 1307 часы
Serial.flush();// RTC 1307 часы
while (1) delay(10);// RTC 1307 часы
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");//RTC не запущен, давайте установим время!
// Когда необходимо установить время на новом устройстве или после отключения питания,следующая строка устанавливает RTC на дату и время, когда был составлен этот эскиз
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// Эта строка задает RTC с явной датой и временем, например, для установки 21 января 2014 года в 3 часа ночи вы бы позвонили: rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
}//___________________________________________________________________________________________________________
void loop() {
//myStepper.run(); // мотор
// myStepper.setCurrentPosition (0); // Обнуляет текущую позицию до нуля
// myStepper.disableOutputs(); // Деактивация зарезервированных пинов и установка их в LOW. Снимает напряжение с обмоток двигателя, экономя энергию
// часы_____________________________________
DateTime now = rtc.now();
//TM1637 минуты
if (CH==1) {// цикл CH=1
if (now.minute()<10) { tm1637.display(3,(now.minute()));tm1637.display(2,0);}// TM1637 <10 Выводим минуты <10 + 0
if (now.minute()>=10) {
String s(now.minute(), DEC);// TM1637 >10 Разделяем 2 цифры минуты на 2 разные С2,С1
char c1 = s[0];// TM1637 >10 Разделяем 2 цифры минуты на 2 разные, С1 первая цифра
char c2 = s[1];// TM1637 >10 Разделяем 2 цифры минуты на 2 разные, С2 вторая цифра
tm1637.display(3,c2);// TM1637 >10 Выводим на экран С2 минуты
tm1637.display(2,c1);// TM1637 >10 Выводим на экран С1 минуты
//Serial.print(c1); Serial.print(c2);// потом удалить (информация)>10
}
//TM1637 часы
if (now.hour()<10) { tm1637.display(1,(now.hour()));tm1637.display(0,0);}// TM1637 <10 Выводим часы <10 + 0
if (now.hour()>=10) {
String s(now.hour(), DEC);// TM1637 >10 Разделяем 2 цифры часы на 2 разные С4,С3
char c3 = s[0];// TM1637 >10 Разделяем 2 цифры часы на 2 разные, С3 первая цифра
char c4 = s[1];// TM1637 >10 Разделяем 2 цифры часы на 2 разные, С4 вторая цифра
tm1637.display(1,c4);// TM1637 >10 Выводим на экран С4 часы
tm1637.display(0,c3);// TM1637 >10 Выводим на экран С3 часы
//Serial.print(c3); Serial.print(c4);// потом удалить (информация)>10
}
//TM1637 двоеточее
if (now.second() % 2 > 0) {tm1637.point(true); } else {tm1637.point(false);}// TM1637 определяем чётное/нечётное секунды,выводим двоеточее
}// цикл CH=1-
// часы_____________________________________
if (VSEKNOPKI==1){
int value11 = digitalRead((BUTTON11_PIN));// красная
if (value11 == LOW){ // красная
CHA=CHA+1;if (CHA>23){CHA=0;}// красная
//Serial.println(CHA);// красная
SEC=(now.second());//секунда// красная
MI=(now.minute());// минута// красная
//CHA=(now.hour());// час// красная
DA=(now.day());// день (дата)// красная
ME=(now.month());// месяц// красная
GO=(now.year());// год// красная
rtc.adjust(DateTime(GO, ME, DA, CHA, MI, SEC)); // красная
delay (200);// красная
}// красная
int value10 = digitalRead((BUTTON10_PIN));// черная
if (value10 == LOW){ // черная
CHA=CHA-1;if (CHA<0){CHA=23;}// черная
//Serial.println(CHA);// черная
SEC=(now.second());//секунда// черная
MI=(now.minute());// минута// черная
//CHA=(now.hour());// час// черная
DA=(now.day());// день (дата)// черная
ME=(now.month());// месяц// черная
GO=(now.year());// год// черная
rtc.adjust(DateTime(GO, ME, DA, CHA, MI, SEC)); // черная
delay (200);// черная
}// черная
int value9 = digitalRead((BUTTON9_PIN));// жёлтая
if (value9 == LOW){ // жёлтая
MI=MI+1;if (MI>59){MI=0;}// жёлтая
//Serial.println(MI);// жёлтая
SEC=(now.second());//секунда// жёлтая
//MI=(now.minute());// минута// жёлтая
CHA=(now.hour());// час// жёлтая
DA=(now.day());// день (дата)// жёлтая
ME=(now.month());// месяц// жёлтая
GO=(now.year());// год// жёлтая
rtc.adjust(DateTime(GO, ME, DA, CHA, MI, SEC)); // жёлтая
delay (200);// жёлтая
}// жёлтая
int value8 = digitalRead((BUTTON8_PIN));// зелёная
if (value8 == LOW){ // зелёная
MI=MI-1;if (MI<0){MI=59;}// зелёная
//Serial.println(MI);// зелёная
SEC=(now.second());//секунда// зелёная
//MI=(now.minute());// минута// зелёная
CHA=(now.hour());// час// зелёная
DA=(now.day());// день (дата)// зелёная
ME=(now.month());// месяц// зелёная
GO=(now.year());// год// зелёная
rtc.adjust(DateTime(GO, ME, DA, CHA, MI, SEC)); // зелёная
delay (200);// зелёная
}// зелёная
int value7 = digitalRead((BUTTON7_PIN));// синяя _____ПОТЕНЦИОМЕР___________
if (value7 == LOW){ // синяя
POT = analogRead(potpin);// считывает значения потенциомера (value between 0 and 1023)
//Serial.println(POT); // синяя
myStepper.setMaxSpeed(1000);//M Установка скорости оборотов в минуту синяя мотор
myStepper.setAcceleration(500);//M Установка ускорения синяя мотор
myStepper.setSpeed(1);//M Установка скорости в шагах за секунду синяя мотор
myStepper.moveTo(POT-POT-POT);//M Переместиться в абсолютно указанное положение синяя мотор
VSEKNOPKI=0;// закрыли доступ к нажатию кнопок
SIN1=1; // синяя кнопка нажата,ключ
delay (200);// синяя
}// синяя
int value6 = digitalRead((BUTTON6_PIN));// белая
if (value6 == LOW){ Serial.println(99999);} // белая
}
//Serial.println(POT);
//myStepper.run();
if (SIN1==1) {// запуск мотора от синей кнопки (тест)
digitalWrite(RELAY_IN, HIGH); // включили реле
//delay(200);// реле
myStepper.run(); // запуск мотора от синей кнопки
if (myStepper.distanceToGo()==0){
SIN1=0; VSEKNOPKI=1;// двигатель сделал дело,открываем доступ к кнопкам
myStepper.setCurrentPosition (0); // Обнуляет текущую позицию до нуля
myStepper.disableOutputs(); // Деактивация зарезервированных пинов и установка их в LOW. Снимает напряжение с обмоток двигателя, экономя энергию
digitalWrite(RELAY_IN, LOW);// выключили реле
}
//Serial.println(myStepper.distanceToGo());;
}
/// зимой 150-200 грам на курицу (летом 100)
if (now.hour()==7 && now.minute()==01 ) {Serial.println(701);}
if (now.hour()==10 && now.minute()==01 ) {Serial.println(1001);}
if (now.hour()==13 && now.minute()==01 ) {Serial.println(1301);}
if (now.hour()==18 && now.minute()==01 ) {Serial.println(1901);}
//if (value11 == HIGH){tm1637.display("P-3 "); delay (50);} //
//if (value11 == LOW) { CH=0;// красная Если нажата красная кнопка №11 (закрываем часы) меню...
//tm1637.point(false);// красная TM1637 отключаем двоеточие
//P0=P0+1;if (P0==4) {P0=0;}
//if (P0==3) {tm1637.display("P-3 "); delay (50);}// красная
//if (P0==2) {tm1637.display("P-2 "); delay (50);}// красная
//if (P0==1) {tm1637.display("P-1 "); delay (50);}// красная
//if (P0==0) {tm1637.display("P-0 "); delay (50);}// красная
//delay(300);// красная
//}// TUMBK- красная
//}// красная
//---------------------------------------------------------------------------------кнопка
//if (TUMB==1) {// красная
//if (TUMBK==1){
//int value11 = digitalRead((BUTTON11_PIN));// красная
//if (value11 == HIGH){XU=0;} красная
//if (value11 == LOW) { CH=0;// красная Если нажата красная кнопка №11 (закрываем часы) меню...
//tm1637.point(false);// красная TM1637 отключаем двоеточие
//P0=P0+1;if (P0==4) {P0=0;}
//if (P0==3) {tm1637.display("P-3 "); delay (50);}// красная
//if (P0==2) {tm1637.display("P-2 "); delay (50);}// красная
//if (P0==1) {tm1637.display("P-1 "); delay (50);}// красная
//if (P0==0) {tm1637.display("P-0 "); delay (50);}// красная
//delay(300);// красная
//}// TUMBK- красная
//}// красная
//int value10 = digitalRead((BUTTON10_PIN));// чёрная
//if (value10 == LOW) {// чёрная
//if (P0==0){MI=(now.minute());CHA=(now.hour());}// записали в переменную MI текущую минуту чёрная
//CH=1;// включили часы чёрная
//if (TUMBJ==0 && TUMBZ==0) {TUMBK=0;TUMBJ=1;TUMBZ=1;goto end;}
//if (TUMBJ==1 && TUMBZ==1) {TUMBK=1;TUMBJ=0;TUMBZ=0;
// tm1637.displayStr("oooo");
// delay(1000);tm1637.set(5);
// goto end;}
//end:
//delay(100);// чёрная
//} // чёрная
//if (TUMBJ==1) {
//if (P0==0){// нажали зелёную клавишу P=0 (настройка минут на часах) жёлтая
//if (now.second() % 2 > 0) {tm1637.set(1); } else {tm1637.set(5);}//------------------------
//int value9 = digitalRead((BUTTON9_PIN));// жёлтая
//if (value9 == LOW) {Serial.println("жёлтая");// жёлтая
//CH=1; //;жёлтая СH=1 значит запуск часов,CH=0 часы отключены жёлтая
//CHA=CHA+1;if (CHA>23){CHA=0;}// жёлтая
//Serial.println(CHA);// жёлтая
//SEC=(now.second());//секунда// жёлтая
//MI=(now.minute());// минута// жёлтая
//CHA=(now.hour());// час// жёлтая
//DA=(now.day());// день (дата)// жёлтая
//ME=(now.month());// месяц// жёлтая
//GO=(now.year());// год// жёлтая
//rtc.adjust(DateTime(GO, ME, DA, CHA, MI, SEC)); // жёлтая
//delay (100);
//}
//}
}