無線pos機信號不好的解決辦法,干貨——觸摸按鍵信號用無線傳輸速成

 新聞資訊2  |   2023-07-03 13:42  |  投稿人:pos機之家

網(wǎng)上有很多關(guān)于無線pos機信號不好的解決辦法,干貨——觸摸按鍵信號用無線傳輸速成的知識,也有很多人為大家解答關(guān)于無線pos機信號不好的解決辦法的問題,今天pos機之家(www.rcqwhg.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、無線pos機信號不好的解決辦法

無線pos機信號不好的解決辦法

前言:

最近幫人做了個小設(shè)備,使用了無線模塊、觸摸芯片,主要功能就是把觸摸按鍵的信號無線傳到控制繼電器輸出,MCU是STM8系列的芯片,其中使用過程中調(diào)試無線模塊LC12S覺得挺好用的,就寫了這篇文章。

模塊介紹:

LC12S 采用 2.4G SOC 技術(shù),特點是免開發(fā),視距可達100米,模塊收發(fā)一體無需切換,串口透明傳輸,提供通信協(xié)議,可迅速調(diào)試成功。用戶只要了解串口通信,無需復雜的無線通訊知識,就能完成RF遙控產(chǎn)品的開發(fā)。模塊沒有數(shù)據(jù)包大小限制,延時短,半雙工通訊,抗干擾能力強。

● 2.4GHz ISM 頻段,使用無須申請

● 最大輸出功率12dBm

● 接收靈敏度-95dBm

● 發(fā)射工作電流 40mA@12dBm

● 接收工作電流 24mA

● 睡眠電流 9.5uA

● 標準 TTL 電平 UART 串口

● 工作頻率可設(shè)置,多個模塊頻分復用,互不干擾

● 通訊協(xié)議轉(zhuǎn)換及射頻收發(fā)切換自動完成,用戶無須干預,簡單易用

● 通訊速率 0.6kbps -38.4kbps,用戶可通過 AT 指令配置

引腳介紹:

引腳

功能

描述

VCC

電源正

2.8~3.6V,典型 3.3V

RXT

模塊數(shù)據(jù)輸出(TTL 電平)

串口通信數(shù)據(jù)接收

TXD

模塊數(shù)據(jù)輸入(TTL 電平)

串口通信數(shù)據(jù)發(fā)送

SET

設(shè)置位

配置參數(shù)使能(低電平配置,高電平或懸空為數(shù)傳)

CS

休眠

低電平時模塊工作,高電平或懸空模塊休眠

GND

電源地

接地

引腳功能描述VCC電源正2.8~3.6V,典型 3.3VRXT模塊數(shù)據(jù)輸出(TTL 電平)串口通信數(shù)據(jù)接收TXD模塊數(shù)據(jù)輸入(TTL 電平)串口通信數(shù)據(jù)發(fā)送SET設(shè)置位配置參數(shù)使能(低電平配置,高電平或懸空為數(shù)傳)CS休眠低電平時模塊工作,高電平或懸空模塊休眠GND電源地接地

引腳功能描述VCC電源正2.8~3.6V,典型 3.3VRXT模塊數(shù)據(jù)輸出(TTL 電平)串口通信數(shù)據(jù)接收TXD模塊數(shù)據(jù)輸入(TTL 電平)串口通信數(shù)據(jù)發(fā)送SET設(shè)置位配置參數(shù)使能(低電平配置,高電平或懸空為數(shù)傳)CS休眠低電平時模塊工作,高電平或懸空模塊休眠GND電源地接地

基本配置:

設(shè)置模式:

一旦進入設(shè)置狀態(tài),SET 引腳配置必須是低電平,CS 引腳必須接低電平,模塊串口參數(shù)會自動變?yōu)椋簲?shù)據(jù)位 8,波特率 9600,校驗位 N,停止位 1。您的主控也要與此相同。

數(shù)傳模式:

上電后,當 CS引腳接低電,進入數(shù)據(jù)傳輸模式,SET 腳是設(shè)置參數(shù)標志位,這個時候我們可以進行懸空或者拉高處理,讓模塊進入此模式。

設(shè)置模式數(shù)據(jù)的協(xié)議格式:

在官方的手冊里面有關(guān)于協(xié)議內(nèi)容的說明,其中有一些數(shù)據(jù)是保留位,默認發(fā)0x00就可以。

如圖所示,我們可以看到數(shù)據(jù)長度是18個byte,其中包括設(shè)備ID(Self ID)、組網(wǎng)ID(Net ID )、發(fā)射功率(RF Power)、通訊波特率設(shè)置(Baud 1Byte)、無線通訊通道設(shè)置(RF CHN)、設(shè)置時的通訊數(shù)據(jù)長度(Lenght 1Byte)、累加校驗位(CheckSum);其中設(shè)置時的通訊數(shù)據(jù)長度是固定的18byte所以此處默認為0x12。

其他部分的設(shè)置參數(shù),在手冊中各有體現(xiàn),其中組網(wǎng)ID需要按照自己定義的ID區(qū)間進行設(shè)置,因為這個唯一性會影響到你的模塊組網(wǎng)情況。

其余的設(shè)置我設(shè)置參數(shù)我就不進行截圖表示了,大家可以看一下相應的手冊。

測試設(shè)置發(fā)送數(shù)據(jù):

0xaa+0x5a+模塊 ID+組網(wǎng) ID(ID 必須相同)+0x00+RF 發(fā)射功率+0x00+串口速率 +0x00+RF 信道選擇+0x00+0x00+0x12(字節(jié)長度)+0x00+和校驗字節(jié) 注意:和校驗字節(jié)=所有參數(shù)累加的字節(jié)

發(fā)送: AA 5A 22 33 11 22 00 01 00 04 00 64 00 00 00 12 00 07

--->

參考后面的數(shù)據(jù)表格,以上配置參數(shù)設(shè)置無線模塊為:RF 發(fā)射功率:10dbm 串口速率:9600bps RF 信道:100 模塊 ID:0x2233 組網(wǎng) ID:0x1122 和校驗字節(jié):07

接收: 設(shè)置完成后模塊會返回相應數(shù)據(jù) AA 5B 47 00 11 22 00 01 00 04 00 64 00 00 00 12 00 FA

<---

串口調(diào)試助手的信息:

實際設(shè)備連接情況:

設(shè)置模式接線示意圖:

透傳模式接線示意圖:

代碼實現(xiàn):

因為模式使用比較簡單,初始化好設(shè)備串口外設(shè),再把CS引腳和SET配置一下,就可以開始使用了,如果你只是簡單測試,那你可能只需要使用默認設(shè)置,只是進行數(shù)據(jù)的透傳,那你可以直接忽略這部分設(shè)置的代碼部分,直接看nrf_send_normal_data()函數(shù)。

設(shè)置模式下的代碼:定義一個設(shè)置協(xié)議的結(jié)構(gòu)體:

typedef struct __attribute__((__packed__)){    u16 head;                 //    u16 self_id;                 //    u16 net_id;                 //    u8 nc1;               //    u8 rf_power;          //    u8 nc2;               //    u8 rf_baud;          //    u8 nc3;               //    u8 rf_chn;          //    u16 nc4;               //    u8 nc5;               //    u8 length;               //    u8 nc6;               //}SetSend; 

拉低SET引腳,進入設(shè)置模式:

u8 SetNrf(void)//{       GPIO_ResetBits(SET_PORT, SET_PIN);       GPIO_ResetBits(CS_PORT, CS_PIN);      u8 *p1 = malloc(18);      memset(p1,0x00,18);      SetSend *p = (SetSend*)p1;      p->head= 0xaa5a;      p->self_id = 0x2233;      p->net_id = 0x1122;      p->rf_power = 0x00;      p->rf_baud = 0x04;      p->rf_chn = 0x64;      p->length = 0x12;            p1[sizeof(SetSend)] = CheckSum((u8*)p, sizeof(SetSend));      USART_Transmit_String( sizeof(SetSend)+1,p1);#if DEBUG_DPRINT      u8 *str = malloc(20);      hex_str((u8*)p, sizeof(SetSend)+1, str);      USART_Transmit_String(20,str);//      printf("--->:%s\\", str);      free(str);#endif      free(p1);      return 1;      }

數(shù)據(jù)透傳的函數(shù),這個時候SET引腳拉高,這個函數(shù)部分是我自己寫的一個簡單的3byte的sta狀態(tài)發(fā)送。大家可以按照自己的實際使用情況進行修改。

void nrf_send_normal_data(u16 sta){      GPIO_SetBits(SET_PORT, SET_PIN);      u8 *p1 = malloc(3);      memset(p1,0x00,3);      memset(p1,0xAA,1);            memcpy(p1+1,&sta,2);      USART_Transmit_String(3,p1);      free(p1);}

芯片初始化之后需要等待幾十ms才能正常工作,所以需要稍微等待一下。

串口接收解析部分,這部分代碼就仁者見仁智者見智了,大家可以用很多種方法實現(xiàn),我只是貼了一下我寫的代碼部分,僅供參考。其中NRF_RestTime()函數(shù)是在定時器中計時,用來區(qū)分不同的數(shù)據(jù)幀。

u8  USART_RX_BUF[USART_MAX_RECV_LEN];u16 USART_RX_STA=0;u8 NRF_RecvdData(void){ u8 ret = 0; if((USART_RX_STA&(1<<15)) != 0)  ret = 1; return ret;}u16 NRF_RcvLen(void){ return (USART_RX_STA & 0x7FFF);}u8* NRF_RcvBuff(void){ return USART_RX_BUF;}void NRF_ClsRecvd(void){ USART_RX_STA = 0;}typedef struct  __attribute__((__packed__)){  u32 stat    :1;  u32 timOut  :1;  u32 cunt    :15;  u32 des     :15;}TboxTimTypeDef;TboxTimTypeDef gNRFTimeManage;#define TON   (1)#define TOFF  (0)void TimerManageInit(TboxTimTypeDef *t,u8 stat,u16 destim){  t->des  = destim;  t->stat = stat;  t->cunt = 0;  t->timOut = 0;}void NRF_RestTime(void){      if(gNRFTimeManage.stat == TON)      {              (gNRFTimeManage.cunt < gNRFTimeManage.des)?(gNRFTimeManage.cunt++):\\                      (TimerManageInit(&gNRFTimeManage,TOFF,0),USART_RX_STA |=1<<15);      } }void NRF_Irq(void){   u8 res;        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {    res =USART_ReceiveData8(USART1);                #if 0  USART_SendData8(USART1,res);  #endif                      if((USART_RX_STA & ~(1<<15))<USART_MAX_RECV_LEN)                {                      TimerManageInit(&gNRFTimeManage,TON,5);                      USART_RX_BUF[USART_RX_STA++]=res;                   }else                 {                        USART_RX_STA|=1<<15;                    }           } USART_ClearITPendingBit(USART1,USART_IT_RXNE);}void Parse_NRF(void){      if(NRF_RcvLen()>2)    {      u16 len = NRF_RcvLen();       u8 *p = NRF_RcvBuff();      u8 pos = 0;      u16 *sta = (u16*)(p+1);      while(pos < len){        if(*p == 0xAA)        {                    relay_ctrl(*sta);          p += 3;          pos +=3;        }        else{          p++;          pos++;        }      }      USART_RX_STA = 0;    }  }設(shè)備展示

主機端:

從機端:

結(jié)語

這就是我分享的LC12S模塊的使用,如果大家有更好的想法和需求,也歡迎大家分享交流哈。

以上就是關(guān)于無線pos機信號不好的解決辦法,干貨——觸摸按鍵信號用無線傳輸速成的知識,后面我們會繼續(xù)為大家整理關(guān)于無線pos機信號不好的解決辦法的知識,希望能夠幫助到大家!

轉(zhuǎn)發(fā)請帶上網(wǎng)址:http://www.rcqwhg.com/newsone/79143.html

你可能會喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 babsan@163.com 舉報,一經(jīng)查實,本站將立刻刪除。