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.


Arduino Forum > Using Arduino > Programming Questions > Code not showing Values on Second input


arduino

Comments

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial