Hi people, I have a problem. I read a text file from a MicroSD file built into TFT 3.2' touchscreen display.
I checked data reading via serial communication and it is ok.
now I must convert my char number to int.
I tried "number=atoi(string);" but it makes error.
So I decided to write my chartoint algorithm but it makes the same error!
it is my algorithm:
int chartoint(char string[])
{
int k,length,number;
int position=1;
number=0;
// length of the string
for(k=0;string[k]!=0;k++);
length=k;
// string to int
for(k=length-1;k>=0;k--)
{
number+=(int(string[k])-48)*position;
position=position*10;
}
return number;
}
if I try:
Serial.write(chartoint("1"));Serial.write("-");
Serial.write(chartoint("12"));Serial.write("-");
Serial.write(chartoint("123"));Serial.write("\n");
I have this:
- - {
- - {
- - {
- - {
NOTE: i try my algorithm in c++ and it works, but my arduino mega don't like it.
use print instead of write
Works! But I have another problem:
Looks my code.
This is my file content, which are the position of wall (for my labyrinth project):
2;2;317;6
2;2;6;237
313;2;317;237
2;233;317;237
50;50;200;55
void function()
{
int x1[10],x2[10],y1[10],y2[10];
int res,wall_number;
char row[20],number_string[10];
int k;
/////////////////////////////////////////////////////
////////////GET WALL POSITION FROM MICROSD///////////
Serial.begin(9600);
res=file.openFile("liv1.txt", FILEMODE_TEXT_READ);
if (res==NO_ERROR)
{
k=0;
myGLCD.setColor(255,255,0);
myGLCD.clrScr();
do
{
res=file.readLn(row,20);
extract(row,1,number_string);
x1[k]=chartoint(number_string);
extract(row,2,number_string);
y1[k]=chartoint(number_string);
extract(row,3,number_string);
x2[k]=chartoint(number_string);
extract(row,4,number_string);
y2[k]=chartoint(number_string);
//monitoring the array's content
Serial.print(x1[k]);
Serial.print("-");
Serial.print(y1[k]);
Serial.print("-");
Serial.print(x2[k]);
Serial.print("-");
Serial.print(y2[k]);
Serial.print("\n");
myGLCD.fillRect(x1[k],y1[k],x2[k],y2[k]);
k++;
}while(res!=EOF);
file.closeFile();
}
wall_number=k;
//////////////////////////////////////////////////
/////// NOW I REREAD THE CONTENTS OF ARRAY////////
Serial.print("\n");
for(k=0;k<wall_number;k++)
{
Serial.print(x1[k]);
Serial.print("-");
Serial.print(y1[k]);
Serial.print("-");
Serial.print(x2[k]);
Serial.print("-");
Serial.print(y2[k]);
Serial.print("-");
Serial.print("\n");
}
}
// (THIS FUNCTION WORK SUCCESSFULLY)
// void extract(char FROM_WHERE,int POSITION,char TO_WHERE)
//
void extract(char esaminare[],int campo,char restituire[])
{
int k,contatore=0,z;
campo--;
for(k=0;contatore<campo&&esaminare[k]!=10;k++)
if(esaminare[k]==';')
contatore++;
if(esaminare[k]!=13)
{
for(z=k;esaminare[z]!=';'&&esaminare[z]!=10;z++)
restituire[z-k]=esaminare[z];
restituire[z-k]=0;
}
else
restituire[0]=0;
}
Serial Monitor give me that result:
2-2-317-6
2-2-6-237
313-2-317-237
2-233-317-237
50-50-200-55
0-1024--32000-0-
110--28671-181-237-
25977-2-30976-237-
0-1281-4-237-
15-11776-4-55-
The values of my array are changhd!! What could have happened?
Having only seen a fraction of the sketch (and no personal experience iwth GLCD library) there are two "standard" answers which may or may not apply to your problem:
1: Some other part of your code has some array access that access beyond aoms array bounds, overwriteing your x, y, z arrays
2: You have run out of memory and the stack is overwriting your arrays. Use "memoryFree" or similar utility to print out how much RAM memory you have left. Note: This value varies if you call it in the loop() or inside one of your routines, and indeed inside the GLCD library.