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; } }