Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //https://wiki.phc-forum.de/index.php/PHC-Protokoll_des_internen_Bus
- String versie = " v12345vtm esp01 nanotussenstap voor nodemcu1.0 ino= pehaRS232CRCnanocrc4 \n\n\n ";
- String hexstring = "";
- //int maxIndex = 0 ;
- //int found = 0; //youtube = v12345vtm
- int elementen = 0;//te waarde hoeveel elementen in ions tabel zitten
- #define tabellengte 15
- String inData;//seriele recieve buffer
- String myArray[tabellengte] ;
- int integertabel[tabellengte] ; //ons hex string in decimaal tabel gezet
- //////////////////////
- void setup() {
- delay(500);
- Serial.begin(115200);
- delay(1000);
- Serial.println("\n\n\n\n esp8622-01 nodemcu1.0 12E starting");
- Serial.println(versie);
- }
- ///////////////
- void naartabel(String data, char separator)
- {
- //wissen tabellen
- for (int n = 0; n < tabellengte; n++)
- {
- (integertabel[n]) = 0;
- (myArray[n]) = "";
- }
- elementen = 0;
- String myArray2[10];
- int maxIndex = data.length() - 1;
- int strIndex[] = {0, -1};
- for (int i = 0; i <= maxIndex ; i++) {
- if (data.charAt(i) == separator || i == maxIndex) {
- strIndex[0] = strIndex[1] + 1;
- strIndex[1] = (i == maxIndex) ? i + 1 : i;
- // Serial.print(" waarde: ");
- String waarde = data.substring(strIndex[0], strIndex[1]);
- // Serial.println(waarde);
- myArray[elementen] = waarde ;
- elementen++;
- }
- }
- for (int x = 0; x < tabellengte; x = x + 1) {
- char charbuf[4];
- myArray[x].toCharArray(charbuf, 8);
- long int rgb = strtol(charbuf, 0, 16); //=>rgb=255
- integertabel[x] = rgb;
- }
- }
- /////////////////
- //////////uart
- void uart() {
- inData = "";//reset rs232 buffer
- while (Serial.available() > 0)
- {
- char recieved = Serial.read();
- inData += recieved;
- // Process message when new line character is recieved
- if (recieved == '!')
- { Serial.print("\nESP Received: "); //
- Serial.print(inData);
- if (inData == "rolop!") {
- inData = "";//reset rs232 buffer
- }
- }
- }
- Serial.println(inData);
- }
- ////////////
- /////////////////subroutines
- int find_text(String needle, String haystack) {
- int foundpos = -1;
- for (int i = 0; i <= haystack.length() - needle.length(); i++) {
- if (haystack.substring(i, needle.length() + i) == needle) {
- foundpos = i;
- }
- }
- return foundpos;
- }
- /////////////////////////peha wifi commando
- void loop() {
- uart();
- hexstring = "FE 00 06 00 00 01 01"; // get feedback from inputmodule 00.00
- 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
- 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
- hexstring = "C1";// string met escape tekens nodig
- crcberekenen(hexstring);
- // toontabellen();
- delay(90000);
- }
- ///////////
- void toontabellen()
- {
- Serial.println("-----------------");
- Serial.println("hexstring:myArray=");
- for (int x = 0; x < tabellengte; x = x + 1) {
- // Serial.print (x);
- Serial.print (myArray[x]);
- Serial.print ("-");
- }
- Serial.println("-----------------");
- Serial.print(" integers:integertabel=");
- for (int x = 0; x < tabellengte; x = x + 1) {
- Serial.print (integertabel[x]);
- Serial.print ("-");
- }
- Serial.println("-----------------");
- Serial.print(" elementen: ");
- Serial.println(elementen);
- //delay (50000);
- }
- ////////////////
- void crcberekenen(String hexstring)
- {
- naartabel(hexstring, ' ' );//een tabel met strings en een tabel met longintegers
- long int tempcrc = 65535 ; //0xFFFF; //'notatie voor 0xFFFF
- for (int i = 0; i < elementen; i = i + 1)
- {
- tempcrc = tempcrc ^ (integertabel[i]); // ^ = xor
- //nu gaan we 8keer schuiven met bytes
- for (int j = 8; j > 0; j = j - 1)
- {
- long int een = 1;
- long int som = tempcrc & een;
- if (som == 0x01) {
- //$temp_crc = ($temp_crc >> 1) ^ 0x8408;
- tempcrc = tempcrc >> 1; // 'bug in vb.net als je deelt door 2 !! niet doen dus beter >>1 bit naar rechts opschuiven
- tempcrc = tempcrc ^ 0x8408;//onze polynoom
- }
- else
- {
- tempcrc = tempcrc / 2;
- }
- }
- }
- tempcrc = tempcrc ^ 65535 ;//0xFFFF 'resultaat is een getal 45053 dec = AFFD hex = crc:>> FD AF
- String sCodeValue = String(tempcrc, HEX);
- //alles in grote letters zetten voor de schoonte
- sCodeValue.toUpperCase() ;
- String crcbyte1;
- String crcbyte2;
- crcbyte1 = sCodeValue.substring(2, 4) ;
- crcbyte2 = sCodeValue.substring(0, 2) ;
- Serial.print (" crc1= ");
- Serial.print (crcbyte1);
- Serial.print (" crc2= ");
- Serial.println (crcbyte2);
- Serial.print (" in= ");
- Serial.println (hexstring);
- Serial.print (" out= ");
- String crcresultaat = hexstring + " " + crcbyte1 + " " + crcbyte2 ;
- Serial.println (crcresultaat);
- Serial.print(" bassis zonder startstopCRC elementen: ");
- Serial.println(elementen);
- //we gaan onze resultaat in de string zetten omdat we em dan makkelijk kunnen doorsturen via rs232
- naartabel(crcresultaat, ' ' ); //onze data om te versturen zit nu in tabel: integertabel[tabellengte]
- toontabellen();
- //escaptekens zoeken
- String hexstringmetescape = "" ;
- for (int n = 0; n < elementen; n++)
- {
- Serial.println(myArray[n]);
- if (myArray[n] == "7D") {
- hexstringmetescape = hexstringmetescape + " 7D E0" ;
- }
- else
- {
- if (myArray[n] == "C1") {
- hexstringmetescape = hexstringmetescape + " 7D E1" ;
- }
- else
- if (myArray[n] == "C0") {
- hexstringmetescape = hexstringmetescape + " 7D E0" ;
- }
- else
- hexstringmetescape = hexstringmetescape + " " + myArray[n];
- }
- }
- String eindresultaat = hexstringmetescape ;
- //trim voorloopspaties
- eindresultaat.trim() ;
- //start en stop byte erbij
- eindresultaat = "C0 "+ eindresultaat + " C1";
- Serial.print (" out CRC escape =");
- Serial.println (eindresultaat);
- naartabel(eindresultaat, ' ' ); //onze data om te versturen zit nu in tabel: integertabel[tabellengte]
- toontabellen();
- //printen naar de peha serieel naar buiten
- for (int n = 0; n < tabellengte; n++)
- {
- Serial.print(integertabel[n]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment