Fusion de deux programmes

Bonjour, je viens ici pour avoir de l'aide. Je passe mon oral de BTS mercredi 05/06/2024 (Oui, je suis légèrement en retard ^^'). Suite à un souci de commande, j'ai reçu mon ESP32 un peu tard et je me suis donc rendu compte que l'ESP32 n'est pas compatible avec la bibliothèque "DmxSimple.h". Je vous mets en lien mon programme qui marche avec un HC-05 connecté en Bluetooth et l'application AppInventor.

// Déclaration des variables pour les couleurs
int coulRouge;
int coulVert;
int coulBleu;
int coulBlanc;

#include <DmxSimple.h> // Inclusion de la bibliothèque DMXSimple pour le contrôle DMX
// Déclaration des broches pour le Bluetooth (non utilisées dans ce code)
const int btRxPin = 0;
const int btTxPin = 1;
const unsigned long displayTempo = 500; // Intervalle de 500 ms pour l'affichage
unsigned long displayMillis = millis(); // Chrono initialisé à l'heure actuelle

void setup() {
  Serial.begin(9600); // Initialisation de la communication série à 9600 bauds
  DmxSimple.write(1, 255); // Initialisation du canal DMX 1 à la valeur maximale (255)
}
void loop() {
  // Lecture des données série
  while (Serial.available()) {
    String btRx = Serial.readStringUntil('\n'); // Lecture jusqu'à nouvelle ligne
    btRx.trim(); // Nettoyage de la chaîne
    btRx.toUpperCase(); // Conversion en majuscule
    btRx.replace(" ", ""); // Suppression des espaces
    
    // Analyse de la commande reçue et mise à jour des variables de couleur
    if (btRx.startsWith("BLANC")) {
      btRx.replace("BLANC", ""); // On efface "BLANC" pour ne garder que la valeur
      coulBlanc = btRx.toInt(); // Conversion de la chaîne en entier
    }
    if (btRx.startsWith("BLEU")) {
      btRx.replace("BLEU", ""); // On efface "BLEU" pour ne garder que la valeur
      coulBleu = btRx.toInt(); // Conversion de la chaîne en entier
    }
    if (btRx.startsWith("VERT")) {
      btRx.replace("VERT", ""); // On efface "VERT" pour ne garder que la valeur
      coulVert = btRx.toInt(); // Conversion de la chaîne en entier
    }
    if (btRx.startsWith("ROUGE")) {
      btRx.replace("ROUGE", ""); // On efface "ROUGE" pour ne garder que la valeur
      coulRouge = btRx.toInt(); // Conversion de la chaîne en entier
    }
  }
  // Affichage des valeurs de couleur toutes les 500 ms
  if (millis() - displayMillis >= displayTempo) {
    Serial.println("");
    Serial.println("Rouge =\t" + String(coulRouge));
    Serial.println("Vert =\t" + String(coulVert));
    Serial.println("Bleu =\t" + String(coulBleu));
    Serial.println("Blanc =\t" + String(coulBlanc));
    displayMillis = millis(); // Redémarrage du chrono
  }
}

Et je transfère aussi mon programme qui permet de modifier les couleurs sur le spot mais manuellement en ayant recréé la liaison DMX.

// Déclaration d'un tableau de 192 éléments pour stocker les valeurs DMX.
int TabDMX[192];
void setup() 
{
  // Initialisation de toutes les valeurs du tableau à 0.
  for (int i = 0; i < 192; i++)
    TabDMX[i] = 0;
  // Configuration du pin 1 en mode sortie.
  pinMode(1, OUTPUT);  
  // Initialisation des couleurs.
  // Couleur Rouge :
  TabDMX[1]=0;
  // Couleur Vert :
  TabDMX[2]=0;
  // Couleur Bleu :
  TabDMX[3]=0;
  // Couleur Blanche :
  TabDMX[4]=0;
}
void loop() 
{
  // Début du message DMX (MBB).
  digitalWrite(1, 1);
  delay(10);
  // Pause entre le message DMX et le BREAK.
  digitalWrite(1, 0);
  delayMicroseconds(88);
  // Début du BREAK.
  digitalWrite(1, 1);
  delayMicroseconds(8);
  // Envoi des canaux DMX via la communication série.
  Serial.begin(250000, SERIAL_8N2); // Début de la communication série à 250000 bauds.
  for(int n = 0; n < 192; n++)
  {
    Serial.write(TabDMX[n]); // Envoi de chaque valeur du tableau DMX.
  }
  Serial.end(); // Fin de la communication série.
  // Fin du message DMX (MBB).
  digitalWrite(1, 1);
  delay(5);
}

Je ne sais pas si c'est compréhensible, mais pour faire court, je voudrais gérer le spot grâce à l'application sur AppInventor avec un Upesy ESP32 Wroom DevKit.
V2_DMX.zip (28,7 Ko)
(application AppInventor)

Bonjour autentic

Le problème est où "caser" les variables:

int coulRouge;
int coulVert;
int coulBleu;
int coulBlanc;

dans le deuxième programme, dans quels autres variables?

A+
Cordialement
jpbbricole

Bonjour Jpbbricole,
Les variables que tu a envoyées je pense correspondent a cela :

  // Initialisation des couleurs.
  // Couleur Rouge :
  TabDMX[1]=0;
  // Couleur Vert :
  TabDMX[2]=0;
  // Couleur Bleu :
  TabDMX[3]=0;
  // Couleur Blanche :
  TabDMX[4]=0;

hello
à tout hasard
ICI

Bonsoir Dfgh,
J'imagine que c'est une bibliotèque pour remplacer DmxSimple, je vais me pencher dessus s'en doute ce soir mais le soucis c'est que le temps est très limité donc je ne sais pas si la possibilité de reprendre tous ca seras possible ^^'

Bonsoir autentic
Pour ce qui est de la compatibilité de la bibliothèque, je ne peut rien faire pour toi :woozy_face:

J'ai mixé tes 2 programmes sans pouvoir essayer, j'ai compilé avec un Mega.
Le seul problème est que la liaison Bluetooth et DMX utilisent le même port Serial, à toi, en fonctions de ta machine d'attribuer le bon port Serial.

Ler programme:

int TabDMX[192];
// Déclaration des variables pour les couleurs
int coulRouge;
int coulVert;
int coulBleu;
int coulBlanc;

#include <DmxSimple.h> // Inclusion de la bibliothèque DMXSimple pour le contrôle DMX
// Déclaration des broches pour le Bluetooth (non utilisées dans ce code)
const int btRxPin = 0;
const int btTxPin = 1;
const unsigned long displayTempo = 500; // Intervalle de 500 ms pour l'affichage
unsigned long displayMillis = millis(); // Chrono initialisé à l'heure actuelle

void setup() 
{
	Serial.begin(9600); // Initialisation de la communication série à 9600 bauds
	DmxSimple.write(1, 255); // Initialisation du canal DMX 1 à la valeur maximale (255)
	// Initialisation de toutes les valeurs du tableau à 0.
	for (int i = 0; i < 192; i++)
	{
		TabDMX[i] = 0;
	}
	// Configuration du pin 1 en mode sortie.
	pinMode(1, OUTPUT);
	// Initialisation des couleurs.
	// Couleur Rouge :
	TabDMX[1]=0;
	// Couleur Vert :
	TabDMX[2]=0;
	// Couleur Bleu :
	TabDMX[3]=0;
	// Couleur Blanche :
	TabDMX[4]=0;
}
void loop() {
	// Lecture des données série
	while (Serial.available()) {
		String btRx = Serial.readStringUntil('\n'); // Lecture jusqu'à nouvelle ligne
		btRx.trim(); // Nettoyage de la chaîne
		btRx.toUpperCase(); // Conversion en majuscule
		btRx.replace(" ", ""); // Suppression des espaces
		
		// Analyse de la commande reçue et mise à jour des variables de couleur
		if (btRx.startsWith("BLANC")) {
			btRx.replace("BLANC", ""); // On efface "BLANC" pour ne garder que la valeur
			coulBlanc = btRx.toInt(); // Conversion de la chaîne en entier
			TabDMX[4] = coulBlanc;
		}
		if (btRx.startsWith("BLEU")) {
			btRx.replace("BLEU", ""); // On efface "BLEU" pour ne garder que la valeur
			coulBleu = btRx.toInt(); // Conversion de la chaîne en entier
			TabDMX[3] = coulBleu;
		}
		if (btRx.startsWith("VERT")) {
			btRx.replace("VERT", ""); // On efface "VERT" pour ne garder que la valeur
			coulVert = btRx.toInt(); // Conversion de la chaîne en entier
			TabDMX[2] = coulVert;
		}
		if (btRx.startsWith("ROUGE")) {
			btRx.replace("ROUGE", ""); // On efface "ROUGE" pour ne garder que la valeur
			coulRouge = btRx.toInt(); // Conversion de la chaîne en entier
			TabDMX[1] = coulRouge;
		}
	}
	// Affichage des valeurs de couleur toutes les 500 ms
	if (millis() - displayMillis >= displayTempo) {
		Serial.println("");
		Serial.println("Rouge =\t" + String(coulRouge));
		Serial.println("Vert =\t" + String(coulVert));
		Serial.println("Bleu =\t" + String(coulBleu));
		Serial.println("Blanc =\t" + String(coulBlanc));
		displayMillis = millis(); // Redémarrage du chrono
	}
}

void envoiDmx()
{
	// Début du message DMX (MBB).
	digitalWrite(1, 1);
	delay(10);
	// Pause entre le message DMX et le BREAK.
	digitalWrite(1, 0);
	delayMicroseconds(88);
	// Début du BREAK.
	digitalWrite(1, 1);
	delayMicroseconds(8);
	// Envoi des canaux DMX via la communication série.
	Serial.begin(250000, SERIAL_8N2); // Début de la communication série à 250000 bauds.
	for(int n = 0; n < 192; n++)
	{
		Serial.write(TabDMX[n]); // Envoi de chaque valeur du tableau DMX.
	}
	Serial.end(); // Fin de la communication série.
	// Fin du message DMX (MBB).
	digitalWrite(1, 1);
	delay(5);
}

A+
Cordialement
jpbbricole

Merci beaucoup je regarde ca des la première heure demain, je donné retour demain :slight_smile:

Salut Jpbbricole,
Je viens de regarder en détail le programme et la bibliothèque DmxSimple n'est pas compatible avec l'ESP32 et mon deuxième programme remplace cette bibliothèque, il correspond a la trame DMX.
Le premier programme correspond au programme pour un HC-05 il faut donc pouvoir modifier la couleurs avec l'esp.
Je vais regarder un peu la bibliothèque qu'on ma envoyer plus haut.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.