Page 2 sur 2

Re: Comment éditer le fichier custom_port.cpp

Posté : ven. 5 janv. 2024 16:27
par RitoonL
pour le port B il suffit de le configurer normalement, si tu veux 4 steppers tu mets le port B en mode stepper dans l'interface. Ensuite tu peux le configurer comme écrit dans le tuto stepper

Re: Comment éditer le fichier custom_port.cpp

Posté : sam. 6 janv. 2024 13:32
par Jacques
Hello,
Dans ton cas il faut mettre le portA en custom et le portB en mode stepper normal, ce qui te permet de le configurer.
Le mode custom se définit par port, pas pour l'ensemble de la carte.

Re: Comment éditer le fichier custom_port.cpp

Posté : sam. 6 janv. 2024 13:34
par Jacques
Oups j'avais pa vu, ma réponse fait doublon avec celle d'Eric

Re: Comment éditer le fichier custom_port.cpp

Posté : lun. 8 janv. 2024 10:46
par Alchypit
Bonjour,

Super, bien compris pour le port A en mode custom et le port B, je le configure avec l'interface web.

Pour la fonction void action_A, j'ai fait cela qu'en pensez vous ? cela le fait ? je vais repartir en résidence fin de semaine pour faire tout les derniers réglages.

Code : Tout sélectionner

//////////// port A //////////////

void setupA()   //this loop is executed once at startup
{   
portA.setNbDmxChannels(8);

for(int i=0;i<8;i++)    /// init des pins du port B en mode sortie ///
{
pinMode(Arp[i], OUTPUT);
}
}

void action_A(const std::vector<uint8_t> & DMXslice)  //this loop is executed at each signal reception
{
uint16_t m_target_level[4];

for (int i = 0; i < 4; ++i)   ///action pour les sortie PWM, DMX 16 bits avec courbes pour leds///
{
m_target_level[i] = DMXslice[i * 2] << 8 | DMXslice[i * 2 + 1];               // level= DMXslice[i*2] << 8 | DMXslice[i*2+1];
uint32_t level32 = ((m_target_level[i] + 1) * (m_target_level[i] + 1)) - 1;  // uint32_t level32 =((level+1)*(level+1))-1;
m_target_level[i] = level32 >> (32 - 14);                             // level = level32 >>(32-m_pwmRes); // 14 bits résolution optimale

analogWrite(Arp[i], m_target_level[i]);   // ecrit en sortie analogique la valeur de m_target_level[i] dans Arp[i]
}

for (int i = 4; i < 8; ++i)   ///action pour les sortie ONOFF///
{
if (DMXslice[i] > 127)
{
digitalWrite(Arp[i], HIGH);
}
else
{
digitalWrite(Arp[i], LOW);
}
}
}

void at_each_loop_A()   //this loop is executed continuously
{
}

Merci pour votre patience et vos explications !
Bonne journée.

Re: Comment éditer le fichier custom_port.cpp

Posté : lun. 8 janv. 2024 11:45
par Jacques
Oui ça m'a l'air pas mal pour la fonction action_A()
A la place de 32-14, mettre directement 18 mais c'est un détail.
Dans le setup par contre il faut configurer les sorties PWM :
https://randomnerdtutorials.com/esp32-pwm-arduino-ide/

Re: Comment éditer le fichier custom_port.cpp

Posté : lun. 8 janv. 2024 12:20
par Jacques
Ha oui j'oubliais : avec l'esp32, on n'utilise pas analogWrite(channel, dutycycle) mais ledcWrite(channel, dutycycle)
Comme expliqué dans le lien du précédent post, ce sont des spécificités ESP32 pour le PWM.

Re: Comment éditer le fichier custom_port.cpp

Posté : mar. 9 janv. 2024 21:20
par Alchypit
ok alors voila la retouche :

Code : Tout sélectionner

//////////// port A //////////////

// the number of the LED pin
const int ledPin = 16;  // 16 corresponds to GPIO16

// setting PWM properties
const int freq = 5000;
const int ledChannel = 0; //il existe des channels de 0 à 15
const int resolution = 14;

void setupA()   //this loop is executed once at startup
{   
portA.setNbDmxChannels(8);

for(int i=0;i<8;i++)    /// init des pins du port B en mode sortie ///
{
pinMode(Arp[i], OUTPUT);
}
 // configure LED PWM functionalitites
  ledcSetup(ledChannel, freq, resolution);
  
  // attach the channel to the GPIO to be controlled
  ledcAttachPin(ledPin, ledChannel);
}

void action_A(const std::vector<uint8_t> & DMXslice)  //this loop is executed at each signal reception
{
uint16_t m_target_level[4];

for (int i = 0; i < 4; ++i)   ///action pour les sortie PWM, DMX 16 bits avec courbes pour leds///Arp0Arp1Arp2Arp3
{
m_target_level[i] = DMXslice[i * 2] << 8 | DMXslice[i * 2 + 1];               // level= DMXslice[i*2] << 8 | DMXslice[i*2+1];
uint32_t level32 = ((m_target_level[i] + 1) * (m_target_level[i] + 1)) - 1;  // uint32_t level32 =((level+1)*(level+1))-1;
m_target_level[i] = level32 >> (32-resolution);                             // level = level32 >>(32-resolution); // 14 bits résolution optimale

ledcWrite(Arp[i], m_target_level[i]);   // écrit en sortie analogique la valeur de m_target_level[i] dans Arp[i]
}

for (int i = 4; i < 8; ++i)   ///action pour les sortie ONOFF///Arp4Arp5Arp6Arp7
{
if (DMXslice[i] > 127)
{
digitalWrite(Arp[i], HIGH);
}
else
{
digitalWrite(Arp[i], LOW);
}
}
}

void at_each_loop_A()   //this loop is executed continuously
{

}
Je vais tester cela et je vous tiens au courant !

Merci :D

Re: Comment éditer le fichier custom_port.cpp

Posté : mer. 10 janv. 2024 19:22
par RitoonL
c'est cool, tu avances bien :)

heureux que le custom port serve aux utilisateurs. Il faut certes mettre les mains dans le cambouis, mais vu qu'on ne peut pas couvrir TOUS les cas dans le firmware, ça permet de pouvoir gérer des cas particuliers. Dans le spectacle, la limite reste l'imagination. Ce que les "grandes" entreprises proposent ne le permettent pas et on est fiers de pouvoir apporter un peu de flexibilité dans ce monde totalement fermé, permettre à des professionnels de rêver pour faire rêver les spectateurs ...

Re: Comment éditer le fichier custom_port.cpp

Posté : mer. 10 janv. 2024 20:06
par Jacques
Oui bravo c'est presque ça.
Mais il faut configurer chaque output PWM individuellement. par exemple avec une boucle for :

Code : Tout sélectionner

  for(int i=0;i<4;i++)
  {
    // configure LED PWM functionalitites
    ledcSetup(i, freq, resolution);
    
    // attach the channel to the GPIO to be controlled
    ledcAttachPin(Arp[i], i);
  }