summaryrefslogtreecommitdiffstats
path: root/hw/src
diff options
context:
space:
mode:
Diffstat (limited to 'hw/src')
-rw-r--r--hw/src/main.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/hw/src/main.cpp b/hw/src/main.cpp
new file mode 100644
index 0000000..5b0d7f9
--- /dev/null
+++ b/hw/src/main.cpp
@@ -0,0 +1,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();
+ }
+}