@Klew
Napisałem taką pętlę, która co 5 sekund zwiększa stan licznika.
Działa, ale po każdym resecie, czy też nawet podłączeniu/rozłączeniu monitora łącza szeregowego, licznik się zeruje.
Code: Select all
Supla::GUI::begin();
}
void loop() {
const uint32_t now = millis();
static uint32_t lastTime = 0; //MZ static is oposit to "local"(reset out off function)
static uint32_t IC0Read = 0; // initial time for GPIO read time stamp
SuplaDevice.iterate();
if (millis() - lastTime > 1000) {
lastTime = millis();
}
P2Count = P2Count + 1; // licznik sekund do odczytu
if (P2Count >= 5) { // po zadanym czasie (5 sekund)
P2Count = 0; // zerowanie licznika czasu odczytu
// newIC0State = digitalRead(IC0Pin); //odczyt stanu GPIO
if (newIC0State == 1) { // alternative to GPIO read
newIC0State = 0; // everytime change
}
else {
newIC0State = 1;
}
if (newIC0State != oldIC0State) { // @State change
oldIC0State = newIC0State; // Save new state 4 late
if (newIC0State == 0) { // Change H->L detection only
IC0Value = IC0Value +1; // increment KLOP on every loop pass on H->L
klo0->setValue(IC0Value); // set new KLOP value
}
Dopisałem ten kawałek dla licznika do działającego skryptu dołożonego do GG Krychy88. Tam miałem min. 4 kanały KPOP, wszystko działało. Posługując się analogią do przykładu KPOP, dołożyłem kilka poniższych linii do skryptu.
Code: Select all
#include <supla/sensor/general_purpose_meter.h>
...
Supla::Sensor::GeneralPurposeMeter *klo0 = nullptr;
...
klo0 = new Supla::Sensor::GeneralPurposeMeter();
klo0->setDefaultValueDivider(0);
klo0->setDefaultValueMultiplier(0);
klo0->setDefaultValueAdded(0);
klo0->setDefaultUnitBeforeValue("W sumie:");
klo0->setDefaultUnitAfterValue("imp.");
klo0->setDefaultValuePrecision(0);
klo0->setValue(20);
Zapis jest ustawiony do FRAM, o ile to ma znaczenie. W monitorze widać, że znajduje FRAM, czyta (xRead), ale nie widzę zapisów (xWrite).
Wieczorem sprawdzę, co jest w pamięci FRAM, ale przy KPOPach było ok, więc chyba nie tu problem.
Czy brakuje jakiegoś zapisu do FRAM, a potem odczytu zapisanego we FRAM stanu po reboocie?
W skrypcie zablokowałem (testowo-chwilowo) cały kawałek związany z kanałami KPOP, żeby mi nie przeszkadzał.
Nie korzystam z Suplowych bibliotek, pewnie czegoś brakuje...