Skocz do zawartości

ESP32 i servo driver I2C - nie działa w tasku?


ethanak

Pomocna odpowiedź

Chciałem sobie ułatwić życie i skorzystać z FreeRTOS-a...

Sprzęt:

ESP32 DevKit

Servo Driver - odpowiednik https://botland.com.pl/pl/sterowniki-serw/2447-pca9685-sterownik-serw-16-kanalowy-12-bitowy-pwm-i2c-adafruit-815.html

Serwo sztuk jedna, zasilane oddzielnie

Soft:

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

//#define USE_TASK 1

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

void start_pwm(void)
{
    pwm.begin();
    pwm.setPWMFreq(60);
}

void move_servo(void)
{
    static bool dir=false;
    static int ticks =  275;
    if (dir) {
        if (ticks <= 275) dir = false;
        else {
            ticks -= 10;
        }
    }
    else {
        if (ticks >= 475) dir = true;
        else {
            ticks += 10;
        }
    }
    pwm.setPWM(1,0,ticks);
    printf("Servo %d\n", ticks);
}


void servoTask(void *unused)
{
    start_pwm();
    for (;;) {
        move_servo();
        vTaskDelay(50);
    }
}

void setup()
{
    uint8_t q;
    Serial.begin(115200);
    Wire.begin();
    Wire.setClock(400000);
#ifdef USE_TASK
    xTaskCreate(servoTask,"servopulsar",10000,NULL,0,NULL);
#else
    start_pwm();
#endif
    
}

void loop()
{
#ifndef USE_TASK
    move_servo();
#endif
    vTaskDelay(50);
}

Rezultat:

Program działa bardzo ładnie, serwo się kiwa, serial monitor wyświetla sobie pozycje serwa, podgląd na szynie i2c:

dobry.thumb.png.ea22f991dc4af83cb910eb1a8dc527e2.png

Po odkomentowaniu USE_TASK:

Monitor radośnie wyświetla pozycje serwa, ale serwo nie ma najmniejszego zamiaru się ruszyć. Podgląd tym razem wygląda tak:

niedobry.thumb.png.b24b7b02f78841c750681fd4ac76c1cf.png

Po załadowaniu pierwszej wersji muszę odłączyć zasilanie, aby driver zaczął gadać z ESP.

Co robię źle?

 

Edytowano przez ethanak
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.