From 321b52f3a00758c7d17069e5da0d95fc70c36473 Mon Sep 17 00:00:00 2001 From: Valentin Boulanger Date: Tue, 7 Feb 2023 18:41:44 +0100 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20du=20traitement=20des=20com?= =?UTF-8?q?mandes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dmxbox.ino | 46 +++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/dmxbox.ino b/dmxbox.ino index 7aaeb4c..6f71801 100644 --- a/dmxbox.ino +++ b/dmxbox.ino @@ -1,36 +1,52 @@ #include -String chaine = ""; +//Détail des trames +//Réception +//Demande de mise à jour d'un canal 0xC 0xCANAL 0xVALUE +//Demande de version 0xD +//Envoi +//Envoi d'un status prêt 0xA +//Envoi d'un status de mise à jour réussie 0xE +//Envoi de la version firmware 0xD VERSION -//Traite la commande entrante -void traiterCommande(){ - //Récupération version - if(chaine == "VERSION") Serial.println("DMXBOX V1.0.0"); - //Affectation canal - else if(chaine.length() == 6) setCanal(chaine.substring(0,3).toInt(), chaine.substring(3,6).toInt()); -} + +#define FIRMWARE_VERSION "DMXBOX V0.0.2" + +unsigned int receiveState = 0; +unsigned int channel = 0; //Modifie un canal DMX512 -void setCanal(int number, int value){ +void setCanal(unsigned int number, unsigned int value){ DMXSerial.write(number, value); - Serial.println("OK"); + Serial.write(0xE); } //Initialisation void setup() { Serial.begin(9600); DMXSerial.init(DMXController); + Serial.write(0xA); } //Interception des commandes de canaux void loop() { if(Serial.available()) { - char c = Serial.read(); - if(c == '\n' || c == '\r'){ - traiterCommande(); - chaine = ""; + unsigned int received = Serial.read(); + if(received == 0xD && receiveState == 0) { + Serial.write(0xD); + Serial.println(FIRMWARE_VERSION); + } + //Demande de paramétrage canal + else if(received == 0xC && receiveState == 0) receiveState = 1; + else if(receiveState == 1) { + channel = received; + receiveState = 2; + } + else if(receiveState == 2){ + setCanal(channel, received); + receiveState = 0; + channel = 0; } - else chaine += c; } }