#include <Wire.h> // Подключаем библиотеку Wire
#include <Adafruit_INA219.h> // Подключаем библиотеку Adafruit_INA219
#define BTN_PIN 6 // кнопка подключена сюда (BTN_PIN --- КНОПКА --- GND)
#include "GyverButton.h"
GButton butt1(BTN_PIN);
Adafruit_INA219 ina219; // Создаем объект ina219
#define rele1 2
#define rele2 3
#define rele3 4
#define rele4 5
#define led 13
// bool kn = 0;
unsigned long zaderjka = 0;
float filtVal = 0;
void setup()
{
Serial.begin(115200);
butt1.setType(HIGH_PULL);
butt1.setDirection(NORM_OPEN);
uint32_t currentFrequency; // Создаем переменную
// По умолчанию при инициализации будет использоваться самый большой диапазон (32 В, 2 А)
// Проверка инициализации модуля INA219
pinMode(rele1, OUTPUT);
digitalWrite(rele1, LOW);
pinMode(rele2, OUTPUT);
digitalWrite(rele2, LOW);
pinMode(rele3, OUTPUT);
digitalWrite(rele3, LOW);
pinMode(rele4, OUTPUT);
digitalWrite(rele4, LOW);
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
if (ina219.begin()) {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
}
// Чтобы использовать немного более низкий диапазон 32 В, 1 А (более высокая точность на усилителях):
// ina219.setCalibration_32V_1A ();
// Или использовать более низкий диапазон 16 В, 400 мА (более высокая точность на вольт и ампер):
// ina219.setCalibration_16V_400mA ();
// Serial.println("Measuring voltage and current with INA219 ..."); // Отправка сообщение
}
void loop()
{
butt1.tick();
// float shuntvoltage = 0; // Создаем переменную shuntvoltage
// float busvoltage = 0; // Создаем переменную busvoltage
float current_mA = 0; // Создаем переменную current_mA
// float loadvoltage = 0; // Создаем переменную loadvoltage
// float power_mW = 0; // Создаем переменную power_mW
// shuntvoltage = ina219.getShuntVoltage_mV(); // Получение напряжение на шунте
// busvoltage = ina219.getBusVoltage_V(); // Получение значение напряжения V
current_mA = ina219.getCurrent_mA(); // Получение значение тока в мА
filtVal += (current_mA - filtVal) * 0.1;
// power_mW = ina219.getPower_mW(); // Получение значение мощности
// loadvoltage = busvoltage + (shuntvoltage / 1000); // Расчет напряжение на нагрузки
// Поочередно отправляем полученные значение в последовательный порт.
// Serial.print("Bus Voltage: "); Serial.print(busvoltage); Serial.println(" V");
// Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
// Serial.print("Load Voltage: "); Serial.print(loadvoltage); Serial.println(" V");
Serial.print("Current: "); Serial.print(current_mA); Serial.print(" mA ");
Serial.print("filtVal: "); Serial.print(filtVal); Serial.println(" mA");
// Serial.print("Power: "); Serial.print(power_mW); Serial.println(" mW");
// Serial.println("");
// current_mA = 0;
if (butt1.state() == HIGH || filtVal >= 10) {
// kn = 1;
digitalWrite(led, HIGH);
digitalWrite(rele1, HIGH);
digitalWrite(rele2, HIGH);
digitalWrite(rele3, HIGH);
digitalWrite(rele4, HIGH);
zaderjka = millis();
}
else if ((butt1.state() == LOW || filtVal < 10) && millis() - zaderjka >= 300) {
// kn = 0;
digitalWrite(led, LOW);
digitalWrite(rele1, LOW);
digitalWrite(rele2, LOW);
digitalWrite(rele3, LOW);
digitalWrite(rele4, LOW);
}
// if (butt1.state() == HIGH)
// current_mA = 100;
// else
// current_mA = 0;
// if (current_mA >= 10) {
// // kn = 1;
// digitalWrite(led, HIGH);
// digitalWrite(rele, HIGH);
// zaderjka = millis();
// }
// else if (current_mA < 10 && millis() - zaderjka >= 300) {
// // kn = 0;
// digitalWrite(led, LOW);
// digitalWrite(rele, LOW);
// }
// Serial.print(zaderjka - millis()); Serial.print(" "); Serial.println(zaderjka - millis() >= 2000);
}