|
|
本帖最后由 s930427 于 2016-5-30 15:11 编辑
目前要用arduino經由tx rx傳送封包,按照封包格式傳送,單接收結果為完全不同,求大神幫忙
圖為封包格式
希望與此圖上半部一樣的訊號,但是ARDINO卻是下半部的那樣。
- /* program design by Edy TSAI */
- /* KEB company
- /* NOTE 使用 Serail.print 表示 寫入 ; 先選通道 為 Serial 或是Serial1-3, print(這裡放value,格式 (ex: bin or hex )) */
- #include <UTFT.h>
- #include <Wire.h>
- UTFT myGLCD(HX8357B, 38, 39, 40, 41);
- extern uint8_t BigFont[];
- extern uint8_t SmallFont[];
- char buf[4];
- byte R;
- byte A[13];
- void setup() {
- myGLCD.InitLCD();
- myGLCD.clrScr();
- myGLCD.setFont(BigFont);
- myGLCD.setColor(255, 255, 255); //BLACK
- Serial.begin(38400);
- //Serial.begin(4800, SERIAL_7E1);
- Serial3.begin(38400);
- Wire.begin();
- //Serial3.begin(38400, SERIAL_7E1);
- }
- void loop() {
- // Serial.print(48, HEX);
- myGLCD.print("R & W", CENTER, CENTER);
- //READp();
- writep();
- //Serial.end();
- //Serial3.end();
- }
- void serial()
- {
- R = Serial.available();
- myGLCD.printNumI(R , 0, 0);
- if (Serial.available())
- {
- Serial.readBytes(A, 13);
- if (A[0] == 48) {
- Serial.println("LOGIN ACESS !");// 密碼 0009 回傳 ,9 IN ASII =57
- }
- for (int i = 0; i < 13; i++)
- {
- Serial.print(A[i] ); // 回傳給 serial 收到的資料
- Serial3.print(A[i]); // 並傳到 serial 3
- myGLCD.print("SERIAL READ ", 50, 0);
- myGLCD.printNumI(A[i] , i * 35, 30);
- delay(100);
- }
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////
- void READp()
- {
- // EOT = 04h ENQ = 05h STX = 02h ETX = 03h ACK = 06h NAK = 15h
- // 48, 44, 30, 33, 30, 33, 30, 30, 05, 29 測試用 封包 16進制
- //byte request[10] = {48, 44, 30, 33, 30, 33, 30, 30, 05, 29};
- byte request[10] = {72, 68, 48, 51, 48, 51, 48, 48, 05, 41}; //宣告 request 封包 大小為 10 bytes 請注意 輸入 真值
- Serial3.write(request, 10); // send request through Serial3 note write send binary data to serial port
- byte Response[13];
- Serial3.readBytes(Response, 13);
- for (int j = 0; j < 13; j++) {
- myGLCD.printNumI(Response[j], 0, j * 20);
- //myGLCD.print(itoa(Response[j], buf, 16) , 50, j *20);
- }
- }
- //////////////////////////////////////////////////////////////////
- void writep()
- {
- /* _____________________________________________________________
- * 封包格式 EOT 01 | STX | H/G | IID | address | data 8 | SET | ETX | BCC |
- | 02h | 'H' | '2' | 4byte | 8byte |'0''1'| 03h | >1Fh |
- */
- // | | | STX | | | | | | | |
- byte wrequest[27]={30, 34, 30, 31, 30, 32, 34,38, 32, 30, 31, 32, 34, 33, 17, 17, 17, 17, 17, 17, 17, 31, 17, 17, 17, 33, 45}; //HEX
- //byte wrequest[] = {0x04, '0', '1', 0x02, 'H', '4', '0', '1', '2', 'C', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', 0x03, 0x28};
- //byte wrequest[23]={04, 48, 49, 50, 72, 54, 48, 49, 50, 67, 48, 48, 48, 48, 48, 48, 48, 49, 48, 48, 48, 03, 35}; //DEC Warr
-
- //Serial3.write(wrequest, 19); // send request through Serial3 note write send binary data to serial port
- for (int a = 0; a < 27; a++)
- {
- sendbyte(wrequest[a]);
-
- //delay(2/10);
- }
-
- //Serial.write(ss);
- delay(1000);
-
- Serial.write(wrequest, 27);
- // delay(50);
- //Serial3.write(0); // 回傳ERROR 封包 為 80 (HEX)
- //Serial3.write(1); // 不回傳 不顯示
- //byte A[2]={1,0};
- //={0,0}; //0 ! ReceiveError BCC RAW 回傳ERROR 封包 為 80 (HEX)
- //Serial3.write(A,2);
- //Serial3.print(0); //70 // key 0 get 40 回應 /key 1 | 2 no response key 00 顯示 1f 回應 40
- //Serial3.print(1); //7C
- //byte wrequest2[2]={1,1};
- //Serial3.write(wrequest,19);
- //Serial.write(wrequest,19); // arduino
- //Serial3.print(1);
- for (int j = 0; j < 14; j++) {
- myGLCD.printNumI(wrequest[j] , j * 35, 0);
- myGLCD.print(itoa(wrequest[j], buf, 16) , j * 35, 20);
- }
- }
- /* below is result at protocol monitor
- 0 6F 1F 19 1F 19 1F 1F 1F 1F 1F 1F 1F 1F 1F 79 0F oy
- 1 76 6F 1F 19 1F 19 1F 1F 1F 1F 1F 1F 1F 1F 1F 79 0F voy
- Serial.begin() - 開啟 Serial Port 並設定通訊速率 (baud rate)
- Serial.println() - 傳送資料到外部電腦
- Serial.read() - 接收來自外部電腦的資料
- Serial.available() - 取得 Serial Port 可讀取的資料位元組數目 (number of bytes),如果 Serial port 有資料進來,Serial.available() 會回傳大於 0 的數值。
- Serial.read() - 讀取進來的第一個位元組 (first incoming byte)。
- */
- /*//仿c的printf
- /*void pf(const char *fmt, ... ){
- char tmp[128]; // resulting string limited to 128 chars
- va_list args;
- va_start (args, fmt );
- vsnprintf(tmp, 128, fmt, args);
- va_end (args);
- Serial.print(tmp);
- }*/
- void sendbyte(char val)
- {
- Serial.print(val);
- delay(1/10);
- }
- void sendstring(char *val)
- {
- while (*val != '\0')
- {
- sendbyte(*val++);
- }
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|