Всем доброго времени суток!
Имеется вот такой код и НАНОдуня, дуня управляет клапанами воды и отбором , а так же реле тэнов....всю голову сломал, то-ли я дурак то-ли одно из двух)) категорический отказывается работать библиотека GyverButton, всё компилируется без ошибок, всё заливается в дуню, обычные кнопки без библиотеки работают норм, библиотечные "нивкакую"((( работа с библиотекой лежит в процедуре WorkButt
куда копать?
Имеется вот такой код и НАНОдуня, дуня управляет клапанами воды и отбором , а так же реле тэнов....всю голову сломал, то-ли я дурак то-ли одно из двух)) категорический отказывается работать библиотека GyverButton, всё компилируется без ошибок, всё заливается в дуню, обычные кнопки без библиотеки работают норм, библиотечные "нивкакую"((( работа с библиотекой лежит в процедуре WorkButt
alcoholV2:
//подлючение нужных библиотек
#include <Time.h>
#include "RTClib.h"
#include <Wire.h>
#include <OneWire.h>
#include <LiquidCrystal_I2C.h>
#include <DallasTemperature.h>
#include <GyverTimer.h>
#include <GyverButton.h>
//подключение и объявление адреса дисплея
LiquidCrystal_I2C lcd(0x3F, 16, 2);
//назначение портов
#define KNOPKA_RESUME A0 // кнопка продолжения прораммы и сброса таймеров подключена на 2 пин (BTN_PIN --- КНОПКА --- GND)
#define TEN_1 3 //Тэн 1квт подключен на 3 пин
#define TEN_12 4 //Тэн 1,2квт подключен на 4 пин
#define TEN_2 5 //Тэн 2квт подключен на 5 пин
#define KRAN_GL 6 //Кран "голов" подключен на 6 пин
#define KRAN_HV 7 //Кран "хвостов" подключен на 7 пин
#define KRAN_VD 8 //Кран "воды" подключен на 8 пин
#define BEEPER 9 //Пьезо динамик подключен на 9 пин
#define UROVEN 10 //Датчик уровня воды подключен на 10
#define ONE_WIRE_BUS 11 // Датчик температуры подключен на 11 пин
#define BEEPER_RELE 12 // Реле бипера
#define DEBOUNCE 100
#define KNOPKA_STAGE 2 // кнопка выбора стадии (BTN_PIN --- КНОПКА --- GND)
#define KNOPKA_STOP A1 // кнопка СТОП (BTN_PIN --- КНОПКА --- GND)
//объявление переменных таймеров
GTimer Timer5(MS);
GTimer Timer60(MS);
GTimer Timer90(MS);
GButton buttstage(KNOPKA_STAGE);
GButton buttstop(KNOPKA_STOP);
//подключение часов реального времени (в будующих версиях)
RTC_DS1307 rtc;
//объявление переменных используемых в программе
boolean TEN_1Flag, TEN_12Flag, TEN_2Flag, KRAN_GLFlag, KRAN_HVFlag, KRAN_VDFlag, beeperFlag, workoffFlag, urovenFlag;
boolean KNOPKA_RESUMEState, KNOPKA_RESUMEFlag;
boolean Stage1Flag, Stage2Flag, Stage3Flag;
unsigned long debounceTimer;
int temp1;
int temp2;
int tempoffall;
int currenttemp;
long interval = 1000;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensor(&oneWire);
//Загрузка основной части программы, установка начальных параметров
void setup() {
sensor.begin();
sensor.setResolution(12);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensor(&oneWire);
Serial.begin(9600);
pinMode(KNOPKA_RESUME, INPUT_PULLUP);
pinMode(UROVEN, INPUT_PULLUP);
pinMode(TEN_1, OUTPUT);
pinMode(TEN_12, OUTPUT);
pinMode(TEN_2, OUTPUT);
pinMode(KRAN_GL, OUTPUT);
pinMode(KRAN_HV, OUTPUT);
pinMode(KRAN_VD, OUTPUT);
pinMode(BEEPER, OUTPUT);
pinMode(BEEPER_RELE, OUTPUT);
digitalWrite(KRAN_GL, HIGH);
digitalWrite(KRAN_HV, HIGH);
digitalWrite(KRAN_VD, HIGH);
digitalWrite(TEN_1, HIGH);
digitalWrite(TEN_12, HIGH);
digitalWrite(TEN_2, HIGH);
digitalWrite(BEEPER_RELE, HIGH);
lcd.init();
lcd.backlight();
// первонаяальная установка флагов и переменных
temp1 = 65;
temp2 = 93;
tempoffall = 97;
TEN_1Flag = false;
TEN_12Flag = false;
TEN_2Flag = false;
workoffFlag = false;
KRAN_GLFlag = false;
KRAN_HVFlag = false;
KRAN_VDFlag = false;
beeperFlag = false;
urovenFlag = false;
Stage1Flag = false;
Stage2Flag = false;
Stage3Flag = false;
}
//Работа основного кода программы
void loop() {
serialprint();
ekran ();
workTen ();
workKran ();
workBeep ();
//workFlagsTemp (); отключено в данной версии
workTemp ();
Stage1 ();
Stage2 ();
Stage3 ();
Alarm ();
WorkButt ();
}
//Процедура работы разгона колонны
void Stage1 () {
if (Stage1Flag == true)
{
TEN_2Flag = true;
}
if (Stage1Flag == true && currenttemp >= 65 && TEN_2Flag == true)
{
TEN_2Flag = false;
TEN_1Flag = true;
KRAN_VDFlag = true;
Timer60.setTimeout(3600000);
}
if (Stage1Flag == true && TEN_1Flag == true && KRAN_VDFlag == true && Timer60.isReady() == true)
{
beeperFlag = true;
Timer5.setTimeout(300000);
}
if (Stage1Flag == true && TEN_1Flag == true && KRAN_VDFlag == true && Timer5.isReady() == false && beeperFlag == true && KNOPKA_RESUMEFlag == true)
{
Stage1Flag = false;
Stage2Flag = true;
Stage3Flag = false;
}
if (Stage1Flag == true && TEN_1Flag == true && KRAN_VDFlag == true && Timer5.isReady() == true && beeperFlag == true)
{
workoffFlag = true;
}
}
//Процедура работы отбора голов и тела
void Stage2 () {
if (Stage2Flag == true)
{
KRAN_GLFlag = true;
Timer90.setTimeout(5400000);
}
if (Stage2Flag == true && KRAN_GLFlag == true && Timer90.isReady() == true && TEN_1Flag == true)
{
TEN_1Flag = false;
TEN_12Flag = true;
Timer5.setTimeout(300000);
beeperFlag = true;
}
if (Stage2Flag == true && TEN_12Flag == true && KRAN_VDFlag == true && Timer5.isReady() == false && beeperFlag == true && KNOPKA_RESUMEFlag == true)
{
Stage1Flag = false;
Stage2Flag = false;
Stage3Flag = true;
}
if (Stage2Flag == true && TEN_12Flag == true && KRAN_VDFlag == true && Timer5.isReady() == true && beeperFlag == true)
{
workoffFlag = true;
}
}
//Процедура работы отбора хвостов и отключения системы
void Stage3 () {
if (Stage3Flag == true && currenttemp >= temp2 && currenttemp < tempoffall)
{
KRAN_GLFlag = false;
KRAN_HVFlag = true;
}
if (Stage3Flag == true && currenttemp >= temp2 && currenttemp > tempoffall)
{
TEN_12Flag = false;
Timer5.setTimeout(300000);
}
if (Stage3Flag == true && TEN_12Flag == false && KRAN_VDFlag == true && Timer5.isReady() == true)
{
KRAN_VDFlag = false;
workoffFlag = true;
}
}
//Процедура работы тенов в зависимости от флагов
void workTen () {
if (TEN_1Flag == true)
{
digitalWrite (TEN_1, LOW);
}
else
{
digitalWrite (TEN_1, HIGH);
}
if (TEN_12Flag == true)
{
digitalWrite (TEN_12, LOW);
}
else
{
digitalWrite (TEN_12, HIGH);
}
if (TEN_2Flag == true)
{
digitalWrite (TEN_2, LOW);
}
else
{
digitalWrite (TEN_2, HIGH);
}
if (workoffFlag == true)
{
digitalWrite (TEN_1, HIGH);
digitalWrite (TEN_12, HIGH);
digitalWrite (TEN_2, HIGH);
}
}
//Процедура работы кранов в зависимости от флагов
void workKran () {
if (KRAN_GLFlag == true)
{
digitalWrite (KRAN_GL, LOW);
}
else
{
digitalWrite (KRAN_GL, HIGH);
}
if (KRAN_HVFlag == true)
{
digitalWrite (KRAN_HV, LOW);
}
else
{
digitalWrite (KRAN_HV, HIGH);
}
if (KRAN_VDFlag == true)
{
digitalWrite (KRAN_VD, LOW);
}
else
{
digitalWrite (KRAN_VD, HIGH);
}
if (workoffFlag == true)
{
digitalWrite (KRAN_GL, HIGH);
digitalWrite (KRAN_HV, HIGH);
digitalWrite (KRAN_VD, HIGH);
}
}
//Процедура работы Бипера
void workBeep () {
if (beeperFlag == true) {
tone(BEEPER, 1000);
}
else {
noTone(BEEPER);
}
if (urovenFlag == true) {
tone(BEEPER, 1000);
}
else {
noTone(BEEPER);
}
KNOPKA_RESUMEState = !digitalRead(KNOPKA_RESUME); // читаем состояние кнопки с инверсией. 1 - нажата, 0 - нет // если нажата и была отпущена (KNOPKA_RESUMEFlag 0) и прошло не менее DEBOUNCE времени
if (KNOPKA_RESUMEState && !KNOPKA_RESUMEFlag && (millis() - debounceTimer > DEBOUNCE)) {
KNOPKA_RESUMEFlag = true; // запомнили что нажата
debounceTimer = millis(); // запомнили время нажатия
}
if (!KNOPKA_RESUMEState && KNOPKA_RESUMEFlag) { // если отпущена и была нажата (KNOPKA_RESUMEFlag 1)
KNOPKA_RESUMEFlag = false; // запомнили что отпущена
debounceTimer = millis(); // запомнили время отпускания
}
if (KNOPKA_RESUMEFlag == true) {
beeperFlag = false;
urovenFlag = false;
}
}
//Процедура работы экрана
void ekran () {
// Print a message to the LCD.
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("C:");
lcd.setCursor(2, 0);
lcd.print(currenttemp);
lcd.setCursor(5, 0);
lcd.print("T1:");
lcd.setCursor(8, 0);
lcd.print(TEN_1Flag);
lcd.setCursor(10, 0);
lcd.print("T2:");
lcd.setCursor(13, 0);
lcd.print(TEN_12Flag);
lcd.setCursor(0, 1);
lcd.print("K1:");
lcd.setCursor(3, 1);
lcd.print(KRAN_GLFlag);
lcd.setCursor(5, 1);
lcd.print("K2:");
lcd.setCursor(8, 1);
lcd.print(KRAN_HVFlag);
lcd.setCursor(10, 1);
lcd.print("OFF:");
lcd.setCursor(14, 1);
lcd.print(workoffFlag);
}
//Процедура работы датчика температуры
void workTemp () {
// переменная для хранения температуры
float temperature;
// отправляем запрос на измерение температуры
sensor.requestTemperatures();
// считываем данные из регистра датчика
temperature = sensor.getTempCByIndex(0);
// выводим температуру в Serial-порт
Serial.print("Temp C: ");
Serial.println(temperature);
currenttemp = temperature;
}
//Процедура работы сериалпорта
void serialprint () {
Serial.print("t1: ");
Serial.println(TEN_1Flag);
Serial.print("t1_2: ");
Serial.println(TEN_12Flag);
Serial.print("t2: ");
Serial.println(TEN_2Flag);
Serial.print("KRAN_GL: ");
Serial.println(KRAN_GLFlag);
Serial.print("KRAN_HV: ");
Serial.println(KRAN_HVFlag);
Serial.print("KRAN_VD: ");
Serial.println(KRAN_VDFlag);
Serial.print("Off: ");
Serial.println(workoffFlag);
Serial.print("Stage1: ");
Serial.println(Stage1Flag);
Serial.print("Stage2: ");
Serial.println(Stage2Flag);
Serial.print("Stage3: ");
Serial.println(Stage3Flag);
Serial.print("beeper: ");
Serial.println(beeperFlag);
Serial.print("Uroven: ");
Serial.println(urovenFlag);
Serial.print("Knopka resume: ");
Serial.println(KNOPKA_RESUMEFlag);
}
//Процедура защиты системы
void Alarm () {
if (currenttemp >= 99)
{
beeperFlag = true;
}
if (digitalRead(UROVEN)) {
urovenFlag = true;
}
else
{
urovenFlag = false;
}
if (beeperFlag == true)
{
digitalWrite (BEEPER_RELE, LOW);
}
else
{
digitalWrite (BEEPER_RELE, HIGH);
}
if (workoffFlag == true)
{
Stage1Flag = false;
Stage2Flag = false;
Stage3Flag = false;
}
}
void WorkButt () {
buttstage.tick();
if (buttstage.isSingle()) {
Stage1Flag = true; // проверка на один клик и запуск стадии 1
Serial.println("Single");
}
if (buttstage.isDouble()) {
Stage2Flag = true; // проверка на двойной клик и запуск стадии 2
}
if (buttstage.isTriple()) {
Stage3Flag = true; // проверка на тройной клик и запуск стадии 3
}
buttstop.tick();
if (buttstop.isSingle()) {
workoffFlag = true; // проверка на один клик и остановка всего
}
}
куда копать?