не могу "снять" показания с слайдера
Всё работает кроме обновления данных используя слайсер.
// система будет висеть на телефоне
#define AP_SSID "TECNO CAMON 17P"
#define AP_PASS "11111111"
#include <WiFi.h> // подключаем библиотеку Wi-Fi
#include <GyverPortal.h> //библиотека веб интерфейса
// Создаем объект GyverPortal
GyverPortal portal;
// переменные
int PWM_CHANNEL = 0; // ESP32 has 16 channels which can generate 16 independent waveforms
int PWM_FREQ = 20000; // частота 20 к Герц
int PWM_RESOLUTION = 16; // есп32 16 бит
int PWM_SKVAJ = 256; // скважность (256 половина от 512)
int PWM_SKVAJ1 = 0; // скважность (датчик измененния)
int PWM_FREQ1 = 0; // частота 20 к Герц (датчик измененния)
int PWM_START = 0; // датчик запуска генератора (датчик измененния)
int sliderValue_SKVAJ = 0; // снимаем данные с слайсера скважность
int sliderValue_FREQ = 0; // снимаем данные с слайсера частота
const int LED_OUTPUT_PIN = 25;
bool valSwitchKV =0; // волна прямоугольная
bool valSwitchSin = 0; // волна синусоидальная
// конструктор страницы ( вид Ок !! )
void build() {
GP.BUILD_BEGIN(GP_DARK);
GP.TITLE(" Генератор ", "t1");
GP.HR();
GP.LABEL("Квадратная волна: ");
GP.BREAK();// перевод строки
// туту плот
GP.LABEL("включение: ");
GP.SWITCH("sw", valSwitchKV); GP.BREAK();
GP.BREAK(); // перевод строки
GP.LABEL("Синусоидальная волна: ");
GP.BREAK(); // перевод строки
GP.LABEL("включение: ");
GP.SWITCH("sw", valSwitchSin); GP.BREAK();
GP.BREAK(); // перевод строки
GP.LABEL("Частота");
GP.SLIDER("sld", PWM_FREQ, 1000, 400000);
GP.BREAK();
GP.LABEL("Скважность ");
GP.SLIDER("sld1", PWM_SKVAJ, 52, 460); // 10 и 90 процентов
GP.BREAK();
GP.BUILD_END();
}
void setup() {
// вот моё добавил канал (многое скважность регулируют через канал).
ledcAttachChannel(LED_OUTPUT_PIN, PWM_FREQ, PWM_RESOLUTION, PWM_CHANNEL);
//тут будет измениения скважности и частоты
PWM_SKVAJ1 = PWM_SKVAJ;
PWM_FREQ1 = PWM_FREQ;
Serial.begin(115200);
// Подключаемся к Wi-Fi
WiFi.mode(WIFI_STA);
WiFi.begin(AP_SSID, AP_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Подключено! IP адрес: ");
Serial.println(WiFi.localIP());
// Инициализация GyverPortal
portal.attachBuild(build);
portal.start();
}
void loop() {
// моё
// проверка первичного запуска
if(PWM_START == 0 )
{
ledcWrite(PWM_CHANNEL, PWM_SKVAJ);
PWM_START = 1;
Serial.println("старт");
}
// изменение скважности
if(PWM_SKVAJ1 != PWM_SKVAJ )
{
ledcWrite(PWM_CHANNEL, PWM_SKVAJ);
Serial.print("скважность: ");
Serial.println(PWM_SKVAJ );
PWM_SKVAJ1 = PWM_SKVAJ;
}
// изменение частоты
if(PWM_FREQ1 != PWM_FREQ)
{
ledcChangeFrequency(LED_OUTPUT_PIN, PWM_FREQ, PWM_RESOLUTION);
Serial.print("частота: ");
Serial.println(PWM_FREQ );
PWM_FREQ1 = PWM_FREQ;
}
portal.tick(); // Обработка веб-интерфейса
// Получаем значение слайдера при изменении
if (portal.update()) {
sliderValue_SKVAJ = portal.getInt("sld1"); // Ключ должен совпадать с именем слайдера
sliderValue_FREQ = portal.getInt("sld"); // Ключ должен совпадать с именем слайдера
Serial.println("1");
if(sliderValue_SKVAJ != PWM_SKVAJ)
{
PWM_SKVAJ = sliderValue_SKVAJ;
Serial.println("скважность");
}
if(sliderValue_FREQ != PWM_FREQ)
{
PWM_FREQ = sliderValue_FREQ;
Serial.println("частота");
}
}
}
Вот вывод :
..
Подключено! IP адрес: 192.168.80.79
старт
Вот не знаю почему не заходит в portal.update()
@Solt дал ответ как исправить но, увы почему-то у меня так и не заработало . Вот код :
// система будет висеть на телефоне
#define AP_SSID "TECNO CAMON 17P"
#define AP_PASS "11111111"
#include <WiFi.h> // подключаем библиотеку Wi-Fi
#include <GyverPortal.h> //библиотека веб интерфейса
// Создаем объект GyverPortal
GyverPortal portal;
// переменные
int PWM_CHANNEL = 0; // ESP32 has 16 channels which can generate 16 independent waveforms
int PWM_FREQ = 20000; // частота 20 к Герц
int PWM_RESOLUTION = 16; // есп32 16 бит
int PWM_SKVAJ = 256; // скважность (256 половина от 512)
int PWM_SKVAJ1 = 0; // скважность (датчик измененния)
int PWM_FREQ1 = 0; // частота 20 к Герц (датчик измененния)
int PWM_START = 0; // датчик запуска генератора (датчик измененния)
int sliderValue_SKVAJ = 0; // снимаем данные с слайсера скважность
int sliderValue_FREQ = 0; // снимаем данные с слайсера частота
const int LED_OUTPUT_PIN = 25;
bool valSwitchKV =0; // волна прямоугольная
bool valSwitchSin = 0; // волна синусоидальная
// конструктор страницы ( вид Ок !! )
void build() {
GP.BUILD_BEGIN(GP_DARK);
GP.TITLE(" Генератор ", "t1");
GP.HR();
GP.LABEL("Квадратная волна: ");
GP.BREAK();// перевод строки
// туту плот
GP.LABEL("включение: ");
GP.SWITCH("sw", valSwitchKV);
GP.BREAK();
GP.BREAK(); // перевод строки
GP.LABEL("Синусоидальная волна: ");
GP.BREAK(); // перевод строки
GP.LABEL("включение: ");
GP.SWITCH("sw1", valSwitchSin);
GP.BREAK();
GP.BREAK(); // перевод строки
GP.LABEL("Частота");
GP.SLIDER("sld", PWM_FREQ, 1000, 400000);
GP.BREAK();
GP.LABEL("Скважность ");
GP.SLIDER("sld1", PWM_SKVAJ, 52, 460); // 10 и 90 процентов
GP.BREAK();
GP.BUILD_END();
}
void action() {
// Получаем значение слайдера при изменении
if (portal.update()) {
// опрос обновлений
Serial.println(portal.updateName());
sliderValue_SKVAJ = portal.getInt("sld1"); // Ключ должен совпадать с именем слайдера
sliderValue_FREQ = portal.getInt("sld"); // Ключ должен совпадать с именем слайдера
Serial.println("1");
if(sliderValue_SKVAJ != PWM_SKVAJ)
{
PWM_SKVAJ = sliderValue_SKVAJ;
Serial.println("скважность");
}
if(sliderValue_FREQ != PWM_FREQ)
{
PWM_FREQ = sliderValue_FREQ;
Serial.println("частота");
}
}
}
void setup() {
// вот моё добавил канал (многое скважность регулируют через канал).
ledcAttachChannel(LED_OUTPUT_PIN, PWM_FREQ, PWM_RESOLUTION, PWM_CHANNEL);
//тут будет измениения скважности и частоты
PWM_SKVAJ1 = PWM_SKVAJ;
PWM_FREQ1 = PWM_FREQ;
Serial.begin(115200);
// Подключаемся к Wi-Fi
WiFi.mode(WIFI_STA);
WiFi.begin(AP_SSID, AP_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Подключено! IP адрес: ");
Serial.println(WiFi.localIP());
// Инициализация GyverPortal
portal.attachBuild(build);
portal.attach(action);
portal.start();
}
void loop() {
// моё
// проверка первичного запуска
if(PWM_START == 0 )
{
ledcWrite(PWM_CHANNEL, PWM_SKVAJ);
PWM_START = 1;
Serial.println("старт");
}
// изменинение скважности
if(PWM_SKVAJ1 != PWM_SKVAJ )
{
ledcWrite(PWM_CHANNEL, PWM_SKVAJ);
Serial.print("скважность: ");
Serial.println(PWM_SKVAJ );
PWM_SKVAJ1 = PWM_SKVAJ;
}
// измениение частоты
if(PWM_FREQ1 != PWM_FREQ)
{
ledcChangeFrequency(LED_OUTPUT_PIN, PWM_FREQ, PWM_RESOLUTION);
Serial.print("частота: ");
Serial.println(PWM_FREQ );
PWM_FREQ1 = PWM_FREQ;
}
portal.tick(); // Обработка веб-интерфейса
}
выводит только это
..
Подключено! IP адрес: 192.168.9.79
старт
Ответы (2 шт):
Автор решения: Solt
→ Ссылка
Вам стоит почитать внимательно документацию и посмотреть примеры. В разделе аналогичный код требует подключения функции обработки запросов из формы action():
GyverPortal portal;
void build() {
// конструктор страницы
}
void action() {
// опрос действий
// например
if (portal.update()) {
// опрос обновлений
Serial.println(portal.updateName());
}
}
void setup() {
// подключаемся к сети
portal.attachBuild(build);
portal.attach(action);
portal.start();
}
void loop() {
portal.tick();
}
Автор решения: timob256
→ Ссылка
portal.update() не работает в блогерской библиотеке
portal.click() работает .
Также возможно (не проверял ) требуется таймер (так нейросеть сказала так что это возможно не факт )
Вот рабочий код :
// система будет висеть на телефоне
#define AP_SSID "TECNO CAMON 17P"
#define AP_PASS "11111111"
#include <WiFi.h> // подключаем библиотеку Wi-Fi
#include <GyverPortal.h> //библиотека веб интерфейса
// Создаем объект GyverPortal
GyverPortal portal;
// переменные
int PWM_CHANNEL = 0; // ESP32 has 16 channels which can generate 16 independent waveforms
int PWM_FREQ = 20000; // частота 20 к Герц
int PWM_RESOLUTION = 16; // есп32 16 бит
int PWM_SKVAJ = 256; // скважность (256 половина от 512)
int PWM_SKVAJ1 = 0; // скважность (датчик измененния)
int PWM_FREQ1 = 0; // частота 20 к Герц (датчик измененния)
int PWM_START = 0; // датчик запуска генератора (датчик измененния)
int sliderValue_SKVAJ = 0; // снимаем данные с слайсера скважность
int sliderValue_FREQ = 0; // снимаем данные с слайсера частота
const int LED_OUTPUT_PIN = 25;
bool valSwitchKV =0; // волна прямоугольная
bool valSwitchSin = 0; // волна синусоидальная
// Добавьте в начало глобальные переменные для отладки
unsigned long lastActionTime = 0;
int actionCounter = 0;
// конструктор страницы ( вид Ок !! )
void build() {
GP.BUILD_BEGIN(GP_DARK);
GP.TITLE(" Генератор ", "t1");
GP.HR();
GP.LABEL("Квадратная волна: ");
GP.BREAK();// перевод строки
// туту плот
GP.LABEL("включение: ");
GP.SWITCH("sw", valSwitchKV);
GP.BREAK();
GP.BREAK(); // перевод строки
GP.LABEL("Синусоидальная волна: ");
GP.BREAK(); // перевод строки
GP.LABEL("включение: ");
GP.SWITCH("sw1", valSwitchSin);
GP.BREAK();
GP.BREAK(); // перевод строки
GP.LABEL("Частота");
GP.SLIDER("sld", PWM_FREQ, 1000, 400000);
GP.BREAK();
GP.LABEL("Скважность ");
GP.SLIDER("sld1", PWM_SKVAJ, 52, 460); // 10 и 90 процентов
GP.BREAK();
GP.BUILD_END();
}
void action() {
actionCounter++;
lastActionTime = millis();
Serial.print("Action called! Count: ");
Serial.println(actionCounter);
if (portal.click("sld1")) { // тмак тоже работает
Serial.println("скважность через клик ");
sliderValue_SKVAJ = portal.getInt("sld1"); // Ключ должен совпадать с именем слайдера
if(sliderValue_SKVAJ != PWM_SKVAJ)
{
PWM_SKVAJ = sliderValue_SKVAJ;
Serial.println("скважность");
}
}
if (portal.click("sld")) { // тмак тоже работает
Serial.println("частота через клик ");
sliderValue_FREQ = portal.getInt("sld"); // Ключ должен совпадать с именем слайдера
if(sliderValue_FREQ != PWM_FREQ)
{
PWM_FREQ = sliderValue_FREQ;
Serial.println("частота");
}
}
}
void setup() {
// вот моё добавил канал (многое скважность регулируют через канал).
ledcAttachChannel(LED_OUTPUT_PIN, PWM_FREQ, PWM_RESOLUTION, PWM_CHANNEL);
//тут будет измениения скважности и частоты
PWM_SKVAJ1 = PWM_SKVAJ;
PWM_FREQ1 = PWM_FREQ;
Serial.begin(115200);
// Подключаемся к Wi-Fi
WiFi.mode(WIFI_STA);
WiFi.begin(AP_SSID, AP_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Подключено! IP адрес: ");
Serial.println(WiFi.localIP());
// Инициализация GyverPortal
portal.attachBuild(build);
portal.attach(action);
portal.start();
}
void loop() {
// моё
// проверка первичного запуска
if(PWM_START == 0 )
{
ledcWrite(PWM_CHANNEL, PWM_SKVAJ);
PWM_START = 1;
Serial.println("старт");
}
// изменинение скважности
if(PWM_SKVAJ1 != PWM_SKVAJ )
{
ledcWrite(PWM_CHANNEL, PWM_SKVAJ);
Serial.print("скважность: ");
Serial.println(PWM_SKVAJ );
PWM_SKVAJ1 = PWM_SKVAJ;
}
// измениение частоты
if(PWM_FREQ1 != PWM_FREQ)
{
ledcChangeFrequency(LED_OUTPUT_PIN, PWM_FREQ, PWM_RESOLUTION);
Serial.print("частота: ");
Serial.println(PWM_FREQ );
PWM_FREQ1 = PWM_FREQ;
}
portal.tick(); // Обработка веб-интерфейса
// Отладочная информация
static unsigned long lastPrint = 0;
if (millis() - lastPrint > 5000) {
lastPrint = millis();
Serial.print("Last action: ");
Serial.print((millis() - lastActionTime) / 1000);
Serial.println(" seconds ago");
Serial.print("Action count: ");
Serial.println(actionCounter);
}
}