Show Posts
Pages: 1 ... 3 4 [5]
61  Community / Exhibition / Gallery / Re: Basic Analog Pin reporting using ENCENC28J60 EthernetShield on: February 04, 2011, 10:26:50 pm
B. Any Ethernet bussiness
Code:
void ethSetup()
{
  //Serial.println("Setup Ethernet");
  /*initialize enc28j60*/
  es.ES_enc28j60Init(mac);

  //init the ethernet/ip layer:
  es.ES_init_ip_arp_udp_tcp(mac, ip, PORT);

  // init the web client:
  es.ES_client_set_gwip(gw);  // e.g internal IP of dsl router
  es.ES_client_set_wwwip(srv);
  timetosend = millis();
}

void ethReady()
{
  plen=0;
  plen = es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf);
  dat_p=es.ES_packetloop_icmp_tcp(buf,plen);
}

void ethSend()
{
      char HTTPCALL[chkvarlen() + 150];
      strcpy(HTTPCALL, "GET ");
      strcat(HTTPCALL, callfile);
      strcat(HTTPCALL, "nodeid=");
        strcat(HTTPCALL, nodeid);
        strcat(HTTPCALL, "&");
      strcat(HTTPCALL, "nodepin=");
        strcat(HTTPCALL, nodepin);
        strcat(HTTPCALL, "&");
      for (int z = 0 ; z < sendvarlen ; z++)
      {
        strcat(HTTPCALL,sendvarname[z]);
        strcat(HTTPCALL,"=");
        strcat(HTTPCALL,sendvarval[z]);
        if (z < sendvarlen-1)
        {
          strcat(HTTPCALL,"&");
        }
      }
      strcat(HTTPCALL, " HTTP/1.1\r\nHost: ");
      strcat(HTTPCALL, host);
      strcat(HTTPCALL, "\r\nUser-Agent: EtherShield/1.6\r\nAccept: text/html\r\nConnection: close\r\n\r\n");
      //-------END----Struct the HTTPCALL

      Serial.println("HTTP Data To Send");
     
      Serial.println(HTTPCALL);
     
      // note the use of PSTR - this puts the string into code space and is compulsory in this call
      // second parameter is a variable string to append to HTTPPATH, this string is NOT a PSTR
      //es.ES_client_browse_url(PSTR(HTTPPATH), NULL, PSTR(HOSTNAME), &browserresult_callback);
      //es.ES_client_browse_url(PSTR(HTTPPATH), strtimetosend, PSTR(HOSTNAME), &browserresult_callback);
      //es.ES_client_browse_url(PSTR(HTTPPATH), strtimetosend, PSTR(""), &browserresult_callback);
      es.ES_client_browse_url(callfile, HTTPCALL, host, &browserresult_callback);
}

int chkvarlen()
{
  int retval=0;
  for (int i=0; i<sendvarlen; i++)
  {
    retval = retval + strlen(sendvarname[i]);
    retval = retval + strlen(sendvarval[i]);
  }
  retval = retval + (2 * sendvarlen);
   
  int ii = strlen(callfile) + strlen(host) + strlen(nodeid) + strlen(nodepin);

  retval = retval + ii;


  return retval;
}

void browserresult_callback(uint8_t statuscode,uint16_t datapos){
  if (datapos != 0)
  {
    /*
    // now search for the csv data - it follows the first blank line
    // I'm sure that there is an easier way to search for a blank line - but I threw this together quickly
    // and it works for me.
    uint16_t pos = datapos;
    while (buf[pos])    // loop until end of buffer (or we break out having found what we wanted)
    {
      while (buf[pos]) if (buf[pos++] == '\n') break;   // find the first line feed
      if (buf[pos] == 0) break; // run out of buffer
      if (buf[pos++] == '\r') break; // if it is followed by a carriage return then it is a blank line (\r\n\r\n)
    }
    if (buf[pos])  // we didn't run out of buffer
    {
      pos++;  //skip over the '\n' remaining
      Serial.println((char*)&buf[pos]);
    }
    */
  }
}


62  Community / Exhibition / Gallery / Basic Analog Pin reporting using ENCENC28J60 EthernetShield on: February 04, 2011, 10:24:45 pm
Hi,
I'll share this to others who just start playing with ENC28J60 ethernetshield.
Reasons :
1. I received so many help/enlighment from others
2. This Shield is not Official , so there is no "standardize" Library for it.

Credits goes to :
1. Andy , http://blog.thiseldo.co.uk/?p=344 , For his ENC28J60 Arduino Library.
2. Trystan , http://openenergymonitor.org/emon/node/88.
3. PaulS, http://arduino.cc/forum/index.php?action=profile;u=16084 , Tonns of enlighment.
4. Gus , http://projectgus.com/2010/07/eeprom-access-with-arduino/

Ok , Here we go.

Important note : I made a small modification of Andy's library. It's a good library, but do not "end user" to make change of HOSTNAME (need to be hardcoded at sketch level). I don't want this, so I made small modification.
Here it is :

Code:
Modification to --> ip_arp_udp_tcp.c
1. Look for --> #if defined (WWW_client) , around line# 1310
2. Look for --> //GET , around line# 1316
3. Commen out all :
len=fill_tcp_data_p(bufptr,0,PSTR("GET "));
len=fill_tcp_data_p(bufptr,len,client_urlbuf);
if( client_urlbuf_var )
len=fill_tcp_data(bufptr,len,client_urlbuf_var);
// I would prefer http/1.0 but there is a funny
// bug in some apache webservers which causes
// them to send two packets (fragmented PDU)
// if we don't use HTTP/1.1 + Connection: close
len=fill_tcp_data_p(bufptr,len,PSTR(" HTTP/1.1\r\nHost: "));
len=fill_tcp_data_p(bufptr,len,client_hoststr);
len=fill_tcp_data_p(bufptr,len,PSTR("\r\nUser-Agent: EtherShield/1.6\r\nAccept: text/html\r\nConnection: close\r\n\r\n"));

4. Replace with :
len=fill_tcp_data(bufptr,0,client_urlbuf_var);


Arduino sketch.
A. Main Sketch
Code:
/*
WE USE MODIFIED VERSION OF Andy's Library ver 1.6
*/
#include <EtherShield.h>
//#include <EEPROM.h>
#include<string.h>

//Structured EEPROM--START
#include <avr/eeprom.h>

#define eeprom_read_to(dst_p, eeprom_field, dst_size) eeprom_read_block(dst_p, (void *)offsetof(__eeprom_data, eeprom_field), MIN(dst_size, sizeof((__eeprom_data*)0)->eeprom_field))
#define eeprom_read(dst, eeprom_field) eeprom_read_to(&dst, eeprom_field, sizeof(dst))
#define eeprom_write_from(src_p, eeprom_field, src_size) eeprom_write_block(src_p, (void *)offsetof(__eeprom_data, eeprom_field), MIN(src_size, sizeof((__eeprom_data*)0)->eeprom_field))
#define eeprom_write(src, eeprom_field) { typeof(src) x = src; eeprom_write_from(&x, eeprom_field, sizeof(x)); }
#define MIN(x,y) ( x > y ? y : x )
 
//const int buflen = 32;
 
/*
 * __eeprom_data is the magic name that maps all of the data we are
 * storing in our EEPROM
 */
struct __eeprom_data {
byte magic;
byte mac[6];
byte ip[4];
byte gw[4];
byte srv[4];
char host[40];
char callfile[20];
byte conflen[10];
char nodeid[10];
char nodepin[10];
};

//Structured EEPROM--STOP

//----ETH VARS-------------------------------
#define PORT 80                   // Ndak bisa di rubah
byte magic;
byte mac[6] = {0x54,0x55,0x58,0x10,0x00,0x25};
byte ip[4] = {192,168,10,231};
byte gw[4] = {192,168,10,1};
byte srv[4] = { 192,168,10,232 }; // Get pachube ip by DNS call
char host[40]="telemetry.bino.int";
char callfile[20]="/post.php?"  ;    // Set your own feed ID here
byte conflen[10]={0,0,0,0,0,0,0,0,0,0};
char nodeid[10]="mynodeid";
char nodepin[10]="mynodepin";
byte mymagic=0x0a;

uint8_t resend=0;
int8_t dns_state=0;
uint32_t timetosend=millis();
uint16_t dat_p;
long lastDnsRequest = 0L;
int plen = 0;

EtherShield es=EtherShield();

#define BUFFER_SIZE 550
uint8_t buf[BUFFER_SIZE+1];
//-------------VARS to SEND------------------------------
int sendvarlen = 6;
char sendvarname[6][5]={"s0","s1","s2","s3","s4","s5"};
char sendvarval[6][10]={"0","0","0","0","0","0"};
//-------------------------------------------------
//----FOR Menuing----
boolean inmenu = false;
boolean waitentry=false;

void setup(){
  Serial.begin(9600);
  eeprom_read(magic, magic);
  if (magic != mymagic)
  {
    delay(3000);
    Serial.print("FIRST BLOOD !!!");
    magic = mymagic;
    saveall();
  }
  readall();

  delay(100);
 
  es.ES_enc28j60Init(mac);

  //init the ethernet/ip layer:
  es.ES_init_ip_arp_udp_tcp(mac, ip, PORT);

  // init the web client:
  es.ES_client_set_gwip(gw);  // e.g internal IP of dsl router
  es.ES_client_set_wwwip(srv);
}


void loop()
{
  //Do this in any condition
  dns_state=2;
  // handle ping and wait for a tcp packet - calling this routine powers the sending and receiving of data
  // If we have IP address for server and its time then request data
  ethReady();
  //---------------------------

  if (!inmenu)
  {
    if (Serial.available())
    {
      if (Serial.read() == 'c')
      {
        printmenu();
      }
    }
    else
    {
      domainproc();
    }
  }
  else
  {
    if (Serial.available())
    {
      domenu();
    }   
  }
}

void domainproc()
{
  if(millis() - timetosend > 1000)  // every 10 seconds
  {
    timetosend = millis();
    readsensor();
    ethSend();
  }
}



void readsensor()
{
  for (int i = 0 ; i < sendvarlen ; i++)
  {

    itoa(analogRead(i),sendvarval[i],10);
  }
}

Oppss ... I need to post 2 other part seperately
63  Using Arduino / Programming Questions / Re: Need for help : Weird Serial.print and Array read problems on: February 04, 2011, 09:33:43 pm
PaulS ... you ARE the enlighter !!

-bino-
64  Development / Other Software Development / IDE Suggestion : File naming on: February 04, 2011, 04:27:55 am
Dear Developer.

Every time we do "save as", the IDE will :
- Create a new directory with the name we desired, and
- save the actual file inside newly created directory, and name it just like the directory name.

My Sugestion:
- Create a new directory with the name we desired, and
- save the actual file inside newly created directory, and name it "Main.pde".

Sincerely
-bino-
65  Using Arduino / Programming Questions / Need for help : Weird Serial.print and Array read problems on: February 04, 2011, 04:12:56 am
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-
66  Forum 2005-2010 (read only) / Syntax & Programs / adopting 8051 codes to Arduino on: June 08, 2010, 08:35:07 pm
Dear All
I'm trying on adopting Mark Haun's solution on Barn-Door mount at (*1)

He use 8051 base solution, but it's hard to find 87C51FA on my area .. and I don't have enough brain capacity on doing migration/replacement to another plain 8051 based MCU.
Thats why I'll choose arduiono as my alternate path.

The beauty of Mark's solution is that it don't care about construction dimmension detail at first .. since he also publish the MatLab script to make adjustment to his ASM code.

His ASM code is : (*2)

Basicaly , it drive the stepper to do step in X_Tick/Step for Y_Step
i.e (From 1st line of the "data" Section of his ASM)
X=253
Y=1474

It will mean : Go 1474 step with the speed of 253 ticks/step

The "Tick" time is equal to 8051 timer as he said :"The 254/253 are
the duration of each motor step (number of ticks on the 8051 timer)."

I tried to find How many ms is the 8051 timer.
And I found :

Example 9.2 of (*3)

Mark's xtall is 6 Mhz (*4) , that is :
1/12 x 6 Mhz = 0.5 Mhz , T = 1/0.5 us = 2 us = 0.002 ms
If 254 ticks per step , it will means --> (0.002 x 254) ms/step = 0.508 ms/step

The arduino stepper library is based on RPM, so I have to convert 0.508 ms/step to RPM:
Mark's Solution is based on 1.8 deg/step motor .. that is 200 step/rev
so for 1 rev it wil take 200 x 0.508 ms = 101600 ms = 101.600 sec = 1.69333 minute

So .. I think the RPM will be ==> 1 : 1.69333 = 0.590551181 rpm

Is my calculation true ??

If So, Kindly please give me any needed correction of the codes below.
Notes :
1. This code is just for doing the first line of Mark's data again and again.
2. Adopted from : (*5)
Code:
/*
 Stepper Motor Controller
 language: Wiring/Arduino

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 and 9 of the Arduino.

 The motor moves 100 steps in one direction, then 100 in the other.

 Created 11 Mar. 2007
 Modified 7 Apr. 2007
 by Tom Igoe

 */

// define the pins that the motor is attached to. You can use
// any digital I/O pins.

#include <Stepper.h>

#define motorSteps 200     // change this depending on the number of steps
                           // per revolution of your motor
#define motorPin1 8
#define motorPin2 9
#define ledPin 13

// initialize of the Stepper library:
Stepper myStepper(motorSteps, motorPin1,motorPin2);

void setup() {
  // set the motor speed at 60 RPMS:
  myStepper.setSpeed(60);

  // Initialize the Serial port:
  Serial.begin(9600);

  // set up the LED pin:
  pinMode(ledPin, OUTPUT);
  // blink the LED:
  blink(3);
}

void loop() {
  // Re-setup the motor RPM :
  myStepper.setSpeed(0.590551181);
  
  // Step forward 1474 steps:
  Serial.println("Forward");
  myStepper.step(1474);
  blink(10);
}

// Blink the reset LED:
void blink(int howManyTimes) {
  int i;
  for (i=0; i< howManyTimes; i++) {
    digitalWrite(ledPin, HIGH);
    delay(200);
    digitalWrite(ledPin, LOW);
    delay(200);
  }
}

Note: I'm sorry for that (*) signs, this is my first post so I'm not allowed to post any hyperlinks

Sincerely
/me
the URLs
(1)Mark Haun's barndoor is at --> http://www.keteu.org/~haunma/proj/barndoor/
(2)Mark Haun's ASM codes --> http://www.keteu.org/~haunma/proj/barndoor/track.asm
(3)8051 timer calculation --> http://www.the-crankshaft.info/2009/08/programming-8051-timers.html
(4)A picture of schematic that shows the xtall Size --> http://www.keteu.org/~haunma/proj/barndoor/schematic.png
(5)Notes about stepper library --> http://www.tigoe.net/pcomp/code/category/code/arduinowiring/51
67  Forum 2005-2010 (read only) / Interfacing / Re: An extended TCP/IP library for the ENC28J60 on: January 19, 2011, 03:52:23 am
Dear Pijey ..
Could you please post a realy basic http post/get client sketch that do something like :

http://my.url/cgi-bin/myprog.cgi?text1=ONE&text2=TWO&text3=THREE


Sincerely
-bino-
68  Forum 2005-2010 (read only) / Interfacing / Re: Energy & Temperature monitoring project. on: January 22, 2011, 08:03:30 pm
Hi Lars.

Currently I also adopting this concept.
my path is :

1. Adopting openenergymonitor.org , specialy the masterehernettemplate sketch.

2. add a bbs style node configuration :
- IP address
- gateway
- Server IP
- server Hostname (just in case of shared hosting)
- Form processor file to call
- node name
- node password for web post
(currently it's hard coded)

3. Basically the node will always send :
a. 4 analog sensor raw value (0-1023). I'll leave the conversion at the server side
b. node name and password

I try to as universal as posible.
I don't know where it will ended, I just work on it.

Sincerely
-bino-
69  Forum 2005-2010 (read only) / Exhibition / Re: SD card read/write with Arduino on: July 01, 2010, 05:21:57 am
Dear All
I don't meant to hijack this thread, but I also got same problem with sdfatlib, and when I put sdfatlib as search keyword it refer to this thread.

So here we go.
I have a data file like this :
Code:
1474,254
1616,253
2998,254
3153,253
3925,254
4094,253
4642,254
4827,253
5255,254
5459,253
5810,254
6039,253
6336,254
6597,253
6851,254
7160,253
7379,254
7768,253
7957,254
8547,253
8705,254
10133,255
10293,254
10831,255
11031,254
11365,255
11617,254
11866,255
12210,254
12405,255
13096,254
13240,255
13600,256
13744,255
14413,256
14614,255
14931,256
15209,255
15431,256
15918,255
16077,256
16803,257
16963,256
17434,257
17664,256
17922,257
18298,256
18474,257
19442,258
19619,257
19981,258
20254,257
20468,258
21838,259
22057,258
22318,259
22746,258
22905,259
23336,260
23494,259
23917,260
24187,259
24395,260
25432,261
25643,260
25905,261
26455,260
26592,261
26613,262
26757,261
27244,262
27523,261
27721,262
28491,263
28690,262
28963,263
30133,264
30414,263
30605,264
31214,265
31406,264
31682,265
32712,266
32995,265
33180,266
33666,267
33852,266
34131,267
35051,268
35337,267
35517,268
35902,269
36082,268
36364,269
37199,270
37488,269
37662,270
37963,271
38138,270
38424,271
39185,272
39479,271
39648,272
39873,273
40042,272
40335,273
41035,274
41333,273
41497,274
41662,275
41826,274
42122,275
42768,276
43072,275
43231,276
43333,277
43491,276
43797,277
44401,278
44717,277
44870,278
44891,279
45039,278
45369,279
45949,280
46294,279
46436,280
46457,281
46621,280
46899,281
47374,282
47659,281
47817,282
47869,283
48025,282
48314,283
48764,284
49059,283
49211,284
49232,285
49389,284
49670,285
50078,286
50366,285
50518,286
50539,287
50699,286
50967,287
51327,288
51599,287
51754,288
51775,289
51932,288
52199,289
52528,290
52797,289
52951,290
52972,291
53133,290
53385,291
53673,292
53928,291
54086,292
54107,293
54268,292
54517,293
54773,294
55019,293
55179,294
55200,295
55361,294
55603,295
55835,296
56079,295
56238,296
56259,297
56427,296
56655,297
56844,298
57069,297
57236,298
57257,299
57418,298
57651,299
57837,300
58073,299
58231,300
58252,301
58427,300
58636,301
58760,302
58962,301
59140,302
59184,303
59356,302
59565,303
59682,304
59889,303
60061,304
60082,305
60251,304
60461,305
60567,306
60773,305
60943,306
60964,307
61139,306
61338,307
61406,308
61594,307
61777,308
61798,309
61965,308
62170,309
62247,310
62447,309
62617,310
62638,311
62827,310
63006,311
63027,312
63205,311
63392,312
63429,313
63616,312
63793,313
63814,314
64001,313
64177,314
64198,315
64391,314
64561,315
64582,316
64788,315
64947,316
64968,317
65219,316
65354,317
65375,318

and here is what I got from SdFatTail.pde


Question :
How to put each "field" of the output into to different variable (ie: var1, var2) rather than printing it out.

here is the code (small edited from original sample)
Code:
/*
 * This sketch reads and prints the tail of all files
 * created by SdFatAppend.pde, SdFatPrint.pde, and
 * SdFatWrite.pde.
 */
#include <SdFat.h>
#include <SdFatUtil.h>

Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;

// store error strings in flash to save RAM
#define error(s) error_P(PSTR(s))
void error_P(const char *str)
{
  PgmPrint("error: ");
  SerialPrintln_P(str);
  if (card.errorCode()) {
    PgmPrint("SD error: ");
    Serial.print(card.errorCode(), HEX);
    Serial.print(',');
    Serial.println(card.errorData(), HEX);
  }
  while(1);
}

void setup(void)
{
  Serial.begin(9600);
  Serial.println();
  Serial.println("type any character to start");
  while (!Serial.available());
  Serial.println();
  
  // initialize the SD card
  if (!card.init()) error("card.init");
  
  // initialize a FAT volume
  if (!volume.init(card)) error("volume.init");
  
  // open the root directory
  if (!root.openRoot(volume)) error("openRoot");
}

/*
 * Print tail of all SdFat example files
 */
void loop(void)
{
  dir_t dir;
  char name[13];
  
  // read next directory entry
  if (root.readDir(dir) != sizeof(dir)) {
    Serial.println("End of Directory");
    while(1);
  }
  
  // check for file name "APPEND.TXT", "PRINT*.TXT"
  // or "WRITE*.TXT"
  // first 8 bytes are blank filled name
  // last three bytes are blank filled extension
  if ((strncmp((char *)dir.name, "MYSTEP", 6)) ||
      strncmp((char *)&dir.name[8], "TXT", 3)) {
        return;
  }
  // format file name
  SdFile::dirName(dir, name);
  
  // remember position in root dir
  uint32_t pos = root.curPosition();
  
  // open file
  if (!file.open(root, name, O_READ)) error("file.open");
  
  // restore root position
  if (!root.seekSet(pos)) error("root.seekSet");
  
  // print file name message
  Serial.print("Tail of: ");
  Serial.println(name);
  
  // position to tail of file
  //if (file.fileSize() > 100) {
  //  if (!file.seekSet(file.fileSize() - 100)) error("file.seekSet");
  //}
  int16_t c;
  // find end of line  
  //while ((c = file.read()) > 0 && c != '\n');
  
  // print rest of file
  while ((c = file.read()) > 0)
  {
    Serial.print((char)c);
  }
  file.close();
  Serial.println();
}

Sincerely
-bino-
70  Forum 2005-2010 (read only) / Frequently-Asked Questions / arduino to read CSV on: June 30, 2010, 11:11:32 pm
Dear All.
I just trying to use SdFatLib ... specialy the "tail" sample.

Now .. I have a file called "MYSTEP.CSV" on my sdcard.
The SdFatLib success to "tail" the file content.

basically .. the contents is just a comma seperated values like
Code:
7768,253
7957,254
8547,253
8705,254
10133,255
10293,254
10831,255
11031,254

Question :
How to parse a line to two variable, i.e :
Code:
7768,253
to -->
var1 = 7768
var2 = 253

Sincerely
-bino-
Pages: 1 ... 3 4 [5]