arduino_length_based_mode.ino 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include <SoftwareSerial.h>
  2. SoftwareSerial BTSerial(10, 11); // RX, TX
  3. void sendBT(const char *data, int l)
  4. {
  5. char *tx_data = new byte[l + 4];
  6. tx_data[0] = 85; //preamble
  7. tx_data[1] = 85; //preamble
  8. tx_data[2] = (l >> 8) & 0x000000FF;
  9. tx_data[3] = (l & 0x000000FF);
  10. memcpy(tx_data+4, data, l);
  11. BTSerial.write(tx_data, l + 4);
  12. BTSerial.flush();
  13. delete [] tx_data;
  14. }
  15. void setup()
  16. {
  17. BTSerial.begin(9600);
  18. }
  19. char *data;
  20. int data_length;
  21. int i = 0;
  22. void loop()
  23. {
  24. if (BTSerial.available() > 2)
  25. {
  26. data_length = 0;
  27. char p1 = BTSerial.read();
  28. char p2 = BTSerial.read();
  29. if(p1 != 85 || p2 != 85) return;
  30. while(BTSerial.available() < 2) continue;
  31. char x1 = BTSerial.read();
  32. char x2 = BTSerial.read();
  33. data_length = x1 << 8 | x2;
  34. data = new char[data_length];
  35. i = 0;
  36. while (i < data_length)
  37. {
  38. if (BTSerial.available() == 0)
  39. continue;
  40. data[i++] = BTSerial.read();
  41. }
  42. sendBT(data, data_length);
  43. delete[] data;
  44. }
  45. delay(100);
  46. sendBT("HELLOO", 6);
  47. }
  48. //PS char or byte ranges are -127 to 128, it you want to use 0 255 range for your binary data, simply cast it as unisgned char
  49. // example:
  50. // byte x = 129;
  51. // if(x == 129) will return false
  52. // if((unsigned char) x == 129 ) will return true