#include <avr/wdt.h>
unsigned long previousMillis[] = { 0, 0 };
unsigned long currentMillis = 0;
const long interval[] = { 10000, 5000, 1000 }; //30, 5 min
byte Switch = 2;
byte data[900];
byte data1[900];
int position = 0;
//const long interval = 20000; //5sec
void setup() {
Serial.begin(9600);
//wdt_reset();
pinMode(A0, OUTPUT); //čerpadlo
pinMode(A1, INPUT); //napětí baterie
pinMode(A2, INPUT_PULLUP); //senzor hladiny
pinMode(A3, INPUT); //napětí soláru
pinMode(12, INPUT_PULLUP); //read data
digitalWrite(A0, 1);
delay(1000);
digitalWrite(A0, 0);
delay(1000);
digitalWrite(A0, 1);
//wdt_enable(WDTO_8S);
//Serial.println("hello");
}
void loop() {
//wdt_reset();
//Serial.println("ok");
//delay(1000);
currentMillis = millis();
switch (Switch) {
case 1:
if (currentMillis - previousMillis[0] >= interval[1]) {
if (map(analogRead(A1), 0, 1023, 0, 15) > 7 && digitalRead(A2)==HIGH) {
previousMillis[0] = currentMillis;
digitalWrite(A0, 1);
Switch = 2;
//Serial.println("on");
}
}
break;
case 2:
if (currentMillis - previousMillis[0] >= interval[0]) {
previousMillis[0] = currentMillis;
digitalWrite(A0, 0);
Switch = 1;
//Serial.println("off");
}
break;
}
if (digitalRead(A2) == LOW) {
digitalWrite(A0, 0);
//Serial.println("plno");
}
if (currentMillis - previousMillis[1] >= interval[2]) {
previousMillis[1] = currentMillis;
data[position] = map(analogRead(A1), 0, 1023, 0, 15);
data1[position] = map(analogRead(A3), 0, 1023, 0, 35);
position++;
}
//Serial.println(map(analogRead(A1),0,1023,0,15));
//Serial.println(analogRead(A2));
if (digitalRead(12) == LOW) {
sendData();
}
}
void sendData() {
Serial.println("chceš data?");
while (1) {
if (Serial.available()) {
String input = Serial.readString();
String readableTime;
getReadableTime(readableTime);
Serial.println(readableTime);
for (int i = 0; i < sizeof(data); i++) {
Serial.print(data[i]);
Serial.print(" ");
}
Serial.println();
for (int i = 0; i < sizeof(data1); i++) {
Serial.print(data1[i]);
Serial.print(" ");
}
Serial.println();
break;
}
}
}
void getReadableTime(String &readableTime) {
unsigned long currentMillis;
unsigned long seconds;
unsigned long minutes;
unsigned long hours;
unsigned long days;
currentMillis = millis();
seconds = currentMillis / 1000;
minutes = seconds / 60;
hours = minutes / 60;
days = hours / 24;
currentMillis %= 1000;
seconds %= 60;
minutes %= 60;
hours %= 24;
if (days > 0) {
readableTime = String(days) + "d ";
}
if (hours > 0) {
readableTime += String(hours) + "h:";
}
if (minutes < 10) {
readableTime += "0";
}
readableTime += String(minutes) + "m:";
if (seconds < 10) {
readableTime += "0";
}
readableTime += String(seconds) + "s ago";
}