#define UART // UART vagy SPI kommunikáció. Ha ki van kommentezve SPI lesz...! // A kimenő parancs formátuma: // [Parancs], [szóköz], [Adat], [Szóköz], [CrLf] //A [Parancs] - a parancs értéke, két karakteren, 8bites hexadecimális formában //Az [Adat] - előjeles, 16bites szám, decimális formában. Parancsfüggő... //A [CrLf] - lezáró karaktersor(alapértelmezetten küldheti a terminál program) // SPI UART //CLK - 13 - RX //SDI - 12 //SDO - 11 - TX //SSEL - 2 #ifdef UART #include SoftwareSerial mySerial(13, 11); // RX, TX #else #include #include //13-clk, 11-sdo, 12-sdi, 2-SSEL #endif typedef unsigned char u8; typedef char s8; typedef unsigned short u16; typedef short s16; typedef unsigned long u32; typedef long s32; typedef union { u8 raw[4]; struct { u8 Command; s16 Data; u8 chk; }__attribute__((packed)); } CommFormat; CommFormat CommData; String Str, S; u16 i,i1,ki; void setup() { Serial.begin(115200); Serial.setTimeout(1000); #ifndef UART SPI.begin(); SPI.beginTransaction(SPISettings(200000, MSBFIRST, SPI_MODE0)); pinMode(12, OUTPUT); digitalWrite(12, 1); pinMode(2, OUTPUT); digitalWrite(2, 1); Serial.println("DSO3381 SPI teszt"); #else mySerial.begin(115200); mySerial.setTimeout(100); Serial.println("DSO3381 UART teszt"); pinMode(11, OUTPUT); digitalWrite(11, 1); pinMode(12, OUTPUT); digitalWrite(12, 0); #endif } void loop() { Parser(); delay(100); } //--------------------------------------------------------------------------------------- void Parser(void) { if((Serial.available() > 0)) { Str=Serial.readStringUntil(' '); Str.toUpperCase(); CommData.Command=HexToBin(Str); //Serial.println("S:"+Str); Str=Serial.readStringUntil(' '); //Serial.println("S:"+Str); CommData.Data=Str.toInt(); CommData.raw[3]=0; Serial.readStringUntil(10); for(i=0; i<3; i++) CommData.raw[3]=CommData.raw[3]+CommData.raw[i]; CommData.raw[3]=256-CommData.raw[3]; Serial.println(); Serial.println("------Adas--------"); Serial.println(CommData.Command, HEX); Serial.println(CommData.Data, DEC); Serial.println(CommData.chk, HEX); #ifndef UART digitalWrite(2, 0); for(i=0; i<4; i++) {SPI.transfer(CommData.raw[i]);} SPI.transfer(0); SPI.transfer(0); digitalWrite(2, 1); delay(100); Serial.println("------Vetel--------"); digitalWrite(2, 0); if(CommData.Command==0x30) { Serial.println("Csatorna - 1"); for(i=0; i<300; i++) { Serial.print(Format(SPI.transfer(0))); if((i+1)%16==0) Serial.println(); } Serial.println(); Serial.println("Csatorna - 2"); for(i=0; i<300; i++) { Serial.print(Format(SPI.transfer(0))); if((i+1)%16==0) Serial.println(); } } else { for(i=0; i<4; i++) {CommData.raw[i]=SPI.transfer(0);} SPI.transfer(0); SPI.transfer(0); Serial.println(CommData.Command, HEX); Serial.println(CommData.Data, DEC); Serial.println(CommData.chk, HEX); } digitalWrite(2, 1); #else //mySerial.flush(); for(i=0; i<4; i++) {mySerial.write(CommData.raw[i]);} delay(10); Serial.println("------Vetel--------"); if(CommData.Command==0x30) { Serial.println("Csatorna - 1"); for(i=0; i<300; i++) { Serial.print(Format(mySerial.read())); if((i+1)%16==0) Serial.println(); } Serial.println(); Serial.println("Csatorna - 2"); for(i=0; i<300; i++) { Serial.print(Format(mySerial.read())); if((i+1)%16==0) Serial.println(); } } else { //while(mySerial.available() >3); for(i=0; i<4; i++) {CommData.raw[i]=mySerial.read();} Serial.println(CommData.Command, HEX); Serial.println(CommData.Data, DEC); Serial.println(CommData.chk, HEX); } #endif } } String Format(u8 Be) { String S; S=String(Be, HEX); if(S.length()<2) S="0"+S; return "0x"+S+" "; } u8 HexToBin(String Be) { u8 D, B; if(Be.length()==1) Be='0'+Be; B=Be.charAt(0); if (B<'A') B = B - '0'; else B = B + 10 - 'A'; D=B<<4; B=Be.charAt(1); if (B<'A') B = B - '0'; else B = B + 10 - 'A'; D=D | B; return D; }