Guest User

Untitled

a guest
Apr 8th, 2020
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.77 KB | None | 0 0
  1. #include <SoftwareSerial.h>
  2.  
  3. #define BAUD_RATE 2400
  4. #define D5 (14)
  5. #define D6 (12)
  6. const short int BUILTIN_LED1 = 2; //GPIO2
  7.  
  8. byte msg1[] = {0x00};
  9. byte msg2[] = {0x40,0x23,0x9C}; // #CMD_TYPE (x40) Type checksum
  10. byte msg3[] = {0x49,0x00,0x00,0xB6}; // #CMD_MODE (x49) # Modes # Views checksum
  11. byte msg4[] = {0x52,0x00,0xC2,0x01,0x00,0x6E}; // #CMD_SPEED (x52) baud (LSB first) checksum
  12. byte msg5[] = {0x5F,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0xA0}; // #CMD_VERSION (x5F) Hardware_V Software_V checksum
  13. byte msg6[] = {0xA0,0x00,0x4C,0x50,0x46,0x32,0x2D,0x44,0x45,0x54,0x45,0x43,0x54,0x00,0x00,0x00,0x00,0x00,0x1D}; // #CMD_INFO|bytes|mode 0 name 0 checksum
  14. byte msg7[] = {0x98,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x41,0x07}; // #CMD_INFO|3|mode 1 (raw) raw_min raw_max checksum
  15. byte msg8[] = {0x98,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xC8,0x42,0xEF}; // #CMD_INFO|3|mode 2 (pct) pct_min pct_max checksum
  16. byte msg9[] = {0x98,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x41,0x05}; // #CMD_INFO|3|mode 3 (SI) si_min si_max checksum
  17. byte msg10[] = {0x80,0x04,0x00,0x7B}; // #CMD_INFO|size|mode 0,4,symbol checksum
  18. byte msg11[] = {0x88,0x05,0x10,0x00,0x62}; // #CMD_INFO|1|mode 5 (FM) Function Map-In -out checksum
  19. byte msg12[] = {0x90,0x80,0x01,0x00,0x03,0x00,0xED}; // #CMD_INFO|2|mode x80 sample_size Data_type Figures Decimals checksum
  20.  
  21. int isConnect = 0;
  22. // Reminder: the buffer size optimizations here, in particular the isrBufSize that only accommodates
  23. // a single 8N1 word, are on the basis that any char written to the loopback SoftwareSerial adapter gets read
  24. // before another write is performed. Block writes with a size greater than 1 would usually fail.
  25. SoftwareSerial swSer;
  26.  
  27. int intCounter=0;
  28.  
  29. void setup() {
  30. pinMode(BUILTIN_LED1, OUTPUT);
  31. digitalWrite(BUILTIN_LED1, HIGH);
  32. Serial.begin(115200);
  33. Serial.println("LEGO UART Custom Sensor");
  34.  
  35. InitSensor();
  36.  
  37. }
  38.  
  39. void loop() {
  40. intCounter++;
  41. send_value(intCounter);
  42.  
  43. if (intCounter>=100){
  44. intCounter=0;
  45. }
  46.  
  47. delay(200);
  48. }
  49.  
  50. int send_value(byte iByte){
  51.  
  52. byte iValue = iByte & 0xFF;
  53. byte payload[] = {0,0,0};
  54. payload[0]=0xC0;
  55. payload[1]=iValue;
  56. payload[2]=0xFF ^ 0xC0 ^ iValue; // payload = bytes([0xC0, value, 0xFF ^ 0xC0 ^ value])
  57. swSer.write(payload,sizeof(payload));
  58.  
  59. }
  60.  
  61. void InitSensor(){
  62.  
  63. Serial.println("Init sensor");
  64.  
  65. //rx, tx
  66. swSer.begin(BAUD_RATE, SWSERIAL_8N1, D5, D6, false, 95, 11);
  67.  
  68. swSer.write(msg1,sizeof(msg1));
  69. swSer.write(msg2,sizeof(msg2));
  70. swSer.write(msg3,sizeof(msg3));
  71. swSer.write(msg4,sizeof(msg4));
  72. swSer.write(msg5,sizeof(msg5));
  73. swSer.write(msg6,sizeof(msg6));
  74. swSer.write(msg7,sizeof(msg7));
  75. swSer.write(msg8,sizeof(msg8));
  76. swSer.write(msg9,sizeof(msg9));
  77. swSer.write(msg10,sizeof(msg10));
  78. swSer.write(msg11,sizeof(msg11));
  79. swSer.write(msg12,sizeof(msg12));
  80.  
  81. delay(10);
  82. int incomingByte;
  83. byte b = 0x04;
  84. swSer.write(b); //ACK
  85. Serial.println("Wait for ACK from the smart hub");
  86. int startMillis = millis();
  87. int currentMillis = startMillis;
  88. while ((currentMillis - startMillis) < 2000){
  89. if (swSer.available() > 0){
  90.  
  91. incomingByte = swSer.read();
  92. //Serial.println(incomingByte);
  93. if (incomingByte==4){
  94. Serial.println("ACK Received");
  95. isConnect=1;
  96. swSer.end();
  97. break;
  98. }
  99. } else {
  100. currentMillis=millis();
  101. }
  102. }
  103.  
  104. if (isConnect==0){
  105. Serial.println("Timeout: reset sensor");
  106. delay(1000);
  107. ESP.restart();
  108. } else {
  109. Serial.println("Connection OK");
  110. digitalWrite(BUILTIN_LED1, LOW);
  111. swSer.begin(115200, SWSERIAL_8N1, D5, D6, false, 95, 11);
  112. }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment