Licznik impulsów (impulse counter) - Arduino IDE

Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Nadszedł czas przerzucenia SuplaImpulseCounter na framework zgodny z nową biblioteką.
To był ostatni element "starej" SuplaDevice, który nie działał "po nowemu". Tym samym zatoczyłem krąg, bo SuplaImpulseCounter był moim pierwszym wkładem w projekt Supla, który udostępniłem prawie dokłądnie rok temu (bez 11 dni) i jako ostatni został przepisany. To tyle tytułem wstępu, a teraz do rzeczy!

Liczniki impulsów dodajemy przez:

Kod: Zaznacz cały

#include <supla/sensor/impulse_counter.h>

// w setup:
auto *ic = new Supla::Sensor::ImpulseCounter(PIN_DO_IMPULSÓW, true, false, 50);
Licznik potrzebuje klasy typu "Storage", do przechowywania zliczony impulsów między resetami urządzenia (tutaj opis jak dodać i używać Storage: viewtopic.php?f=61&t=7162 ).

Licznik zaczyna liczyć od 0 lub od wartości zapisanej w pamięci. Jeśli chcesz wyczyścić licznik, lub ustawić dowolną wartość początkową, to można użyć metody:

Kod: Zaznacz cały

ic->setCounter(nowa_wartosc);
Wartość countera można pobrać:

Kod: Zaznacz cały

counter = ic->getCounter();
W bibliotece jest też gotowy przykład do Arduino IDE. Zmiany czekają w pull request, ale całość możecie pobrać już teraz z mojego githuba: https://github.com/klew/arduino
Widzimy się na Supla Offline Party vol. 2 :!:
WinstonW
Posty: 19
Rejestracja: pt lip 10, 2020 3:50 pm

a czy jest możliwośc podpięcia przycisku resetu ?
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

WinstonW pisze: ndz wrz 13, 2020 7:52 pm a czy jest możliwośc podpięcia przycisku resetu ?
Mówisz i masz ;). Dodałem taką opcję:

Kod: Zaznacz cały

  button1->willTrigger(*imp, Supla::ON_PRESS, Supla::RESET);
Widzimy się na Supla Offline Party vol. 2 :!:
WinstonW
Posty: 19
Rejestracja: pt lip 10, 2020 3:50 pm

Dzięki Klew ,zawsze można liczyć na Twoją pomoc
bigthomas
Posty: 234
Rejestracja: pn sie 12, 2019 3:35 pm

W 36 linii w arduino/libraries/SuplaDevice/src/supla/storage/eeprom.cpp brakuje średnika :)
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

bigthomas pisze: wt wrz 15, 2020 8:07 am W 36 linii w arduino/libraries/SuplaDevice/src/supla/storage/eeprom.cpp brakuje średnika :)
Dzięki. Już poprawione.
Widzimy się na Supla Offline Party vol. 2 :!:
bigthomas
Posty: 234
Rejestracja: pn sie 12, 2019 3:35 pm

Czy komukolwiek udało się odpalić licznik impulsów na ESP32?
Spróbowałem wgrać przykład:

Kod: Zaznacz cały

/*
Copyright (C) AC SOFTWARE SP. Z O.O.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

#include <SPI.h>
#include <SuplaDevice.h>
#include <supla/sensor/impulse_counter.h>

// Choose where Supla should store counter data in persistant memory
// We recommend to use external FRAM memory 
#define STORAGE_OFFSET 100
#include <supla/storage/eeprom.h>
Supla::Eeprom eeprom(STORAGE_OFFSET);
// #include <supla/storage/fram_spi.h>
// Supla::FramSpi fram(STORAGE_OFFSET);


// Choose proper network interface for your card:

// ESP32 based board:
 #include <supla/network/esp32_wifi.h>
 Supla::ESP32Wifi wifi("xxxxx", "xxxxx");

void setup() {

  Serial.begin(115200);

  // Replace the falowing GUID with value that you can retrieve from https://www.supla.org/arduino/get-guid
  char GUID[SUPLA_GUID_SIZE] = {0x9B,0xA1,0x43,0xE7,0x34,0x1A,0x87,0xF1,0xCF,0x3C,0xE6,0x0B,0x19,0xCA,0x17,0x0E};

  // Replace the following AUTHKEY with value that you can retrieve from: https://www.supla.org/arduino/get-authkey
  char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {0x3C,0xEC,0x4C,0xDB,0xCC,0xBF,0xFF,0x2F,0xA3,0x5E,0x14,0x79,0x98,0x79,0x4E,0xFE};

  /*
   * Having your device already registered at cloud.supla.org,
   * you want to change CHANNEL sequence or remove any of them,
   * then you must also remove the device itself from cloud.supla.org.
   * Otherwise you will get "Channel conflict!" error.
   */
    
  // CHANNEL0 - Impulse Counter on pin 34, counting raising edge (from LOW to HIGH), no pullup on pin, and 10 ms debounce timeout
  new Supla::Sensor::ImpulseCounter(12, true, false, 10);
  
  // CHANNEL1 - Impulse Counter on pin 35, counting falling edge (from HIGH to LOW), with pullup on pin, and 50 ms debounce timeout
  new Supla::Sensor::ImpulseCounter(13, false, true, 50);
  /*
   * Server address is available at https://cloud.supla.org 
   * If you do not have an account, you can create it at https://cloud.supla.org/account/create
   * SUPLA and SUPLA CLOUD are free of charge
   */
  SuplaDevice.setName("A Impuls Couter");
  SuplaDevice.begin(GUID,              // Global Unique Identifier
                    "xxxxx",  // SUPLA server address
                    "xxxxx",   // Email address used to login to Supla Cloud
                    AUTHKEY);          // Authorization key
}
void loop() {
  SuplaDevice.iterate();
}

Podawał na piny stan niski (GND) i wysoki 3.3V i żadnego efektu.
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

bigthomas pisze: wt paź 06, 2020 6:05 pm Czy komukolwiek udało się odpalić licznik impulsów na ESP32?
Spróbowałem wgrać przykład:
...
Podawał na piny stan niski (GND) i wysoki 3.3V i żadnego efektu.
Jesteś pewien, że dobrych pinów używasz? W kodzie podałeś liczby 12 i 13, co powinno odpowiadać GPIO12 i GPIO13. Na płytkach z ESP8266 czasami są oznaczenia GPIO z numeracją niezgodną z numerem GPIO.
Na 13 masz ustawiony pullup, więc zwierając do GND powinien być liczony impuls.

Jeśli nie będzie Ci działać, to zrób sobie prosty program, w którym np co 0,5 s odczytujesz GPIO13 i wyrzucasz na serial. Ustaw pullup i zwieraj do GND i obserwuje Serial. Wtedy będziesz wiedział, że podłączenie i GPIO są poprawne.
Widzimy się na Supla Offline Party vol. 2 :!:
bigthomas
Posty: 234
Rejestracja: pn sie 12, 2019 3:35 pm

klew pisze: śr paź 07, 2020 7:47 am
bigthomas pisze: wt paź 06, 2020 6:05 pm Czy komukolwiek udało się odpalić licznik impulsów na ESP32?
Spróbowałem wgrać przykład:
...
Podawał na piny stan niski (GND) i wysoki 3.3V i żadnego efektu.
Jesteś pewien, że dobrych pinów używasz? W kodzie podałeś liczby 12 i 13, co powinno odpowiadać GPIO12 i GPIO13. Na płytkach z ESP8266 czasami są oznaczenia GPIO z numeracją niezgodną z numerem GPIO.
Na 13 masz ustawiony pullup, więc zwierając do GND powinien być liczony impuls.

Jeśli nie będzie Ci działać, to zrób sobie prosty program, w którym np co 0,5 s odczytujesz GPIO13 i wyrzucasz na serial. Ustaw pullup i zwieraj do GND i obserwuje Serial. Wtedy będziesz wiedział, że podłączenie i GPIO są poprawne.
Piny są sprawdzone, na tych samych pinach w innym projekcie wykorzystującą tą samą bibliotekę supli mam ustawiony czujnik głębokości który działa bardzo dobrze.
Zmieniałem również ESP32 na to na którym mam czujnik głębokości, bez pozytywnego efektu.

Same piny w terminalu zmieniają status, mam wyświetlone na konsoli poprzez "Serial.println(digitalRead(numer_pinu));".
Jednak w na cloud brak efektu.

Ustawienia na cloud do licznika impulsów mam identyczne jak dla starej biblioteki.
Podpis: Test
Pokaż w urządzeniach klienckich: TAK
Jednostka: razy
Cena za razy: 0
Waluta: Wybierz walutę
Impulsy 1 /razy
Wartość początkowa: 0 /razy
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Pokaż logi z Seriala.
Widzimy się na Supla Offline Party vol. 2 :!:
ODPOWIEDZ

Wróć do „Arduino IDE”