main2.ino 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. //Connect TX pin of the HC-05 to RX pin of the Arduino
  2. //Connect RX pin of the HC-05 to TX pin of the Arduino
  3. //You can use SoftwareSerial Library, but i dont recommend it for fast and long data transmission
  4. //Otherwise you have to check Serial.available() > excepted number of bytes sent before reading the message
  5. //There's no problem with hardware serial that comes with the arduino. It's perfect
  6. //
  7. #include <SoftwareSerial.h>
  8. SoftwareSerial mySerial(10, 11); // RX, TX
  9. void readBT();
  10. void sendBT(const char *data, int l)
  11. {
  12. char *tx_data = new byte[l + 4];
  13. tx_data[0] = 85; //preamble
  14. tx_data[1] = 85; //preamble
  15. tx_data[2] = (l >> 8) & 0x000000FF;
  16. tx_data[3] = (l & 0x000000FF);
  17. memcpy(tx_data + 4, data, l);
  18. BTSerial.write(tx_data, l + 4);
  19. BTSerial.flush();
  20. delete[] tx_data;
  21. }
  22. void setup() {
  23. pinMode(2, OUTPUT);
  24. pinMode(3, OUTPUT);
  25. pinMode(4, OUTPUT);
  26. pinMode(5, OUTPUT);
  27. pinMode(6, OUTPUT);
  28. pinMode(7, OUTPUT);
  29. pinMode(8, OUTPUT);
  30. pinMode(9, OUTPUT);
  31. mySerial.begin(9600);
  32. Serial.begin(9600);
  33. digitalWrite(2, HIGH);
  34. delay(1000);
  35. digitalWrite(2, LOW);
  36. }
  37. char* data;
  38. int data_length;
  39. int i=0;
  40. int timeout;
  41. int highLow;
  42. char* send_data;
  43. void loop() {
  44. readBT();
  45. }
  46. void readBT()
  47. {
  48. if(mySerial.available() >= 2)
  49. {
  50. timeout=0;
  51. data_length = 0;
  52. byte pre1 = mySerial.read();
  53. byte pre2 = mySerial.read();
  54. if(pre1 != 85 || pre2 != 85) return;
  55. while(mySerial.available() < 2) continue;
  56. byte x1 = mySerial.read();
  57. byte x2 = mySerial.read();
  58. data_length = x1 << 8 | x2;
  59. data = new char[data_length];
  60. i=0;
  61. while(i<data_length)
  62. {
  63. if(mySerial.available()==0){
  64. if(++timeout == 1000)
  65. goto FreeData;
  66. continue;
  67. }
  68. timeout=0;
  69. data[i++] = mySerial.read();
  70. }
  71. send_data = new char[data_length+1];
  72. send_data[0] = 'S';
  73. for(byte i=0; i<2;i++)
  74. send_data[i+1] = data[i];
  75. highLow = data[0] == 'E' ? HIGH : LOW;
  76. digitalWrite(data[1], highLow);
  77. sendBT(send_data, data_length+1);
  78. delete [] send_data;
  79. FreeData:
  80. delete[] data;
  81. }
  82. }