1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#include <Arduino.h>
#include <EEPROM.h>
#include <WiFiUdp.h>
#include <ESP8266WiFi.h>
unsigned int packets = 0;
WiFiUDP u;
unsigned int doreport = 0;
uint64_t imp;
unsigned long last_imp = 0;
IRAM_ATTR void isr () {
unsigned long time = millis();
unsigned long lumax = -1;
if (time < last_imp) { // debouncer
if (lumax - last_imp + time < (unsigned long) 100) // saj ne bo več kot 36 kW porabe
return;
} else
if (last_imp + (unsigned long) 100 > time)
return;
last_imp = time;
if (imp++ % 2)
digitalWrite(D8, HIGH);
else
digitalWrite(D8, LOW);
}
void setup () {
Serial.begin(MONITOR_SPEED);
pinMode(D5, INPUT);
pinMode(D6, OUTPUT);
pinMode(D7, OUTPUT);
pinMode(D8, OUTPUT);
EEPROM.begin(512);
EEPROM.get(0, imp);
WiFi.begin("OpenWrt", NULL);
IPAddress a(10,69,69,35);
IPAddress g(10,69,69,1);
IPAddress n(255,255,255,0);
IPAddress d1(10,69,69,1);
IPAddress d2(89,212,194,154);
WiFi.config(a, g, n, d1, d2);
u.begin(35358);
attachInterrupt(digitalPinToInterrupt(D5), isr, FALLING);
}
void loop () {
if (WiFi.status() == WL_CONNECTED)
digitalWrite(D7, LOW);
else
digitalWrite(D7, HIGH);
if (u.parsePacket()) {
packets++;
if (packets % 2)
digitalWrite(D6, HIGH);
else
digitalWrite(D6, LOW);
Serial.println();
char p[512];
u.read(p, 255);
if (!strncmp(p, "reset", 5)) {
imp = 0;
Serial.println("reset");
}
}
uint64_t imp_stored;
EEPROM.get(0, imp_stored);
if (imp_stored != imp) {
EEPROM.put(0, imp);
EEPROM.commit();
Serial.println(String(imp));
IPAddress b(255,255,255,255);
u.beginPacket(b, 35358);
char buf[255];
sprintf(buf, "%lld\n", imp);
u.write(buf);
u.endPacket();
}
}
|