Comment éditer le fichier custom_port.cpp

Questions sur les codes officiels du core arpschuino
Questions about official codes from arpschuino core
Avatar du membre
RitoonL
Administrateur du site
Messages : 116
Enregistré le : dim. 31 oct. 2021 10:21

Re: Comment éditer le fichier custom_port.cpp

Message 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
Administrateur - Forum arpschuino
Jacques
Messages : 278
Enregistré le : dim. 31 oct. 2021 19:37

Re: Comment éditer le fichier custom_port.cpp

Message 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.
Jacques
Messages : 278
Enregistré le : dim. 31 oct. 2021 19:37

Re: Comment éditer le fichier custom_port.cpp

Message par Jacques »

Oups j'avais pa vu, ma réponse fait doublon avec celle d'Eric
Alchypit
Messages : 12
Enregistré le : jeu. 21 déc. 2023 14:14

Re: Comment éditer le fichier custom_port.cpp

Message 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.
Jacques
Messages : 278
Enregistré le : dim. 31 oct. 2021 19:37

Re: Comment éditer le fichier custom_port.cpp

Message 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/
Jacques
Messages : 278
Enregistré le : dim. 31 oct. 2021 19:37

Re: Comment éditer le fichier custom_port.cpp

Message 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.
Alchypit
Messages : 12
Enregistré le : jeu. 21 déc. 2023 14:14

Re: Comment éditer le fichier custom_port.cpp

Message 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
Avatar du membre
RitoonL
Administrateur du site
Messages : 116
Enregistré le : dim. 31 oct. 2021 10:21

Re: Comment éditer le fichier custom_port.cpp

Message 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 ...
Administrateur - Forum arpschuino
Jacques
Messages : 278
Enregistré le : dim. 31 oct. 2021 19:37

Re: Comment éditer le fichier custom_port.cpp

Message 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);
  }
Répondre