Pages: [1]   Go Down
Author Topic: Need for help : Weird Serial.print and Array read problems  (Read 572 times)
0 Members and 1 Guest are viewing this topic.
Indonesia
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dear All.
I have very basic sketch below :
Code:
#include<string.h>
//-------------VARS to SEND------------------------------
int sendvarlen = 6;
char* sendvarname[6]={"s0","s1","s2","s3","s4","s5"};
char* sendvarval[6]={"0","0","0","0","0","0"};
//-------------------------------------------------
long timetosend=millis();
void setup()
{
  Serial.begin(9600);
  delay(1000);
  Serial.println("I'm Here !!!");
  delay(1000);
}
void loop()
{
  if(millis() - timetosend > 1000)
  {
    readsensor();
    Serial.println("=============================");
    devdata();
    Serial.println("=============================");
    timetosend=millis();
  }
}

void readsensor()
{
  Serial.println("Analog Sensor Read results");
  char myread[10]="";
  for (int i = 0 ; i < sendvarlen ; i++)
  {
    memset(myread, '\0', 10);
    sendvarval[i]="";
    itoa(analogRead(i),myread,10);
    delay(50);
    strcpy(sendvarval[i],myread);
    
    Serial.print(sendvarname[i]);
    Serial.print("=");
    Serial.println(sendvarval[i]);
  }
}

void devdata()
{
  char mydata[500];
  strcpy(mydata, "My Sensordata is : ");
  for (int i=0; i<sendvarlen; i++)
  {
    strcat(mydata,sendvarname[i]);
    strcat(mydata,"=");
    strcat(mydata,sendvarval[i]);
    if (i < sendvarlen-1)
    {
      strcat(mydata,"&");
    }
  }
  Serial.print(mydata);
  Serial.println(" ");
}

And below is the results (dumped using) : tail -f /dev/ttyUSB1

Code:
Analog Sensor Read results

s0=198

s1=244

s2=351

s3=440

s4=412

s5=273

73

My Sensordata is : s0=273&s1=273&s2=273&s3=273&s4=273&s5=273

73

Analog Sensor Read results

s0=191

s1=262

s2=378

s3=449

s4=381

s5=234

34

My Sensordata is : s0=234&s1=234&s2=234&s3=234&s4=234&s5=234

34


Some weird thing from the results :
1. There is no "=============================" printed out.
2. all the "value" after "My Sensordata is" is just the last value got by readsensor()
- 273 at the 1st result sequence , and
- 234 at the 2st result sequence
3. There is always 2 last character reprinted at the end of readsensor() and devdata()
- 73 at the 1st result sequence , and
- 34 at the 2st result sequence

Kindly please give me your enlightment to fix this problem.

My IDE version : 0022
My Board : Arduino 2009 , ATMega328.
My OS : Ubuntu (Jaunty)

Sincerely
-bino-
« Last Edit: February 04, 2011, 04:17:16 am by binooetomo » Logged

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 610
Posts: 49077
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
    strcpy(sendvarval[i],myread);
sendvarval[0] is a pointer. It points to space that is initialized to hold one character. You are copying more than one character to that location. Oops.

Try
Code:
char sendvarval[6][10];
instead.

When you write out of bounds, you are writing over some other memory locations. Potentially you are overwriting the first character of the "=========================" string with a NULL, so when you print that memory space, only the NULL is seen, so nothing gets printed.
Logged

Indonesia
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

PaulS ... you ARE the enlighter !!

-bino-
Logged

Pages: [1]   Go Up
Jump to: