Ардуино мега с изернет шилдом, подключено реле и насос (насос питается отдельно от ардуинки).
Насос должен запускаться каждые 3 секунды на полторы секунды.
Работает примерно около двух часов и все зависает. ардуинка перестает отвечать, пока не перезагрузиш ее.
При необходимости залью скетч.
Возможно кто-то сталкивался и может помочь с данной проблемой.
Прикладываю код скетча
#include "Adafruit_VL53L0X.h"
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
#include <Wire.h> // библиотека для управления устройствами по I2C
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для QAPASS 1602
#include <Ethernet.h>
#include <SPI.h>
unsigned long timing;
unsigned long timingcm;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "server.loc";
LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея
#define PIN_REAY 3 //реле
#define CURRENT_SENSOR A2 // Analog input pin that sensor is attached to
float amplitude_current; //amplitude current
float effective_value; //effective current
EthernetClient client;
void setup() {
Ethernet.begin(mac);
pinMode(PIN_REAY, OUTPUT);
digitalWrite(PIN_REAY, HIGH);
Serial.begin(9600);
while (! Serial) {
delay(1);
}
pins_init();
LCD.init(); // инициализация LCD дисплея
LCD.backlight(); // включение подсветки дисплея
LCD.begin(16, 2); // Настройка количества столбцов и строк на ЖК-дисплее
LCD.print("OkVoyt"); // Печать текста на ЖК-дисплее
// Serial.println("Adafruit VL53L0X test");
if (!lox.begin()) {
// Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
// Serial.println(F("VL53L0X API Simple Ranging example\n\n"));
/* Serial.println("connecting...");
if (client.connect(server, 80)) {
Serial.print("connected to ");
Serial.println(server);
// Make a HTTP request:
client.println("GET /add.php?k=lok&doz2="+ String(dozator) +" HTTP/1.1");
client.println("Host: server.loc");
client.println("Connection: close");
client.println();
} else {
Serial.println("connection failed");
}
*/
}
void loop() {
if (millis() - timing > 20000){
timing = millis();
lan_con_th();
// Serial.println ("205 seconds");
}
if (millis() - timingcm > 7000){ // Вместо 10000 подставьте нужное вам значение паузы
timingcm = millis();
lansn();
// Serial.println ("7 seconds");
}
int sensor_max;
sensor_max = getMaxValue();
Serial.print("sensor_max = ");
Serial.println(sensor_max);
//the VCC on the Grove interface of the sensor is 5v
amplitude_current=(float)(sensor_max-512)/1024*5/185*1000000;// for 5A mode,you need to modify this with 20 A and 30A mode;
effective_value=amplitude_current/1.414;
//minimum_current=1/1024*5/185*1000000/1.414=18.7(mA)
//Only for sinusoidal alternating current
// Serial.println("The amplitude of the current is(in mA)");
// Serial.println(amplitude_current,1);//Only one number after the decimal point
// Serial.println("The effective value of the current is(in mA)");
// Serial.println(effective_value,1);
if (effective_value > 200){
digitalWrite(PIN_REAY, LOW);
delay (3000);
digitalWrite(PIN_REAY, HIGH);
delay (1500);
} else {
digitalWrite(PIN_REAY, LOW);
Serial.println("Stop nasos");
}
}
void lansn()
{
LCD.clear();
LCD.setCursor(0, 0);
LCD.print("Nasos mm");
LCD.setCursor(0, 1);
LCD.print(effective_value);
}
void lan_con_th()
{
VL53L0X_RangingMeasurementData_t measure;
Serial.print("Reading a measurement... ");
lox.rangingTest(&measure, false);
if (measure.RangeStatus != 4) {
Serial.print("Distance (mm): ");
Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
LCD.clear();
LCD.setCursor(0, 0);
LCD.print("Glubina mm");
LCD.setCursor(0, 1);
LCD.print(measure.RangeMilliMeter);
if (client.connect(server, 80)) {
Serial.print("connected to ");
Serial.println(server);
client.println("GET /add.php?k=loc&h2="+ String(measure.RangeMilliMeter) +"&doz2="+ String(effective_value) +" HTTP/1.1");
client.println("Host: server.loc");
client.println("Connection: close");
client.println();
} else {
Serial.println("connection failed");
}
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;)
;
}
}
void pins_init()
{
pinMode(CURRENT_SENSOR, INPUT);
}
/*Function: Sample for 1000ms and get the maximum value from the S pin*/
int getMaxValue()
{
int sensorValue; //value read from the sensor
int sensorMax = 0;
uint32_t start_time = millis();
while((millis()-start_time) < 1000)//sample for 1000ms
{
sensorValue = analogRead(CURRENT_SENSOR);
if (sensorValue > sensorMax)
{
/*record the maximum sensor value*/
sensorMax = sensorValue;
}
}
return sensorMax;
}