This works so I want to write it down:
#include <SoftwareSerial.h>
SoftwareSerial xbee_serial(2, 3);
#include <string.h> // we'll need this for subString
#define MAX_STRING_LEN 20 // like 3 lines above, change as needed.
int in_LED = 10;
int out_LED = 11;
int input = 2;
int sendval;
//serial stuff
const char EOPmarker = '.'; //This is the end of packet marker
char serialbuf[32]; //This gives the incoming serial some room. Change it if you want a longer incoming.
void setup(){
pinMode(in_LED, OUTPUT);
pinMode(out_LED, OUTPUT);
pinMode(input, INPUT);
Serial.begin(9600);
xbee_serial.begin(9600);
xbee_serial.print("0,0,0.");
}
void loop(){
if (xbee_serial.available() > 0) {
static int bufpos = 0;
char inchar = xbee_serial.read();
if (inchar != EOPmarker) {
serialbuf[bufpos] = inchar;
bufpos++;
}
else {
serialbuf[bufpos] = 0; //restart the buff
bufpos = 0; //restart the position of the buff
Serial.println(atoi(subStr(serialbuf, "," , 1)));
analogWrite(in_LED, atoi(subStr(serialbuf, "," , 1)));
sendval = map(analogRead(input), 0, 1023, 0, 255);
xbee_serial.print(sendval); // Value that it sends over the serial
xbee_serial.print(",");
xbee_serial.print("100"); //This second byte is for the purpose of the program, it is not being used.
xbee_serial.print("."); //EOP marker
analogWrite(out_LED , sendval);
}
}
delay(10);
}
char* subStr (char* input_string, char *separator, int segment_number) {
char *act, *sub, *ptr;
static char copy[MAX_STRING_LEN];
int i;
strcpy(copy, input_string);
for (i = 1, act = copy; i <= segment_number; i++, act = NULL) {
sub = strtok_r(act, separator, &ptr);
if (sub == NULL) break;
}
return sub;
}