I have sent and parsed a string over serial and then putting this string into the DMX master library, however i keep getting some random things happening, it would appear that when a value is sent between 10-100 it is moving over to another part of the dmx master library and giving some very bizarre results. I'm hoping someone can look over my code below and see if anything stands out as to why i may be getting these un expected results.
#include <DmxMaster.h>
char buffer[256];
String st, channel, msgvalue;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(115200);
while(Serial.available())
Serial.read();
}
void loop() {
if (Serial.available() > 0) {
int index=0;
delay(300); // let the buffer fill up
int numChar = Serial.available();
if (numChar>180) {
numChar=180;
}
while (numChar--) {
buffer[index++] = Serial.read();
}
splitString(buffer);
}
}
void splitString(char* data) {
Serial.print("Data entered: ");
Serial.println(data);
char* parameter;
parameter = strtok (data, ":"); // Note that this is a space before the comma in " , "
while (parameter != NULL) {
setLED(parameter);
parameter = strtok (NULL, ":"); // space before the comma in " , "
}
// Clear the text and serial buffers
for (int x=0; x<180; x++) {
buffer[x]='\0';
}
while(Serial.available())
Serial.read();}
void setLED(char* data) {
if ((data[0] == 'a') || (data[0] == 'A')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c1val=Ans;
Serial.print("C1 = ");
Serial.println(c1val);
DmxMaster.write(1,c1val);
}
if ((data[0] == 'b') || (data[0] == 'B')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c2val=Ans;
Serial.print("C2 = ");
Serial.println(Ans);
DmxMaster.write(2,c2val);
}
if ((data[0] == 'c') || (data[0] == 'C')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c3val=Ans;
Serial.print("C3 = ");
Serial.println(Ans);
DmxMaster.write(3,c3val);
}
if ((data[0] == 'd') || (data[0] == 'D')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c4val=Ans;
Serial.print("C4 = ");
Serial.println(Ans);
DmxMaster.write(4,c4val);
}
if ((data[0] == 'e') || (data[0] == 'E')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c5val=Ans;
Serial.print("C5 = ");
Serial.println(Ans);
DmxMaster.write(5,c5val);
}
if ((data[0] == 'f') || (data[0] == 'F')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c6val=Ans;
Serial.print("C6 = ");
Serial.println(Ans);
DmxMaster.write(6,c6val);
}
if ((data[0] == 'g') || (data[0] == 'G')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c7val=Ans;
Serial.print("C7 = ");
Serial.println(Ans);
DmxMaster.write(7,c7val);
}
if ((data[0] == 'h') || (data[0] == 'H')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c8val=Ans;
Serial.print("C8 = ");
Serial.println(Ans);
DmxMaster.write(8,c8val);
}
if ((data[0] == 'i') || (data[0] == 'I')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c9val=Ans;
Serial.print("C9 = ");
Serial.println(Ans);
DmxMaster.write(9,c9val);
}
if ((data[0] == 'j') || (data[0] == 'J')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c10val=Ans;
Serial.print("C10 = ");
Serial.println(Ans);
DmxMaster.write(10,c10val);
}
if ((data[0] == 'k') || (data[0] == 'K')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c11val=Ans;
Serial.print("C11 = ");
Serial.println(Ans);
DmxMaster.write(11,c11val);
}
if ((data[0] == 'l') || (data[0] == 'L')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c12val=Ans;
Serial.print("C12 = ");
Serial.println(Ans);
DmxMaster.write(12,c12val);
}
if ((data[0] == 'm') || (data[0] == 'M')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c13val=Ans;
Serial.print("C13 = ");
Serial.println(Ans);
DmxMaster.write(13,c13val);
}
if ((data[0] == 'n') || (data[0] == 'N')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c14val=Ans;
Serial.print("C14 = ");
Serial.println(Ans);
DmxMaster.write(14,c14val);
}
if ((data[0] == 'o') || (data[0] == 'O')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c15val=Ans;
Serial.print("C15 = ");
Serial.println(Ans);
DmxMaster.write(15,c15val);
}
if ((data[0] == 'p') || (data[0] == 'P')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c16val=Ans;
Serial.print("C16 = ");
Serial.println(Ans);
DmxMaster.write(16,c16val);
}
if ((data[0] == 'q') || (data[0] == 'Q')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c17val=Ans;
Serial.print("C17 = ");
Serial.println(Ans);
DmxMaster.write(17,c17val);
}
if ((data[0] == 'r') || (data[0] == 'R')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c18val=Ans;
Serial.print("C18 = ");
Serial.println(Ans);
DmxMaster.write(18,c18val);
}
if ((data[0] == 's') || (data[0] == 'S')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c19val=Ans;
Serial.print("C19 = ");
Serial.println(Ans);
DmxMaster.write(19,c19val);
}
if ((data[0] == 't') || (data[0] == 'T')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c20val=Ans;
Serial.print("C20 = ");
Serial.println(Ans);
DmxMaster.write(20,c20val);
}
if ((data[0] == 'u') || (data[0] == 'U')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c21val=Ans;
Serial.print("C21 = ");
Serial.println(Ans);
DmxMaster.write(21,c21val);
}
if ((data[0] == 'v') || (data[0] == 'V')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c22val=Ans;
Serial.print("C22 = ");
Serial.println(Ans);
DmxMaster.write(22,c22val);
}
if ((data[0] == 'w') || (data[0] == 'W')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c23val=Ans;
Serial.print("C23 = ");
Serial.println(Ans);
DmxMaster.write(23,c23val);
}
if ((data[0] == 'x') || (data[0] == 'X')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
int c24val=Ans;
Serial.print("C24 = ");
Serial.println(Ans);
DmxMaster.write(24,c24val);
}
}
DMX512_pi_arduino_final.ino (8.41 KB)