Bonjour
Je suis en train d'essayer de piloter une LED RGB avec le PWM des GPIO 25, 26 et 27 de mon ESP32. Je crois donc comprendre qu'il faut un canal par GPIO pour piloter mes 3 composantes.
Voici mon code:
void SetReadyLEDColor(unsigned int R, unsigned int G, unsigned int B)
{
ledcWrite(0,R);
ledcWrite(1,G);
ledcWrite(2,B);
}
Seulement avec "SetReadyLEDColor(255,0,0)", j'ai bien le rouge allumé à fond, mais avec "(0,255,0)" j'obtient du violet (donc rouge+bleu à fond) et avec "(0,0,255)" j'ai du jaune (rouge+vert à fond).
Je ne dois pas avoir bien compris le principe des canaux, si vous pouviez m'aider SVP?
Bonjour et merci bien de ta réponse.
Je pense faire ce qu'il faut en définissant bien les 3 canaux, en les attachant chacun à un GPIO, mais modifier les valeurs d'un canal semble modifier le comportement de plusieurs GPIO, c'est bien ce que j'ai écrit avant. J'aimerais savoir ce qui est faux dans mon code, SVP?
Malheureusement l'exemple que tu donnes ne crée qu'un seul canal. Je fais, il me semble la même chose, mais pour 3 paires de canal/GPIO.
Bonjour,
de mémoire (covidée), il y a 2 canaux par timer, donc pour 3 canaux il faut initialiser 2 timers ...
je reviens quand j'aurai l'esprit un peu + clair
uint32_t me_led_sig_freq = 5000;
const int me_led_sig_resolution = 8;
ledcSetup(LEDC_CHANNEL_0, me_led_sig_freq, me_led_sig_resolution);
etc.
void SetReadyLEDColor(unsigned int R, unsigned int G, unsigned int B)
{
ledcWrite(LEDC_CHANNEL_0,R);emphasized text
ledcWrite(LEDC_CHANNEL_1,G);
ledcWrite(LEDC_CHANNEL_2,B);
}
void SetReadyLEDColor(unsigned int R, unsigned int G, unsigned int B)
{
ledcWrite(LEDC_CHANNEL_0,R);
ledcWrite(LEDC_CHANNEL_1,G);
ledcWrite(LEDC_CHANNEL_2,B);
}
ça me dit que les valeurs LEDC_CHANNEL_X ne sont pas définies dans ce "scope", il faut inclure un fichier?
J'ai trouvé dans ce fichier esp-idf/ledc_types.h at 20847eeb96c486629a678d6ffbe73670013fb771 · espressif/esp-idf · GitHub
mais c'est une enum, donc c'est LEDC_CHANNEL_N = N, ça revient à ce que j'écrivais avant. Et effectivement, ça donne le même résultat.
J'ai essayé de mettre les channels 0, 8 et 14 et même en utilisant d'autres GPIO, mais toujours pareil, SetReadyLEDColor(255,0,0) fait du rouge, (0,255,0) du violet et (0,0,255) du jaune
Et je viens de tester:
Avec (255,255,0), j'ai du bleu, avec (255,0,255), j'ai du vert, avec (255,255,255), j'ai un blanc très peu puissant. C'est complètement bizarre!
Elles sont câblées comment tes LEDs. Parce que ce que tu décris ressemble fort au pilotage de LEDs en anode commune. Dans ce cas l'argument doit être complémenté (255 - valeur)
bien vu, of course !
tu peux aussi simplement inverser les signaux dans la matrice gpio :
GPIO.func_out_sel_cfg[GPIO_RGBLED_R].inv_sel = 1; // invert the output of GPIO matrix
etc.
Alors oui, c'est effectivement une LED PWM à anode commune, je n'ai pas pensé à ça.
Et je viens de tester, c'était bien ça, ça marche nickel maintenant.
J'aurais dû essayer effectivement. Quelle perspicacité, bravo et merci!