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

добрый день

ошибка компиляции = Error compiling for board ESP32-WROOM-DA Module.
как исправить ?
программа основана на этой стороне
https://www.i-programmer.info/programming/148-hardware/17804-programming-the-esp32-in-c-pwm-first-example.html?start=4

#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);
}

Полное сообщение об ошибке надобно. Можно и скриншот.

У меня твой код компилируется, правда, с warningами

C:/Users/Galinka/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: C:\Users\Galinka\AppData\Local\arduino\sketches\CD8AB3A21A9E273C9FC62130A5A9B913\core\core.a(main.cpp.o):(.literal._Z8loopTaskPv+0xc): undefined reference to setup()' C:/Users/Galinka/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: C:\Users\Galinka\AppData\Local\arduino\sketches\CD8AB3A21A9E273C9FC62130A5A9B913\core\core.a(main.cpp.o):(.literal._Z8loopTaskPv+0x10): undefined reference to loop()’
C:/Users/Galinka/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: C:\Users\Galinka\AppData\Local\arduino\sketches\CD8AB3A21A9E273C9FC62130A5A9B913\core\core.a(main.cpp.o): in function loopTask(void*)': C:\Users\Galinka\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/main.cpp:55:(.text._Z8loopTaskPv+0x1b): undefined reference to setup()’
C:/Users/Galinka/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: C:\Users\Galinka\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/main.cpp:64:(.text._Z8loopTaskPv+0x34): undefined reference to `loop()’
collect2.exe: error: ld returned 1 exit status
exit status 1

Compilation error: exit status 1

И зачем тогда было это делать?

И, кстати, наличие сетар и луп уже не обязательное условие?

Ну, оно ж Вам сказало – у Вас нет функций setup и loop, а они обязаны быть. Хоть пустые, но должны быть представлены..

1 лайк

Вот setup и loop и ошибка
#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 loop() {
// put your main code here, to run repeatedly:

}
C:/Users/Galinka/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: C:\Users\Galinka\AppData\Local\arduino\cores\96ed966dff11f17f090c6b6aaac3e37c\core.a(main.cpp.o):(.literal._Z8loopTaskPv+0xc): undefined reference to setup()' C:/Users/Galinka/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: C:\Users\Galinka\AppData\Local\arduino\cores\96ed966dff11f17f090c6b6aaac3e37c\core.a(main.cpp.o): in function loopTask(void*)‘:
C:\Users\Galinka\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.3\cores\esp32/main.cpp:55:(.text._Z8loopTaskPv+0x1b): undefined reference to `setup()’
collect2.exe: error: ld returned 1 exit status
exit status 1

Compilation error: exit status 1

Вот нахера такому учишь???

@gl2, пожалуйста, никогда не приводите картинкой то, что можно вставить текстом - код, сообщения об ошибках и т.д. И научитесь вставлять код! Во втором сообщении всё красиво, а в 10 опять каша! Сами не видите что ли?

нормально для кода есть <>, где оно ?

нашел
введите или вставьте сюда код#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 loop() {
  // put your main code here, to run repeatedly:

}

да и вообще, если это не генератор для катушки Мишина к чему такой генератор )))

Хорошо. В коде появилась функция loop(), но по-прежнему отсутствует функция setup(). По смыслу, вероятно Вашу setupPWM() можно в setup() переименовать. Тогда всё будет “по Ардуински”. Конкретно эта ошибка уйдёт.

Вы отличаете друг от друга слова “setupPWM” и “setup”? Внимательно посмотрите! Подсказка: первое на три буквы длиннее второго. Вот Вас система на три буквы и посылает. Нет у Вас никакого setup, а надо, о чём я Вам уже говорил.

Кстати, будете так вставлять код, мы тоже будем посылать Вас на такое же количество букв, не обижайтесь и не говорите, что Вас не предупреждали.

2 лайка

А грубить не надо, никто ВАС не заставлял заходит сюда и делать комментарии не на тему, посматрите как другие пытаются помочь , например сообщение #16, весь лишних слов.

Большое спасибо

В таком случае поставьте “вопрос решён”

А теме место в ЧЧ.