W tym artykule zajmiemy się obsługą dostępnego na platformie ADEAS APP widgetu switch. Widok ten umożliwia zero-jedynkowe sterowanie naszymi punktami pomiarowymi, które następnie możemy wykorzystać w wielu przykładach jak chociażby sterowanie napięciem danych czy kontrola warunków w naszym kodzie. W ramach tego artykułu wykorzystamy nasz widok do prostego programu w ramach którego będziemy naprzemiennie zapalać i gasić diody w zależności od aktualnego stanu przełącznika. Dodatkowo widget ten zawiera funkcję zapamiętywania stanu przełączników więc nawet w przypadku odświeżenie strony, czy wyłączenia naszego widgetu, stany naszych punktów pomiarowych zostaną zapamiętane i odpowiednio dostosowane przy kolejnym uruchomieniu naszego urządzenia ADEAS UNO.
Stwórzmy wobec tego dla naszego urządzenia trzy nowe punkty pomiarowe o typie danych Boolean, który przechowuje wartości logiczne true i false oraz ustawmy wartość domyślną jako false. Nazwy punktów pomiarowych są dowolne, natomiast na potrzeby tego artykułu możemy je nazwać led_1, led_2 i led_3.

Jeżeli uda nam się poprawnie dodać wszystkie punkty pomiarowe, nasze tabela z punktami powinna się przedstawiać następująco:

Mając gotowe punkty pomiarowe możemy przejść do stworzenia naszego widgetu. Korzystając z istniejącego już lub gotowego dashboardu, stwórzmy nowy widget wybierając z listy opcję switch.

Klikając w przyciski edytuj, dodajmy nasze uprzednio utworzone punkty pomiarowe do naszego widgetu.
Gotowy do zapisu widget przedstawia się następująco:

Po poprawnej konfiguracji ujrzymy nasz widget z trzema przełącznikamii które po naciśnięciu zmieniają swój wygląd i na tym etapie stan naszych przełączników już jest zapamiętywany i nie zmieni się nawet po odświeżeniu strony.

Na tym etapie nasz widget jest już gotowy do użytku, więc pozostaje nam jedynie napisanie odpowiedniego kodu. Przejdźmy więc do naszego środowiska Arduino IDE. Stwórzmy nowy szkic i wgrajmy do niego poniższy kod:
#include <ADEAS.h>
#define LED_1 4
#define LED_2 5
#define LED_3 6
/**** SETUP ****/
void setup() {
ADEAS::setup("WIFI_SSID", "WIFI_PASS", "TOKEN");
Variables::init("led_1");
Variables::init("led_2");
Variables::init("led_3");
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
}
/**** LOOP ****/
bool flag = true;
void loop() {
ADEAS::process();
if (flag) {
if (API::isReady()) {
delay(2000);
Variables::setDefault();
flag = false;
}
}
if (Variables::get("led_1")) {
digitalWrite(LED_1, HIGH);
} else {
digitalWrite(LED_1, LOW);
}
if (Variables::get("led_2")) {
digitalWrite(LED_2, HIGH);
} else {
digitalWrite(LED_2, LOW);
}
if (Variables::get("led_3")) {
digitalWrite(LED_3, HIGH);
} else {
digitalWrite(LED_3, LOW);
}
}
Pamiętaj o uzupełnieniu funkcji ADEAS::SETUP o odpowiednie dane!
Przeanalizujmy sobie teraz nasz kod krok po kroku:
#define LED_1 4
#define LED_2 5
#define LED_3 6
Zdefiniowanie trzech nowych stałych oraz odpowiadających im pinów I/O. W przypadku tego przykładu podłączyłem diody do pinów D4, D5 i D6 natomiast mogą to być dowolne z dostępnych pinów I/O w urządzeniu ADEAS UNO.
Variables::init("led_1");
Variables::init("led_2");
Variables::init("led_3");
W tym przypadku pojawia się nowa biblioteka o nazwie Variables. Odpowiada ona za pracę z wszystkimi widgetami które bazują na przełączaniu stanu naszego punktu pomiarowego między true i false. Funkcja Variables::init informuje urządzenie o tym, że dany punkt pomiarowy będzie pracował jako własnie nasz przełącznik true/false. Jako argument wystarczy podać nazwę naszego punktu pomiarowego.
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
Ustawienie stanu naszych pinów na wyjście.
bool flag = true;
Ustawienie flagi pomocniczej.
if (flag) {
if (API::isReady()) {
delay(2000);
Variables::setDefault();
flag = false;
}
}
Przy tej funkcji zatrzymamy się na chwilę ponieważ wymaga szerszego opisania. Głównym założeniem tego warunku jest otrzymanie aktualnego stanu naszych punktów pomiarowych po zresetowaniu naszego urządzenia w sytuacji gdy aktualnie nie wyświetlamy widgetu przełączników. Oznacza to mniej więcej tyle, iż jeżeli zapaliliśmy dwie pierwsze diody z poziomu naszego widoku, a następnie wyłączymy ten widok i zresetujemy nasze urządzenie, to diody po krótkiej chwili wrócą do stanu z przed zresetowania urządzenia. Chcemy sprawdzić stan naszych punktów jedynie raz po zresetowaniu naszego urządzenia, dlatego korzystamy ze zmiennej pomocniczej "flag", która po sprawdzeniu stanu zmieni swoją wartość na false więc warunek nie będzie już więcej spełniony. Sprawdzamy następnie, czy komunikacja WEB API jest już gotowa do działania warunkiem if(API::isReady()) i jeżeli tak to po odczekaniu 2 sekund wywołujemy funkcję Variables::setDefault(), która pobiera aktualne stany naszych punktów pomiarowych, które uprzednio zainicjowaliśmy przy pomocy metody Variables::init(). Funkcja ta nie jest wymaga do poprawnego działania naszego programu, a jedynie daje nam możliwość przywrócenia aktualnego stanu naszych punktów pomiarowych po zresetowaniu urządzenia więc możemy ją dodać opcjonalnie.
if (Variables::get("led_1")) {
digitalWrite(LED_1, HIGH);
} else {
digitalWrite(LED_1, LOW);
}
if (Variables::get("led_2")) {
digitalWrite(LED_2, HIGH);
} else {
digitalWrite(LED_2, LOW);
}
if (Variables::get("led_3")) {
digitalWrite(LED_3, HIGH);
} else {
digitalWrite(LED_3, LOW);
}
Funkcja Variables::get() zwraca nam aktualną wartość (true/false) zmiennej podanej w argumencie. Wobec tego jeżeli przycisk jest wciśnięty to warunek zostanie spełniony i wykona się funkcja digitalWrite(LED_1, HIGH), która ustawi nam napięcie na diodzie w przeciwnym wypadku dioda zgaśnie.
Stwórzmy teraz nasz układ z wykorzystaniem 3 diód led o dowolnych kolorach. Schemat podłączenia prezentuje się następująco :

Jeżeli udało nam się poprawnie podłączyć nasz układ możemy wgrać program i zacząć korzystać z naszego widgetu switch.

