How to send float over serial

前端 未结 9 1898
Happy的楠姐
Happy的楠姐 2021-01-02 09:15

What\'s the best way to send float, double, and int16 over serial on Arduino?

The Serial.print() only sends val

相关标签:
9条回答
  • 2021-01-02 09:46

    hm. How about this:

    void send_float (float arg)
    {
      // get access to the float as a byte-array:
      byte * data = (byte *) &arg; 
    
      // write the data to the serial
      Serial.write (data, sizeof (arg));
    }
    
    0 讨论(0)
  • 2021-01-02 09:48

    This simply works. Use Serial.println() function

    void setup() {
      Serial.begin(9600);
    
    }
    
    void loop() {
      float x = 23.45585888;
      Serial.println(x, 10);
      delay(1000);
    }
    

    And this is the output:

    0 讨论(0)
  • 2021-01-02 09:51

    Use the Firmata protocol. Quote:

    Firmata is a generic protocol for communicating with microcontrollers from software on a host computer. It is intended to work with any host computer software package. Right now there is a matching object in a number of languages. It is easy to add objects for other software to use this protocol. Basically, this firmware establishes a protocol for talking to the Arduino from the host software. The aim is to allow people to completely control the Arduino from software on the host computer.

    0 讨论(0)
  • 2021-01-02 09:58

    Structures and unions solve that issue. Use a packed structure with a byte sized union matching the structure. Overlap the pointers to the structure and union (or add the union in the structure). Use Serial.write to send the stream. Have a matching structure/union on receiving end. As long as byte order matches no issue otherwise you can unpack using the "C" hto(s..l) functions. Add "header" info to decode different structures/unions.

    0 讨论(0)
  • 2021-01-02 10:00

    Does size matter? If it does, you can encode each 32 bit group into 5 ASCII characters using ASCII85, see http://en.wikipedia.org/wiki/Ascii85.

    0 讨论(0)
  • 2021-01-02 10:01

    Perhaps that is best Way to convert Float to Byte and Byte to Float,-Hamid Reza.

    int breakDown(int index, unsigned char outbox[], float member)
    {
      unsigned long d = *(unsigned long *)&member;
    
      outbox[index] = d & 0x00FF;
      index++;
    
      outbox[index] = (d & 0xFF00) >> 8;
      index++;
    
      outbox[index] = (d & 0xFF0000) >> 16;
      index++;
    
      outbox[index] = (d & 0xFF000000) >> 24;
      index++;
      return index;
    }
    
    
    float buildUp(int index, unsigned char outbox[])
    {
      unsigned long d;
    
      d =  (outbox[index+3] << 24) | (outbox[index+2] << 16)
        | (outbox[index+1] << 8) | (outbox[index]);
      float member = *(float *)&d;
      return member;
    }
    

    regards. `

    0 讨论(0)
提交回复
热议问题