Генератор на esp32

Не совсем, хочу менять частоту кнопками

@gl2Там же русским по белому написано для чего ставится галочка. Если вы считаете, что это я помог решить проблему, то поставьте на моём сообщении #8. Если же вам помог кто -то другой - то на его сообщении.

Вам сюда - Ищу исполнителя - Arduino.ru

Вот программа кнопки, как ее здесь использовать ?

int k;
void setup() {
  Serial.begin(115200);
   pinMode(16, INPUT_PULLUP);    //k++
  pinMode(17, INPUT_PULLUP);   //k--

}

void loop()
{
  if (digitalRead(16) == LOW)
  {
    k++;
  }
  if (digitalRead(17) == LOW)
  {
    k--;
  }
  Serial.println(k); 
  delay( 100 ); 
}

где здесь? на форуме?

Посматрел. Сообщение №16 действительно “весь лишних слов”, поскольку о необходимости наличия функции setup Вам уже было сказано выше в сообщении №9 и то, что она у Вас так и не появилась говорит лишь о том, что … ну, Вы поняли.

А кто грубил? Я лишь предупредил Вас, что будет, если Вы продолжите проявлять нарочитое неуважение сообществу. И, поверьте, именно так и будет. Просто довёл до Вашего сведения, не более того.

1 лайк

В программе сообщение #14

извините, но это огрызок от чего то, а не программа.

Никак.

Она написана как самостоятельная программа, а не как “программный модуль для использования в других программах”. Если есть желание её где-то использовать, её надо полностью переписать.

98% , что его код написан chatgpt.

Характерные комментарии, характерное недозаполенние конфигурационных параметров.

Да и потом, код написан в стиле KR, при этом человек не может понять ошибку линкера. Не, однозначно ChatGPT.

#include <Arduino.h>
#include <driver/ledc.h>

// Настройка PWM
void setupPWM() {
    // Конфигурация таймера
    ledc_timer_config_t timerConfig = {
        .speed_mode = LEDC_LOW_SPEED_MODE, // Режим работы (низкая скорость)
        .duty_resolution = LEDC_TIMER_10_BIT, // Разрешение ШИМ (10 бит = 0-1023)
        .timer_num = LEDC_TIMER_0, // Номер таймера
        .freq_hz = 10000, // Частота PWM (10 кГц)
        .clk_cfg = LEDC_AUTO_CLK // Автоматический выбор источника тактирования
    };
    ledc_timer_config(&timerConfig);

    // Конфигурация канала 1 (первый меандр)
    ledc_channel_config_t channelConfig1 = {
        .gpio_num = 18, // GPIO для первого меандра (например, GPIO18)
        .speed_mode = LEDC_LOW_SPEED_MODE,
        .channel = LEDC_CHANNEL_0, // Номер канала
        .timer_sel = LEDC_TIMER_0, // Связать с таймером 0
        .duty = 512, // Коэффициент заполнения 50% (512 для 10 бит)
        .hpoint = 0 // Начальная точка (0 для начала периода)
    };
    ledc_channel_config(&channelConfig1);

    // Конфигурация канала 2 (второй меандр со сдвигом фазы)
    ledc_channel_config_t channelConfig2 = {
        .gpio_num = 19, // GPIO для второго меандра (например, GPIO19)
        .speed_mode = LEDC_LOW_SPEED_MODE,
        .channel = LEDC_CHANNEL_1, // Номер канала
        .timer_sel = LEDC_TIMER_0, // Связать с таймером 0
        .duty = 512, // Коэффициент заполнения 50% (512 для 10 бит)
        .hpoint = 256 // Сдвиг фазы на 25% периода (256 для 10 бит)
    };
    ledc_channel_config(&channelConfig2);
}

void setup() {
  Serial.begin(115200);
  setupPWM();
}

void loop() {

  Serial.printf("Hello!\r\n");
  delay(3000);
}

Попробуй так. Должно скомпилироваться.

Вам было бы гораздо проще, если бы вы использовали ledcWrite(). Тогда весь ваш код превращается в :

#include <Arduino.h>

void setup() {
  ledcAttach(19, 10000, 10);
  ledcAttach(18, 10000, 10);
  ledcWrite(19, 512);
  ledcWrite(18, 512);
}

void loop() {
}

Вот программа с кнопками которая работает,

//https://www.i-programmer.info/programming/148-hardware/17804-programming-the-esp32-in-c-pwm-first-example.html?start=4#google_vignette
#include <driver/ledc.h>
int k;
//const int btn_inc = 16;
//const int btn_dec = 17;
const int maxFreq = 2000;
const int minFreq = 1000;
//unsigned long tim_btn_inc, tim_btn_dec;
//+++++++++++++++++++++++++++++++
// variables will change:
int freq = maxFreq;
int interval = 1; // variables will change:
/*
  //++++++++++++
  void frequencyChange()  //void somefunc()
  // your variable here
  {
  pinMode(16, INPUT_PULLUP);    //k++
  pinMode(17, INPUT_PULLUP);   //k--
  int k;
  if (digitalRead(16) == LOW) {
    k++;
  }
  if (digitalRead(17) == LOW) {
    k--;
  }
  //++++++++++++++ // put your setup code here, to run once:+++++++++++++++

  ledc_timer_config_t timerConfig = {
    .speed_mode = LEDC_LOW_SPEED_MODE,
    .duty_resolution = LEDC_TIMER_10_BIT,
    .timer_num = LEDC_TIMER_0,
    .freq_hz = k,              //+++++++++++++++++++++++++++++
    .clk_cfg = LEDC_AUTO_CLK
  };
  ledc_timer_config(&timerConfig);
  Serial.print("  k1 =  ");
  Serial.println(k);
  //+++++++++++++++++++++++++++++
  }
  //+++++++++++++++++++++++++++++++++
*/
void setup() {
  Serial.begin(115200);
  pinMode(32, INPUT_PULLUP);    //k++
  pinMode(33, INPUT_PULLUP);   //k--
  /*
    ledc_timer_config_t timerConfig = {
      .speed_mode = LEDC_LOW_SPEED_MODE,
      .duty_resolution = LEDC_TIMER_10_BIT,
      .timer_num = LEDC_TIMER_0,
      .freq_hz = 10000,              //+++++++++++++++++++++++++++++
      .clk_cfg = LEDC_AUTO_CLK
    };
    ledc_timer_config(&timerConfig);
  */

  ledc_channel_config_t channelConfig1 = {
    .gpio_num = 12,
    .speed_mode = LEDC_LOW_SPEED_MODE,
    .channel = LEDC_CHANNEL_0,
    .timer_sel = LEDC_TIMER_0,
    .duty = 512,
    .hpoint = 0
  };
  ledc_channel_config(&channelConfig1);


  ledc_channel_config_t channelConfig2 = {
    .gpio_num = 27,
    .speed_mode = LEDC_LOW_SPEED_MODE,
    .channel = LEDC_CHANNEL_1,
    .timer_sel = LEDC_TIMER_0,
    .duty = 512,
    .hpoint = 256
  };
  ledc_channel_config(&channelConfig2);
}


void loop()
{
 
  if (digitalRead(32) == LOW) {
    k++;
    if (k >18000) k = 18000;
    // Serial.println(k); //for debugging purposes
  }
  if (digitalRead(33) == LOW) {
    k--;
    if (k < 5000) k = 5000;
    //Serial.println(k); //for debugging purposes
  }
  
  ledc_timer_config_t timerConfig = {
    .speed_mode = LEDC_LOW_SPEED_MODE,
    .duty_resolution = LEDC_TIMER_10_BIT,
    .timer_num = LEDC_TIMER_0,
    .freq_hz = k,              //+++++++++++++++++++++++++++++
    .clk_cfg = LEDC_AUTO_CLK
  };
  ledc_timer_config(&timerConfig);

  //+++++++++++++++++++++++++++++++
  Serial.print("  k3 =  ");
  Serial.println(k);
  delay( 2 );
}

нужно поменять на отдельный loop

//https://www.i-programmer.info/programming/148-hardware/17804-programming-the-esp32-in-c-pwm-first-example.html?start=4#google_vignette
#include <driver/ledc.h>
int k;
//const int btn_inc = 16;
//const int btn_dec = 17;
const int maxFreq = 2000;
const int minFreq = 1000;
//unsigned long tim_btn_inc, tim_btn_dec;
//+++++++++++++++++++++++++++++++
// variables will change:
int freq = maxFreq;
int interval = 1; // variables will change:
/*
  //++++++++++++
  void frequencyChange()  //void somefunc()
  // your variable here
  {
  pinMode(16, INPUT_PULLUP);    //k++
  pinMode(17, INPUT_PULLUP);   //k--
  int k;
  if (digitalRead(16) == LOW) {
    k++;
  }
  if (digitalRead(17) == LOW) {
    k--;
  }
  //++++++++++++++ // put your setup code here, to run once:+++++++++++++++

  ledc_timer_config_t timerConfig = {
    .speed_mode = LEDC_LOW_SPEED_MODE,
    .duty_resolution = LEDC_TIMER_10_BIT,
    .timer_num = LEDC_TIMER_0,
    .freq_hz = k,              //+++++++++++++++++++++++++++++
    .clk_cfg = LEDC_AUTO_CLK
  };
  ledc_timer_config(&timerConfig);
  Serial.print("  k1 =  ");
  Serial.println(k);
  //+++++++++++++++++++++++++++++
  }
  //+++++++++++++++++++++++++++++++++
*/
void setup() {
  Serial.begin(115200);
  pinMode(32, INPUT_PULLUP);    //k++
  pinMode(33, INPUT_PULLUP);   //k--
  /*
    ledc_timer_config_t timerConfig = {
      .speed_mode = LEDC_LOW_SPEED_MODE,
      .duty_resolution = LEDC_TIMER_10_BIT,
      .timer_num = LEDC_TIMER_0,
      .freq_hz = 10000,              //+++++++++++++++++++++++++++++
      .clk_cfg = LEDC_AUTO_CLK
    };
    ledc_timer_config(&timerConfig);
  */

  ledc_channel_config_t channelConfig1 = {
    .gpio_num = 12,
    .speed_mode = LEDC_LOW_SPEED_MODE,
    .channel = LEDC_CHANNEL_0,
    .timer_sel = LEDC_TIMER_0,
    .duty = 512,
    .hpoint = 0
  };
  ledc_channel_config(&channelConfig1);


  ledc_channel_config_t channelConfig2 = {
    .gpio_num = 27,
    .speed_mode = LEDC_LOW_SPEED_MODE,
    .channel = LEDC_CHANNEL_1,
    .timer_sel = LEDC_TIMER_0,
    .duty = 512,
    .hpoint = 256
  };
  ledc_channel_config(&channelConfig2);
}


void loop()
{
}

//++++++++++++
void frequencyChange()  //void somefunc()
// your variable here
{
  if (digitalRead(32) == LOW) {
    k++;
    if (k > 18000) k = 18000;
    // Serial.println(k); //for debugging purposes
  }
  if (digitalRead(33) == LOW) {
    k--;
    if (k < 5000) k = 5000;
    //Serial.println(k); //for debugging purposes
  }

  ledc_timer_config_t timerConfig = {
    .speed_mode = LEDC_LOW_SPEED_MODE,
    .duty_resolution = LEDC_TIMER_10_BIT,
    .timer_num = LEDC_TIMER_0,
    .freq_hz = k,              //+++++++++++++++++++++++++++++
    .clk_cfg = LEDC_AUTO_CLK
  };
  ledc_timer_config(&timerConfig);

  //+++++++++++++++++++++++++++++++
  Serial.print("  k3 =  ");
  Serial.println(k);
  delay( 2 );
}

но не работатет

отдельный loop

frequencyChange() 

Ну так перенеси содержимое из функции frequencyChange() в функцию loop() или просто вызови её там.

ЗЫ: Я вообще перестал понимать ход мыслей и событий ТС…

3 лайка

Попробуйте перечиать и понять последний абзац сообщения №22.