v12345vtm

pehaCRC-escapbebytes

Mar 5th, 2017
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.28 KB | None | 0 0
  1. //https://wiki.phc-forum.de/index.php/PHC-Protokoll_des_internen_Bus
  2.  
  3.  
  4. String versie = " v12345vtm esp01 nanotussenstap voor nodemcu1.0 ino= pehaRS232CRCnanocrc4 \n\n\n ";
  5. String hexstring = "";
  6. //int maxIndex = 0 ;
  7. //int found = 0; //youtube = v12345vtm
  8. int elementen = 0;//te waarde hoeveel elementen in ions tabel zitten
  9. #define tabellengte 15
  10.  
  11.  
  12. String inData;//seriele recieve buffer
  13.  
  14. String myArray[tabellengte] ;
  15. int integertabel[tabellengte] ; //ons hex string in decimaal tabel gezet
  16. //////////////////////
  17. void setup() {
  18. delay(500);
  19. Serial.begin(115200);
  20. delay(1000);
  21. Serial.println("\n\n\n\n esp8622-01 nodemcu1.0 12E starting");
  22. Serial.println(versie);
  23. }
  24. ///////////////
  25. void naartabel(String data, char separator)
  26. {
  27.  
  28.  
  29. //wissen tabellen
  30. for (int n = 0; n < tabellengte; n++)
  31. {
  32. (integertabel[n]) = 0;
  33. (myArray[n]) = "";
  34.  
  35. }
  36. elementen = 0;
  37. String myArray2[10];
  38. int maxIndex = data.length() - 1;
  39. int strIndex[] = {0, -1};
  40. for (int i = 0; i <= maxIndex ; i++) {
  41. if (data.charAt(i) == separator || i == maxIndex) {
  42. strIndex[0] = strIndex[1] + 1;
  43. strIndex[1] = (i == maxIndex) ? i + 1 : i;
  44. // Serial.print(" waarde: ");
  45. String waarde = data.substring(strIndex[0], strIndex[1]);
  46. // Serial.println(waarde);
  47. myArray[elementen] = waarde ;
  48. elementen++;
  49. }
  50. }
  51. for (int x = 0; x < tabellengte; x = x + 1) {
  52. char charbuf[4];
  53. myArray[x].toCharArray(charbuf, 8);
  54. long int rgb = strtol(charbuf, 0, 16); //=>rgb=255
  55. integertabel[x] = rgb;
  56. }
  57. }
  58. /////////////////
  59. //////////uart
  60.  
  61. void uart() {
  62.  
  63. inData = "";//reset rs232 buffer
  64. while (Serial.available() > 0)
  65. {
  66. char recieved = Serial.read();
  67. inData += recieved;
  68.  
  69. // Process message when new line character is recieved
  70. if (recieved == '!')
  71. { Serial.print("\nESP Received: "); //
  72. Serial.print(inData);
  73. if (inData == "rolop!") {
  74.  
  75. inData = "";//reset rs232 buffer
  76. }
  77.  
  78.  
  79.  
  80. }
  81. }
  82. Serial.println(inData);
  83. }
  84. ////////////
  85. /////////////////subroutines
  86. int find_text(String needle, String haystack) {
  87. int foundpos = -1;
  88. for (int i = 0; i <= haystack.length() - needle.length(); i++) {
  89. if (haystack.substring(i, needle.length() + i) == needle) {
  90. foundpos = i;
  91. }
  92. }
  93. return foundpos;
  94. }
  95. /////////////////////////peha wifi commando
  96. void loop() {
  97. uart();
  98. hexstring = "FE 00 06 00 00 01 01"; // get feedback from inputmodule 00.00
  99. hexstring = "FE 00 06 00 40 01 01"; //get feedback from outputmod 00.00 //C0 FE 00 06 00 40 01 01 BF A8 C1
  100. hexstring = "FE 00 06 00 A0 01 01"; //get feedback from dimmermod 00.00 //C0 FE 00 06 00 A0 01 01 1E A1 C1
  101.  
  102. hexstring = "C1";// string met escape tekens nodig
  103.  
  104. crcberekenen(hexstring);
  105.  
  106. // toontabellen();
  107. delay(90000);
  108. }
  109. ///////////
  110. void toontabellen()
  111. {
  112. Serial.println("-----------------");
  113. Serial.println("hexstring:myArray=");
  114. for (int x = 0; x < tabellengte; x = x + 1) {
  115. // Serial.print (x);
  116.  
  117.  
  118. Serial.print (myArray[x]);
  119. Serial.print ("-");
  120. }
  121. Serial.println("-----------------");
  122. Serial.print(" integers:integertabel=");
  123. for (int x = 0; x < tabellengte; x = x + 1) {
  124.  
  125. Serial.print (integertabel[x]);
  126. Serial.print ("-");
  127. }
  128. Serial.println("-----------------");
  129. Serial.print(" elementen: ");
  130. Serial.println(elementen);
  131. //delay (50000);
  132. }
  133. ////////////////
  134.  
  135.  
  136. void crcberekenen(String hexstring)
  137.  
  138. {
  139.  
  140. naartabel(hexstring, ' ' );//een tabel met strings en een tabel met longintegers
  141. long int tempcrc = 65535 ; //0xFFFF; //'notatie voor 0xFFFF
  142. for (int i = 0; i < elementen; i = i + 1)
  143. {
  144. tempcrc = tempcrc ^ (integertabel[i]); // ^ = xor
  145. //nu gaan we 8keer schuiven met bytes
  146. for (int j = 8; j > 0; j = j - 1)
  147. {
  148. long int een = 1;
  149. long int som = tempcrc & een;
  150. if (som == 0x01) {
  151. //$temp_crc = ($temp_crc >> 1) ^ 0x8408;
  152. tempcrc = tempcrc >> 1; // 'bug in vb.net als je deelt door 2 !! niet doen dus beter >>1 bit naar rechts opschuiven
  153. tempcrc = tempcrc ^ 0x8408;//onze polynoom
  154. }
  155. else
  156. {
  157. tempcrc = tempcrc / 2;
  158. }
  159. }
  160. }
  161. tempcrc = tempcrc ^ 65535 ;//0xFFFF 'resultaat is een getal 45053 dec = AFFD hex = crc:>> FD AF
  162. String sCodeValue = String(tempcrc, HEX);
  163. //alles in grote letters zetten voor de schoonte
  164. sCodeValue.toUpperCase() ;
  165. String crcbyte1;
  166. String crcbyte2;
  167. crcbyte1 = sCodeValue.substring(2, 4) ;
  168. crcbyte2 = sCodeValue.substring(0, 2) ;
  169. Serial.print (" crc1= ");
  170. Serial.print (crcbyte1);
  171. Serial.print (" crc2= ");
  172. Serial.println (crcbyte2);
  173. Serial.print (" in= ");
  174. Serial.println (hexstring);
  175. Serial.print (" out= ");
  176. String crcresultaat = hexstring + " " + crcbyte1 + " " + crcbyte2 ;
  177. Serial.println (crcresultaat);
  178. Serial.print(" bassis zonder startstopCRC elementen: ");
  179. Serial.println(elementen);
  180.  
  181.  
  182. //we gaan onze resultaat in de string zetten omdat we em dan makkelijk kunnen doorsturen via rs232
  183.  
  184. naartabel(crcresultaat, ' ' ); //onze data om te versturen zit nu in tabel: integertabel[tabellengte]
  185.  
  186. toontabellen();
  187. //escaptekens zoeken
  188.  
  189.  
  190.  
  191.  
  192. String hexstringmetescape = "" ;
  193. for (int n = 0; n < elementen; n++)
  194. {
  195. Serial.println(myArray[n]);
  196.  
  197.  
  198.  
  199.  
  200. if (myArray[n] == "7D") {
  201. hexstringmetescape = hexstringmetescape + " 7D E0" ;
  202. }
  203.  
  204. else
  205. {
  206.  
  207. if (myArray[n] == "C1") {
  208. hexstringmetescape = hexstringmetescape + " 7D E1" ;
  209. }
  210.  
  211. else
  212.  
  213.  
  214.  
  215. if (myArray[n] == "C0") {
  216. hexstringmetescape = hexstringmetescape + " 7D E0" ;
  217. }
  218.  
  219. else
  220. hexstringmetescape = hexstringmetescape + " " + myArray[n];
  221. }
  222.  
  223. }
  224. String eindresultaat = hexstringmetescape ;
  225. //trim voorloopspaties
  226.  
  227. eindresultaat.trim() ;
  228. //start en stop byte erbij
  229. eindresultaat = "C0 "+ eindresultaat + " C1";
  230. Serial.print (" out CRC escape =");
  231. Serial.println (eindresultaat);
  232. naartabel(eindresultaat, ' ' ); //onze data om te versturen zit nu in tabel: integertabel[tabellengte]
  233.  
  234. toontabellen();
  235.  
  236. //printen naar de peha serieel naar buiten
  237. for (int n = 0; n < tabellengte; n++)
  238. {
  239. Serial.print(integertabel[n]);
  240. }
  241.  
  242. }
Advertisement
Add Comment
Please, Sign In to add comment