You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
3.0 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// CANVAS DEMO
#include <Arduino.h>
#define AP_SSID "Alex"
#define AP_PASS "alexpass"
#include <GyverHub.h>
GyverHub hub;
gh::Pos pos2; // обработка кликов по холсту для loop
void build(gh::Builder& b) {
if (b.beginRow()) {
// 0. ХОЛСТ
// пустой холст без обработки кликов
// будем обновлять в loop по имени
b.Canvas_(F("cv0"), 300, 300);
// 1. ХОЛСТ
// холст с рисунком, без имени и обновлений
gh::Canvas cv1;
b.BeginCanvas(300, 300, &cv1);
cv1.fill(0x00ff00); // жёлтый
cv1.noStroke();
cv1.circle(150, 150, 50); // круг в центре
b.EndCanvas();
b.endRow();
}
if (b.beginRow()) {
// 2. ХОЛСТ
// холст с именем и рисунком и подключенным обработчиком кликов
gh::Canvas cv2;
b.BeginCanvas_(F("cv2"), 200, 200, &cv2, &pos2);
cv2.stroke(0xff0000);
cv2.strokeWeight(5);
cv2.line(0, 0, -1, -1); // крест
cv2.line(0, -1, -1, 0);
b.EndCanvas();
// 3. ХОЛСТ
// пустой холст с обработкой кликов в билдере
gh::Pos pos3;
b.Canvas_(F("cv3"), 300, 300, nullptr, &pos3);
// был клик
if (pos3.changed()) {
Serial.print("Canvas cv3: ");
Serial.print(pos3.x);
Serial.print(',');
Serial.println(pos3.y);
// рисуем кружок
gh::CanvasUpdate cv3("cv3", &hub);
cv3.fill(0xff0000);
cv3.circle(pos3.x, pos3.y, 10);
cv3.send();
}
b.endRow();
}
}
void setup() {
Serial.begin(115200);
#ifdef GH_ESP_BUILD
WiFi.mode(WIFI_STA);
WiFi.begin(AP_SSID, AP_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println(WiFi.localIP());
hub.mqtt.config("test.mosquitto.org", 1883);
#endif
hub.config(F("MyDevices"), F("ESP"), F(""));
hub.onBuild(build);
hub.begin();
}
void loop() {
hub.tick();
// 0. обновление холста cv0 по таймеру
static gh::Timer tmr(500);
if (tmr) {
gh::CanvasUpdate cv0("cv0", &hub);
cv0.noStroke();
cv0.fill(gh::Color(random(255), random(255), random(255)), random(100, 255));
cv0.circle(random(0, 300), random(0, 300), random(5, 30));
cv0.send();
}
// 2. был клик по холсту cv2
if (pos2.changed()) {
Serial.print("Canvas cv2: ");
Serial.print(pos2.x);
Serial.print(',');
Serial.println(pos2.y);
// рисуем кружок
gh::CanvasUpdate cv2("cv2", &hub);
cv2.circle(pos2.x, pos2.y, 10);
cv2.send();
}
}