#include #include #include SoftwareSerial *sserial = NULL; boolean connected = false; int Str2int (String Str_value) { char buffer[10]; //max length is three units Str_value.toCharArray(buffer, 10); int int_value = atoi(buffer); return int_value; } void split(String results[], int len, String input, char spChar) { String temp = input; for (int i=0; ibegin(baud_); Serial.println("ss OK"); } void SS_write(String data) { int len = data.length()+1; char buffer[len]; data.toCharArray(buffer,len); Serial.println("ss OK"); sserial->write(buffer); } void SS_read(String data) { char c = sserial->read(); Serial.println(c); } void pulseInHandler(String data){ int pin = Str2int(data); long duration; if(pin <=0){ pinMode(-pin, INPUT); duration = pulseIn(-pin, LOW); }else{ pinMode(pin, INPUT); duration = pulseIn(pin, HIGH); } Serial.println(duration); } void pulseInSHandler(String data){ int pin = Str2int(data); long duration; if(pin <=0){ pinMode(-pin, OUTPUT); digitalWrite(-pin, HIGH); delayMicroseconds(2); digitalWrite(-pin, LOW); delayMicroseconds(5); digitalWrite(-pin, HIGH); pinMode(-pin, INPUT); duration = pulseIn(-pin, LOW); }else{ pinMode(pin, OUTPUT); digitalWrite(pin, LOW); delayMicroseconds(2); digitalWrite(pin, HIGH); delayMicroseconds(5); digitalWrite(pin, LOW); pinMode(pin, INPUT); duration = pulseIn(pin, HIGH); } Serial.println(duration); } void SerialParser(void) { char readChar[64]; Serial.readBytesUntil(33,readChar,64); String read_ = String(readChar); //Serial.println(readChar); int idx1 = read_.indexOf('%'); int idx2 = read_.indexOf('$'); // separate command from associated data String cmd = read_.substring(1,idx1); String data = read_.substring(idx1+1,idx2); // determine command sent if (cmd == "dw") { DigitalHandler(1, data); } else if (cmd == "dr") { DigitalHandler(0, data); } else if (cmd == "aw") { AnalogHandler(1, data); } else if (cmd == "ar") { AnalogHandler(0, data); } else if (cmd == "pm") { ConfigurePinHandler(data); } else if (cmd == "ps") { pulseInSHandler(data); } else if (cmd == "pi") { pulseInHandler(data); } else if (cmd == "ss") { SS_set(data); } else if (cmd == "sw") { SS_write(data); } else if (cmd == "sr") { SS_read(data); } } void setup() { Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } } void loop() { SerialParser(); }