Arkadaşlar sorunum şu hmi ekran üzerinde yüklemiş olduğum resimleri kendi işlemcisi üzerinde yansön yaparken aktrif ve pasif etmek istiyorum.
1. espden komut gelene kadar resimler sabit görünür olacak.
2. espden komut geldiğinde resimler yan sön yapacak.
#include "stk.h"
int worktime;
VarGet("worktime", &worktime);
if (worktime == 1) {
// Yanıp sönme modu
static int toggle = 0; // Görünürlük için bir değişken
if (toggle == 0) {
ImageSet("resim1", "Visible", "0");
ImageSet("resim2", "Visible", "0");
ImageSet("resim3", "Visible", "0");
toggle = 1;
} else {
ImageSet("resim1", "Visible", "1");
ImageSet("resim2", "Visible", "1");
ImageSet("resim3", "Visible", "1");
toggle = 0;
}
} else {
// Sabit görüntü modu
ImageSet("resim1", "Visible", "1");
ImageSet("resim2", "Visible", "1");
ImageSet("resim3", "Visible", "1");
}
Esp üzerinden terminalde 0 gönderdiğim de resimler sabit 1 gönderdiğimde yansön yapıyor. Ben bu şekilde çözebildim ama istediğim bu değil. resimlerin yansön timer işlemleri tamamen ekranda olsun istiyorum. espden gönderdiğim 0 ile örnek resimleri sabitleyecek 1 ile yansön yaptıracak şekilde
#include <Airhmi.h>
// AirHMI değişkenleri
AirVariable worktime = AirVariable("worktime");
bool enable = false; // Yanıp sönme kontrolü
int currentWorktime = -1; // Şu anki worktime değeri (-1 başlangıç için geçersiz)
unsigned long lastToggleTime = 0; // Yanıp sönme için zaman kontrolü
const unsigned long toggleInterval = 500; // Yanıp sönme aralığı (ms)
void setup() {
Serial.begin(115200); // Terminal için seri haberleşme
airInit(); // AirHMI kütüphanesini başlat
Serial.println("HMI Kontrol Başladı.");
}
void loop() {
// ESP'den veri alımı
if (Serial.available() > 0) {
char input = Serial.read(); // Seri porttan gelen veriyi oku
if (input == '1') {
enable = true; // Yanıp sönme aktif
// Serial.println("Yanıp Sönme Modu Aktif!");
} else if (input == '0') {
enable = false; // Sabit görüntü aktif
// Serial.println("Sabit Görüntü Modu Aktif!");
}
}
// Yanıp Sönme Modu
if (enable) {
// Zaman kontrolü ile yanıp sönme
unsigned long currentTime = millis();
if (currentTime - lastToggleTime >= toggleInterval) {
// `currentWorktime` değerini değiştir (0 <-> 1)
currentWorktime = (currentWorktime == 1) ? 0 : 1;
worktime.VarSeti(currentWorktime); // HMI'ye yeni değer gönder
Serial.print("Yanıp Sönme: worktime=");
Serial.println(currentWorktime);
// Zamanı güncelle
lastToggleTime = currentTime;
}
}
// Sabit Görüntü Modu
else {
if (currentWorktime != 0) { // Sadece bir kez `0` gönder
worktime.VarSeti(0);
currentWorktime = 0;
Serial.println("Sabit Görüntü: worktime=0");
}
}
delay(10); // Döngü gecikmesi
}
Merhaba Murat Bey; Ekte size örnek proje gönderdim. Takıldığınız yerde tekrar sorabilirsiniz. Kolay gelsin.