Sending an integer serially in Arduino

21,392

Solution 1

If what you're looking for is speed, then instead of sending an ASCII encoded int, you can divide your number into two bytes, here's an example:

uint16_t number = 5703;               // 0001 0110 0100 0111
uint16_t mask   = B11111111;          // 0000 0000 1111 1111
uint8_t first_half   = number >> 8;   // >>>> >>>> 0001 0110
uint8_t sencond_half = number & mask; // ____ ____ 0100 0111
    
Serial.write(first_half);
Serial.write(sencond_half);

Solution 2

Another way:

unsigned int number = 0x4142; //ASCII characters 'AB';
char *p;
    
p = (char*) &number;
    
Serial.write(p,2);

will return 'BA' on the console (LSB first).

Solution 3

You don't specify the from environment, so I assume your troubles is with reading serial data on an Arduino?

Anyways, as can be seen in the Arduino Serial reference, you can read an integer using the Serial.parseInt() method call. You can read strings with eg. Serial.readBytes(buffer, length) but your real issue is to know when to expect a string and when to expect an integer (and what to do if something else comes along, eg. noise or so...)

Solution 4

Other way:

char p[2];
*p = 0x4142; //ASCII characters 'AB'
Serial.write(p,2);

I like this way.

Share:
21,392
Anubis
Author by

Anubis

Updated on July 09, 2022

Comments

  • Anubis
    Anubis almost 2 years

    I need to send an integer, say between 0-10000, to Arduino using serial communication. What's the best way of doing that?

    I can think of breaking the number into an character array (eg: 500 as '5','0','0') and sending them as a byte stream (yeah, that's ugly). Then reconstruct at the other end. (anything is sent serially as a byte stream, right?)

    Isn't there a better way? Somehow, it should be able to assign the value into an int type variable.

    (really need to know the same thing about strings too, if possible)