diff --git a/Laser_Test/General.ino b/Laser_Test/General.ino index 1fb1072..c153193 100644 --- a/Laser_Test/General.ino +++ b/Laser_Test/General.ino @@ -1,7 +1,23 @@ -void Generate_Code() -{ - //scroll chars - - +//Generate line1 and line 2 with 14 chars +void Generate_Code14() +{ + byte tmp_byte; + + //scroll chars line 1 + tmp_byte = line1_14[13]; + for (int i = 12; i >= 0; i--) + { + line1_14[i + 1] = line1_14[i]; + } + line1_14[0] = tmp_byte; + + + //scroll chars line 2 + tmp_byte = line2_14[0]; + for (int i = 1; i <= 13; i++) + { + line2_14[i - 1] = line2_14[i]; + } + line2_14[13] = tmp_byte; } diff --git a/Laser_Test/Laser_Test.ino b/Laser_Test/Laser_Test.ino index 79a1124..299bd30 100644 --- a/Laser_Test/Laser_Test.ino +++ b/Laser_Test/Laser_Test.ino @@ -33,23 +33,26 @@ bool watchdog_send = false; //500SL Wachtdog send, thus switched to ve //void Linx500SL_Watchdog(); //void Linx500SL_SendCode(); +char line1_14[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4'}; +char line2_14[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N'}; + void setup() { pinMode(pin_LASERTYPE, INPUT_PULLUP); pinMode(pin_MODE, INPUT_PULLUP); - //init debug port + //init debug port Serial.begin(9600); - if(digitalRead(pin_LASERTYPE) == false) + if (digitalRead(pin_LASERTYPE) == false) { Serial.println("Lasertype set to : Linx 500SL - baudrate 19k2"); //init serial ports MySerial1.begin(19200, SERIAL_8N1, pin_RXD1, pin_TXD1); MySerial2.begin(19200, SERIAL_8N1, pin_RXD1, pin_TXD2); lasertype = 1; - } + } else { Serial.println("Lasertype set to : Linx ??? - baudrate 9600"); @@ -60,24 +63,28 @@ void setup() { } //init I2C Display - if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { + if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); - for(;;); // Don't proceed, loop forever + for (;;); // Don't proceed, loop forever } // Clear the buffer display.clearDisplay(); - display.setTextSize(1); - display.setTextColor(SSD1306_WHITE); - display.setCursor(10,0); + display.setTextSize(1); + display.setTextColor(SSD1306_WHITE); + display.setCursor(10, 0); display.println(F("RS232 Sniffer v1.0")); delay(1000); display.display(); display.clearDisplay(); - display.setCursor(10,0); - if(lasertype==1) {display.println(F("Linx 500SL"));} - if(lasertype==2) {display.println(F("MundiScan 2000"));} - display.setCursor(0,10); + display.setCursor(10, 0); + if (lasertype == 1) { + display.println(F("Linx 500SL")); + } + if (lasertype == 2) { + display.println(F("MundiScan 2000")); + } + display.setCursor(0, 10); display.println(F("Sniffer mode selected")); display.display(); delay(2000); @@ -88,51 +95,59 @@ void setup() { void loop() { // put your main code here, to run repeatedly: - if(digitalRead(pin_MODE) != b_mode) + if (digitalRead(pin_MODE) != b_mode) { - b_mode = digitalRead(pin_MODE); - if(b_mode) - { - Serial.println("Mode : Sniffer"); - display.clearDisplay(); - display.setTextSize(1); - display.setTextColor(SSD1306_WHITE); - display.setCursor(10,0); - if(lasertype==1) {display.println(F("Linx 500SL"));} - if(lasertype==2) {display.println(F("MundiScan 2000"));} - display.setCursor(0,10); - display.println(F("Sniffer mode selected")); - display.display(); - delay(1000); - } - else - { - Serial.println("Mode : Generate code"); - display.clearDisplay(); - display.setTextSize(1); - display.setTextColor(SSD1306_WHITE); - display.setCursor(10,0); - if(lasertype==1) {display.println(F("Linx 500SL"));} - if(lasertype==2) {display.println(F("MundiScan 2000"));} - display.setCursor(0,10); - display.println(F("Send mode selected")); - display.display(); - delay(1000); - } - - + b_mode = digitalRead(pin_MODE); + if (b_mode) + { + Serial.println("Mode : Sniffer"); + display.clearDisplay(); + display.setTextSize(1); + display.setTextColor(SSD1306_WHITE); + display.setCursor(10, 0); + if (lasertype == 1) { + display.println(F("Linx 500SL")); + } + if (lasertype == 2) { + display.println(F("MundiScan 2000")); + } + display.setCursor(0, 10); + display.println(F("Sniffer mode selected")); + display.display(); + delay(1000); + } + else + { + Serial.println("Mode : Generate code"); + display.clearDisplay(); + display.setTextSize(1); + display.setTextColor(SSD1306_WHITE); + display.setCursor(10, 0); + if (lasertype == 1) { + display.println(F("Linx 500SL")); + } + if (lasertype == 2) { + display.println(F("MundiScan 2000")); + } + display.setCursor(0, 10); + display.println(F("Send mode selected")); + display.display(); + delay(1000); + } + + } - if(b_mode) + if (b_mode) { - if (MySerial1.available() > 0) { - // read the incoming byte: - incomingByte = MySerial1.read(); + if (MySerial1.available() > 0) { + // read the incoming byte: + incomingByte = MySerial1.read(); - // say what you got: - Serial.print("P1 received: "); - Serial.println(incomingByte, DEC); - } + // say what you got: + Serial.print("P1 received: "); + Serial.println(incomingByte, DEC); + } if (MySerial2.available() > 0) { // read the incoming byte: @@ -148,34 +163,43 @@ void loop() { else { now = millis(); - if(now - prev >= 5000) + if (now - prev >= 5000) { //Laser 500SL - if(lasertype == 1) + if (lasertype == 1) { - if(!watchdog_send) + if (!watchdog_send) { - display.setCursor(0,20); - - display.setTextColor(WHITE, BLACK); - - display.println(F("Sending WATCHDOG ")); - display.display(); - - Serial.println("Linx 500SL : Sending WatchDog command to switch to VectorService Protocol"); - - Linx500SL_Watchdog(); - if(!watchdog_send) {Serial.println("Linx 500SL : Error !! --> No Response from laser");} - if(watchdog_send) {Serial.println("Linx 500SL : Laser switched to VectorService Protocol !!");} + display.setCursor(0, 20); - display.setCursor(0,20); - display.setTextColor(WHITE, BLACK); - if(!watchdog_send) {display.println(F("No Response laser !! "));} - if(watchdog_send) {display.println(F("Laser Connected !! "));} + display.setTextColor(WHITE, BLACK); + + display.println(F("Sending WATCHDOG ")); + display.display(); + + Serial.println("Linx 500SL : Sending WatchDog command to switch to VectorService Protocol"); + + Linx500SL_Watchdog(); + if (!watchdog_send) { + Serial.println("Linx 500SL : Error !! --> No Response from laser"); + } + if (watchdog_send) { + Serial.println("Linx 500SL : Laser switched to VectorService Protocol !!"); + } + + display.setCursor(0, 20); + display.setTextColor(WHITE, BLACK); + if (!watchdog_send) { + display.println(F("No Response laser !! ")); + } + if (watchdog_send) { + display.println(F("Laser Connected !! ")); + } display.display(); delay(5000); - + // ik even geen laser heb ;-) + watchdog_send = true; } else { @@ -183,17 +207,17 @@ void loop() { } } - if(lasertype == 2) + if (lasertype == 2) { Serial.println("."); MySerial1.println("P1 : Hallo Frank"); MySerial2.println("P2 : Hallo Frank"); } - + prev = now; } - - + + } -} +} diff --git a/Laser_Test/Linx500SL.ino b/Laser_Test/Linx500SL.ino index 294fcac..8d83728 100644 --- a/Laser_Test/Linx500SL.ino +++ b/Laser_Test/Linx500SL.ino @@ -3,56 +3,51 @@ byte SL500_SEQ = 00; byte SL500_CRC = 00; byte SL500_XOR = 00; - -//char SL500SL_WD[] = {204,170,0,0,0,1,0,0,0,1,0,19,0,0,0,43,0,0,0}; -char SL500_WD[] = {0xCC,0xAA,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x13,0x00,0x00,0x00,0x2B,0x00,0x00,0x00}; - - - //Send Wachtdog and wait for a reply to switch 500SL laser into VectorService Protocol //Wachdog command CC AA 00 00 00 01 00 00 00 01 00 13 00 00 00 2B [SEQ] [CRC] [XOR] void Linx500SL_Watchdog() { - + char SL500_WD[] = {0xCC, 0xAA, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x13, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00}; + int count = 0; byte p2_rec_byte; - while ((!watchdog_send) && count < 15) - { + while ((!watchdog_send) && count < 5) + { - SL500_SEQ = SL500_SEQ + 1; + SL500_SEQ++; SL500_WD[16] = SL500_SEQ; - Linx500_Checksum(16); + Linx500_Checksum(SL500_WD, 16); SL500_WD[17] = SL500_CRC; SL500_WD[18] = SL500_XOR; - - + + Serial.println("Linx 500SL : WatchDog"); //Send karakters of the watchdog command - for (int i = 0; i <= 18; i++) + for (int i = 0; i <= 18; i++) { - // MySerial1.print(SL500_WD[i], DEC); - MySerial1.write(SL500_WD[i]); + // MySerial1.print(SL500_WD[i], DEC); + MySerial1.write(SL500_WD[i]); } //Small delay to give the laser some time to respond - delay(500); + delay(500); - if (MySerial1.available() > 0) - { + if (MySerial1.available() > 0) + { // read the incoming byte: p2_rec_byte = MySerial1.read(); - } - - if(p2_rec_byte == 204) - { + } + + if (p2_rec_byte == 204) + { watchdog_send = true; - } - count = count + 1; + } + count = count + 1; delay(2000); } } @@ -61,34 +56,91 @@ void Linx500SL_Watchdog() //500SL Send Code void Linx500SL_SendCode() { - Generate_Code(); + char line1[60] = {0xCC, 0xAA, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x37, 0x00, 0x00, 0x00, 0x25, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x000, 0x00}; + char line2[60] = {0xCC, 0xAA, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x37, 0x00, 0x00, 0x00, 0x25, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x000, 0x00}; + //pos 20 = Remote update Field + //pos 16 = SEQ + //pos 25 = Start tekst + #define pos_seq 16 + #define pos_txt 25 - + Generate_Code14(); + + //Line 1 + SL500_SEQ++; + line1[pos_seq] = SL500_SEQ; + Serial.println(""); + Serial.print("Linx500SL --> Line 1 : "); + for (int i = 0; i <= 13; i++) + { + line1[pos_txt + (i * 2)] = line1_14[i]; + line1[pos_txt + (i * 2) + 1] = 0; + Serial.write(line1_14[i]); + } + + Linx500_Checksum(line1, pos_txt + 28); + + line1[pos_txt + 28] = SL500_CRC; + line1[pos_txt + 28 + 1] = SL500_XOR; + + //Write all chars to Serial port + for (int i = 0; i <= (pos_txt + 28 + 1); i++) + { + MySerial1.write(line1[i]); + } + Serial.println(""); + + //Line 2 + SL500_SEQ++; + line2[pos_seq] = SL500_SEQ; + Serial.println(""); + Serial.print("Linx500SL --> Line 2 : "); + for (int i = 0; i <= 13; i++) + { + line2[pos_txt + (i * 2)] = line2_14[i]; + line2[pos_txt + (i * 2) + 1] = 0; + Serial.write(line1_14[i]); + } + + Linx500_Checksum(line2, pos_txt + 28); + + line2[pos_txt + 28] = SL500_CRC; + line2[pos_txt + 28 + 1] = SL500_XOR; + + //Write all chars to Serial port + for (int i = 0; i <= (pos_txt + 28 + 1); i++) + { + MySerial1.write(line2[i]); + } + Serial.println(""); + } - -void Linx500_Checksum(int char_count) +//Linx 500 SL Calculate CRC and XOR +void Linx500_Checksum(char *cmd_line, int char_count) { - long val_crc = 0; long val_xor = 0; - - //Checksum Calculation - for (int i = 0; i <= char_count; i++) - { - val_crc = val_crc + SL500_WD[i]; - val_xor = val_xor ^ SL500_WD[i]; - } - val_crc = 255 - (val_crc % 256); + //Checksum Calculation + for (int i = 0; i <= char_count; i++) + { + val_crc = val_crc + cmd_line[i]; + val_xor = val_xor ^ cmd_line[i]; + } - Serial.print("Checksum : "); - Serial.println(val_crc); - Serial.println(val_xor); + val_crc = 255 - (val_crc % 256); - SL500_CRC = val_crc; - SL500_XOR = val_xor; + Serial.println(""); + Serial.print("Checksum : CRC = "); + Serial.print(val_crc, HEX); + Serial.print (" XOR = "); + Serial.print(val_xor, HEX); + Serial.println(""); + + SL500_CRC = val_crc; + SL500_XOR = val_xor; }