Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [SOLVED] QtSerialPort - Need general information on what I'm reading
Forum Updated to NodeBB v4.3 + New Features

[SOLVED] QtSerialPort - Need general information on what I'm reading

Scheduled Pinned Locked Moved General and Desktop
6 Posts 3 Posters 2.0k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    mattewre
    wrote on last edited by
    #1

    Hi,
    I'm working with a Bluetooth device (pulsioximeter) that uses Serial Port to send data.

    "This Qt SerialPort/Terminal Example":http://doc.qt.io/qt-5/qtserialport-terminal-example.html is 100% working (I love these QtExample, you can start working without any problem when compiling and they are well written).

    The problem that I'm facing is shown in this image:
    !http://s23.postimg.org/icvidy1iz/spo2.jpg(Image of output)!
    Everything seems working fine (I can see the text changing, maybe according to heart-rate; I can see a different output when the finger is not in the pulsioximeter, etc..), but I would like to know how to decode that text.

    Device manufacture provided all technical info (that I'm already using correctly): no parity, 115200 boud rate, 1 stop bit, 8 data bits
    And a table with details of the datagram.

    BYTE 1:
    #BIT0-3: signal strength
    #BIT4: ..
    #BIT5: no finger inside boolean
    #BIT6: ...
    #BIT7: ..

    BYTE 2 - 3 - 4 - 5 -6 - 7
    (description for 8 bits, on of each byte)

    So, I would expect to read a binary code (and then coding what I need, converting to heart.rate numbers). How can I do this?

    The example uses this code:
    @ QByteArray data = serial->readAll();
    console->putData(data);@

    1 Reply Last reply
    0
    • R Offline
      R Offline
      Rondog
      wrote on last edited by
      #2

      Maybe something like this:

      @
      static const int SIGNAL_MASK = 0x0f; // bit 0-3
      static const int FINGER_MASK = 0x20; // bit 5

      char data_byte = byte_array_input.at(?); // see QByteArray help

      int signal = data_byte & SIGNAL_MASK;
      bool finger = (data_byte & FINGER_MASK);

      QString text = QString("Signal: %1 Finger: %2").arg(signal).arg(finger);
      @

      1 Reply Last reply
      0
      • M Offline
        M Offline
        mattewre
        wrote on last edited by
        #3

        Thank you for your help. This clarified the basic ideas.
        It seems working (not with SIGNAL for example, but working with other parameters using the right mask. I have to spend a bit of time on each value).
        I'll post the full code for decoding the serial input from my device (posting manufacture and model) as soon as I manage to read all the fields, so that someone can buy the same Pulse Oximeter (it is cheap!).

        1 Reply Last reply
        0
        • M Offline
          M Offline
          mattewre
          wrote on last edited by
          #4

          Here is the Bluetooth Pulse Oximeter that I'm using:
          "Buy here":http://www.dx.com/p/bluetooth-fingertip-pulse-oximeter-orange-white-2-x-aaa-258859#.VLE3l8YcFzE (sorry for the link, I don't want to advertise that store, just in order to provide a link to the real product).

          Manufacter: "Berry Med":http://www.berry-med.com
          Specifications: "Your text to link here...":https://drive.google.com/file/d/0B5UmFnLqxqi4S3hMZmk0YjFVSWs/view?usp=sharing

          I can pair it with Windows and MacOSX correctly.
          I suggest this device if you are looking for something that can stream "live" the HeartRate and Blood Saturation to your computer wireless (it is the cheaper Bluetooth Pulse Oximeter that I found around. Requires 2 AAA batteries, Cons: it doesn't have an LCD display).

          You can use this code in any project or starting from Qt/Serial/Terminal example (in readData part) or Qt/Serial/slave example (in readRequest part).

          @

          // all variables are int or bool

          if (sizeOfData>=5){
          //I prefer to explicit (#numberOfByte - 1) since the Table from manufacter starts counting from 1
          signal = (data.at(1-1) & 0x0f); // Mask Bits 0-3 (00001111) of #numberOfByte 1
          signalBool = (data.at(1-1) & 0x10);
          bargraph = (data.at(3-1) & 0x0f); // Mask Bits 0-3 (00001111) of #numberOfByte 3
          saturation = (data.at(5-1) & 0x7F); // Mask Bits 0-6 (01111111) of #numberOfByte 5
          pulserate = ((data.at(3-1) & 0x40)) | ((data.at(4-1) & 0x7F));
          // Mask Bit 6 (01000000) of #numberOfByte 3 and shift it in Bit 7 position (10000000)
          // Mask Bits 0-6 (01111111) of #numberOfByte 4
          // Build the 0-7 Bits using OR (not 100% sure about this, please write me back if you think it is wrong)
          pleth = (data.at(2-1) & 0x7F); // Mask Bits 0-6 (01111111) of #numberOfByte 2
          sensorOn = !(data.at(3-1) & 0x10); // Mask Bit 4 (00010000) of #numberOfByte 3
          // can be used to detect if finger is in. Go to 0 if no finger inside
          stablePulse = !(data.at(3-1) & 0x20); // Mask Bit 5 (00100000) of #numberOfByte 3
          // Is 1 when the pulse detection is stabilized. Go to 0 when detection is not ready yet

          pulseBeep = (data.at(1-1) & 0x40);
          

          }
          @

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mattewre
            wrote on last edited by
            #5

            edit

            1 Reply Last reply
            0
            • S Offline
              S Offline
              SysTech
              wrote on last edited by
              #6

              Cool little device. I'll check it out! Thanks for posting the info. If your issue is solved please edit your initial post and change the title to include [SOLVED].

              That is something that helps here on the forums.

              1 Reply Last reply
              0

              • Login

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • Users
              • Groups
              • Search
              • Get Qt Extensions
              • Unsolved