Code not showing Values on Second input
this code takes values <pl234> or <pr123> or further can see on further processing '<' & '>' removed , subsequently pl , pr removed , number left fed analogwrite pwm, problem first time works second time shows 0 means second time code going haywire im not till able find why.
code: [select]
char indata[20]; // allocate space string
char inchar = 0; // store character read
int index = 0; // index array; store character
int slavesel = 0;
string data;
int intdata, pan;
boolean started, ended, pantimer;
long previousmillis = 0;
long interval = 2420;
int pan1 = 9;
int pan2 = 6;
int tilt1 = 5;
int tilt2 = 3;
void setup()
{
pinmode(13, output);
digitalwrite(13, low);
pinmode(pan1, output);
pinmode(pan2, output);
pinmode(tilt1, output);
pinmode(tilt2, output);
serial.begin(9600);
}
void loop()
{
while(serial.available() > 0) // don't read unless
// there know there data
{
inchar = serial.read(); // read character//read character
if(inchar =='<') //not sure put in if statement run until end
{
started = true;
index=0;
}
else if(inchar =='>')
{
ended = true;
break;
}
if(started)
{
indata[index] = inchar; // store it
index++; // increment write next
indata[index] = '\0'; // null terminate string
}
}
if (ended)
{
data = indata;//values of acclerometer "545x" etc enter , stored in data
//char chardata = data.charat(6);
//intdata = int(chardata);
process();
}
}
void process()
{
data = data.replace('<', ' ');
data = data.replace('>', ' ');
data = data.trim();
char chkpan = data.charat(0);
char chkpan1 = data.charat(1);
if (chkpan == 'p' && chkpan1 == 'r')
{
data = data.replace('p', ' ');
data = data.replace('r', ' ');
data = data.trim();
char datachar[5];//char array store char conversion values datatoint
data.tochararray(datachar, sizeof(datachar));
intdata = atoi(datachar);
//if (pantimer == true) pan=0; else pantimer = true;
analogwrite(pan1, intdata);
digitalwrite(pan2, low);
serial.println(intdata);
for(int i=0;i<10;i++)
{
indata[i]=0;
}
index=0;
intdata = 0;
serial.flush();
}
if (chkpan == 'p' && chkpan1 == 'l')
{
data = data.replace('p', ' ');
data = data.replace('l', ' ');
data = data.trim();
char datachar[5];//char array store char conversion values datatoint
data.tochararray(datachar, sizeof(datachar));
intdata = atoi(datachar);
//if (pantimer == true) pan=0; else pantimer = true;
analogwrite(pan2, intdata);
digitalwrite(pan1, low);
serial.println(intdata);
for(int i=0;i<10;i++)
{
indata[i]=0;
}
index=0;
intdata = 0;
serial.flush();
}
if (data == "pstp") {
digitalwrite(pan1, low);
digitalwrite(pan2, low);
serial.println(data);
for(int i=0;i<10;i++)
{
indata[i]=0;
}
index=0;
intdata = 0;
serial.flush();
}
if (data == "tfr")//here put condition per values received accelerometer
{
digitalwrite(tilt1,high);
digitalwrite(tilt2, low);
serial.println(data);
//serial.println(millis());
for(int i=0;i<10;i++)
{
indata[i]=0;
}
index=0;
intdata = 0;
serial.flush();
}
if (data == "tst") {
digitalwrite(tilt1, low);
digitalwrite(tilt2, low);
serial.println(data);
for(int i=0;i<10;i++)
{
indata[i]=0;
}
index=0;
intdata = 0;
serial.flush();
}
if (data == "tbk")//here put condition per values received accelerometer
{
digitalwrite(tilt1,low);
digitalwrite(tilt2, high);
serial.println(data);
//serial.println(millis());
for(int i=0;i<10;i++)
{
indata[i]=0;
}
index=0;
intdata = 0;
serial.flush();
} /*
if (pantimer == true) {
unsigned long currentmillis = millis();
if(currentmillis - previousmillis > interval) {
previousmillis = currentmillis;
pan++;
if (pan == 7) {
digitalwrite(pan1, low);
digitalwrite(pan2, low);
pantimer == false;
pan = 0;
}
}
}*/
}
you take null-terminated string, copy string, load of memory intensive fiddling it, turn null-terminated string, convert number. interesting technique.
you don't seem resetting started , ended after have processed data.
you don't seem resetting started , ended after have processed data.
Arduino Forum > Using Arduino > Programming Questions > Code not showing Values on Second input
arduino
Comments
Post a Comment