Skip to content

Instantly share code, notes, and snippets.

@headHUB
Created July 29, 2017 11:00
Show Gist options
  • Save headHUB/275d6cb4f00581c666e9f3821682c79c to your computer and use it in GitHub Desktop.
Save headHUB/275d6cb4f00581c666e9f3821682c79c to your computer and use it in GitHub Desktop.
#include <VarServoSpeed>
//zoomkat 11-12-13 String capture and parsing
//from serial port input (via serial monitor)
//and print result out serial port
//copy test strings and use ctrl/v to paste in
//serial monitor if desired
// * is used as the data string delimiter
// , is used to delimit individual data
String readString; //main captured String
String device; //data String
String value;
String direction;
//String speed1;
//String altidude;
int ind1; // , locations
int ind2;
int newVal = 0;
int slow = 75;
int ind3;
//int ind4;
VarServoSpeed pan;
VarServoSpeed tilt;
void setup() {
Serial.begin(9600);
pan.attach(6);
tilt.attach(5);
// Serial.println("serial delimit test 11-12-13"); // so I can keep track of what is loaded
}
void loop() {
//expect a string like 90,low,15.6,125*
//or 130,hi,7.2,389*
if (Serial.available()) {
char c = Serial.read(); //gets one byte from serial buffer
if (c == '*') {
//do stuff
/*
Serial.println();
Serial.print("captured String is : ");
Serial.println(readString); //prints string to serial port out
*/
ind1 = readString.indexOf(','); //finds location of first ,
device = readString.substring(0, ind1); //captures first data String
ind2 = readString.indexOf(',', ind1 + 1); //finds location of second ,
direction = readString.substring(ind1 + 1, ind2 + 1);
ind3 = readString.indexOf(',', ind2+1 );
value = readString.substring(ind2+1, ind3+1);
if (device == "S") {
if (direction == "P") {
newVal = map(value, -37000, 37000, 0, 179);
pan.write(newVal, slow);
}
else if (direction == "T") {
newVal = map((value * (-1)), -37000, 37000, 30, 140);
tilt.write(newVal, slow);
}
} else if (device == "M") {
if (direction == "F") {
newVal = map((value * (-1)), 0, 37000, 0, 254);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(en1, newVal);
analogWrite(en2, newVal);
}
else if (direction == "B") {
newVal = map(value, 0, 37000, 0, 254);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(en1, newVal);
analogWrite(en2, newVal);
}
else if (direction == "R") {
newVal = map(value, 0, 37000, 0, 254);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(en1, newVal);
analogWrite(en2, newVal);
}
else if (direction == "L") {
newVal = map((value * (-1)), 0, 37000, 0, 254);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(en1, newVal);
analogWrite(en2, newVal);
}
}
// ind3 = readString.indexOf(',', ind2+1 );
// speed1 = readString.substring(ind2+1, ind3+1);
// ind4 = readString.indexOf(',', ind3+1 );
// altidude = readString.substring(ind3+1); //captures remain part of data after last ,
//
// Serial.print("angle = ");
// Serial.println(angle);
// Serial.print("fuel = ");
// Serial.println(fuel);
// Serial.print("speed = ");
// Serial.println(speed1);
// Serial.print("altidude = ");
// Serial.println(altidude);
// Serial.println();
// Serial.println();
readString=""; //clears variable for new input
device="";
direction="";
value="";
//altidude="";
}
else {
readString += c; //makes the string readString
}
delay(50);}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment