не могу "снять" показания с слайдера

Всё работает кроме обновления данных используя слайсер.

// система будет висеть на телефоне
#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);
  }

}
→ Ссылка