當前位置:首頁 » 幣種行情 » trx遙控車教程

trx遙控車教程

發布時間: 2022-07-12 11:26:26

Ⅰ 兩片單片機的無線傳輸用NRF905 接收端 發送端 程序分別怎麼寫 好睏惑

NRF905的程序中只有nRF905Init();Config905();RX();前兩個初始化,後個傳輸函數,執行後在TRXBUF數組中會有相應的值。以下是接收的主函數,這是控制電機左右轉動的程序。(小車部分)

voidmain(void)

{

nRF905Init();

Config905();

while(1)

{

RX();

if(TxRxBuf[0]==0x11){in1=1;in2=0;in5=1;in6=0;}//從左往右

if(TxRxBuf[1]==0x11){in3=1;in4=0;in7=1;in8=0;}//從右往左

if(TxRxBuf[0]==0x22){in1=1;in2=1;in5=1;in6=1;}//從左往右

if(TxRxBuf[1]==0x22){in3=1;in4=1;in7=1;in8=1;}//從右往左

in1=1;in2=0;

}

}

遙控部分:就倆按鍵一個做轉一個右轉這是無線遙控小車的遙控部分。

voidmain(void)

{

nRF905Init();

Config905();

while(1)

{

if(KEY0==0){TxRxBuf[0]=0x11;}

if(KEY0==1){TxRxBuf[0]=0x22;}

if(KEY1==0){TxRxBuf[1]=0x11;}

if(KEY1==1){TxRxBuf[1]=0x22;}

SetTxMode();//SetnRF905inTxmode

TxPacket(TxRxBuf);//SenddatabynRF905

}

}

那麼在設置上:就按以下設置:

#include<reg52.h>

#include<ABSACC.h>

#include<intrins.h>

#include<stdio.h>

//----------------------------------------------------------------------------------------------------------------

#defineuintunsignedint

#defineucharunsignedchar

//----------------------------------------------------------------------------------------------------------------

#defineBYTE_BIT0 0x01

#defineBYTE_BIT1 0x02

#defineBYTE_BIT2 0x04

#defineBYTE_BIT3 0x08

#defineBYTE_BIT4 0x10

#defineBYTE_BIT5 0x20

#defineBYTE_BIT6 0x40

#defineBYTE_BIT7 0x80

//----------------------------------------------------------------------------------------------------------------

bdataunsignedcharDATA_BUF;

#defineDATA7 ((DATA_BUF&BYTE_BIT7)!=0)

#defineDATA0((DATA_BUF&BYTE_BIT0)!=0)

sbit flag =DATA_BUF^7;

sbit flag1 =DATA_BUF^0;

//---------------------------------------------------發送數據緩沖區-------------------------------------------------

#defineTxRxBuf_Len4

unsignedcharTxRxBuf[TxRxBuf_Len]=

{

0x29,0x30,0x31,0x32,

};

//----------------------------------------------NRF905控制IO------------------------------------------------------

sbit TXEN=P1^0;

sbit TRX_CE=P3^2;

sbit PWR=P1^1;

//----------------------------------------------NRF905SPI介面---------------------------------------------------

sbit MISO=P1^6;

sbit MOSI=P1^5;

sbit SCK=P1^7;

sbit CSN=P1^3;

//----------------------------------------nrf905狀態標志---------------------------------------------------------

sbit AM=P1^4;

sbit DR=P3^3;

sbit CD=P1^2;

//---------------------------------------------------------------------------------------------------------------

sbit led3=P2^0;

sbit led2=P2^1;

sbit led1=P2^2;

sbit led0=P2^3;

//--------------------------------------------------------------------------------------------------------------

sbit KEY0=P3^6;

sbit KEY1=P3^7;

//--------------------------------------------------------------------------------

sbit BELL=P3^4;

//-----------------------------------------------------------------------------------------------------------------

ucharseg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0~~9段碼

//-------------------------------------------------------nrf905控制指令-------------------------------------------

#defineWC 0x00

#defineRC 0x10

#defineWTP 0x20

#defineRTP 0x21

#defineWTA 0x22

#defineRTA 0x23

#defineRRP 0x24

//------------------------------------------------NRF905寄存器配置------------------------------------------------

unsignedcharidataRFConf[11]=

{

0x00,//配置命令//

0x4c,//CH_NO,配置頻段在430MHZ

0x0c,//輸出功率為10db,不重發,節電為正常模式

0x44,//地址寬度設置,為4位元組

0x04,0x04,//接收發送有效數據長度為32位元組

0xCC,0xCC,0xCC,0xCC,//接收地址

0x58,//CRC充許,8位CRC校驗,外部時鍾信號不使能,16M晶振

};

codeTxAddress[4]={0xcc,0xcc,0xcc,0xcc};

chartf;

//------------------------------------------------延時------------------------------------------------------------

staticvoidDelay(ucharn)

{

uinti;

while(n--)

for(i=0;i<80;i++);

}

//---------------------------------------------------SPI讀函數-----------------------------------------------------

unsignedcharSpiRead(void)

{

unsignedcharj;

for(j=0;j<8;j++)

{

DATA_BUF=DATA_BUF<<1;

SCK=1;

if(MISO) //讀取最高位,保存至最末尾,通過左移位完成整個位元組

{

DATA_BUF|=BYTE_BIT0;

}

else

{

DATA_BUF&=~BYTE_BIT0;

}

SCK=0;

}

returnDATA_BUF;

}

//-------------------------------------------------SPI寫函數----------------------------------------------------------

voidSpiWrite(unsignedcharsend)

{

unsignedchari;

DATA_BUF=send;

for(i=0;i<8;i++)

{

if(DATA7) //總是發送最高位

{

MOSI=1;

}

else

{

MOSI=0;

}

SCK=1;

DATA_BUF=DATA_BUF<<1;

SCK=0;

}

}

//------------------------------------------------------初始化nRF905---------------------------------------------

voidnRF905Init(void)

{

CSN=1; //Spi disable

SCK=0; //Spiclocklineinitlow

DR=0; //InitDRforinput

AM=0; //InitAMforinput

CD=0; //InitCDforinput

PWR=1; //nRF905poweron

TRX_CE=0; //SetnRF905instandbymode

TXEN=0; //setradioinRxmode

}

//-----------------------------------------------------初始化寄存器-----------------------------------------------

voidConfig905(void)

{

uchari;

CSN=0; //Spienableforwriteaspicommand

//SpiWrite(WC); //Writeconfigcommand寫放配置命令

for(i=0;i<11;i++) //Writeconfigrationwords寫放配置字

{

SpiWrite(RFConf[i]);

}

CSN=1; //DisableSpi

}

//-----------------------------------------------------發送數據打包---------------------------------------------------

voidTxPacket(uchar*TxRxBuf)

{

uchari;

//Config905();

CSN=0;

SpiWrite(WTP); //Writepayloadcommand

for(i=0;i<4;i++)

{

SpiWrite(TxRxBuf[i]); //Write32bytesTxdata

}//Spienableforwriteaspicommand

CSN=1;

Delay(1); //Spidisable

CSN=0; //Spienableforwriteaspicommand

SpiWrite(WTA); //Writeaddresscommand

for(i=0;i<4;i++) //Write4bytesaddress

{

SpiWrite(TxAddress[i]);

}

CSN=1; //Spidisable

TRX_CE=1; //SetTRX_CEhigh,startTxdatatransmission

Delay(1); //while(DR!=1);

TRX_CE=0; //SetTRX_CElow

}

//----------------------------------------------------------設置發送狀態---------------------------------------------

voidSetTxMode(void)

{

TRX_CE=0;

TXEN=1;

Delay(1); //delayformodechange(>=650us)

}

//-----------------------------------------------設置發送狀態---------------------------------------------------

voidSetRxMode(void)

{

TXEN=0;

TRX_CE=1;

Delay(1); //delayformodechange(>=650us)

}

//-------------------------------------------------判斷數據接收狀態-----------------------------------------------------

unsignedcharCheckDR(void) //檢查是否有新數據傳入DataReady

{

if(DR=1&&TRX_CE==1&&TXEN==0)

{

//Delay(50);

return1;

}

else

{

return0;

}

}

//----------------------------------------------------讀NRF905接收數據------------------------------------------------------------

voidRxPacket(void)

{

uchari;

Delay(1);

// TRX_CE=0; //SetnRF905instandbymode

Delay(100);

TRX_CE=0;

CSN=0; //Spienableforwriteaspicommand

Delay(1);

SpiWrite(RRP);

for(i=0;i<4;i++)

{

TxRxBuf[i]=SpiRead(); //Readdataandsavetobuffer

}

CSN=1;

Delay(10);

TRX_CE=1;

}

//--------------------------------------------------------數據接收------------------------------------------------

voidRX(void)

{

SetRxMode(); //SetnRF905inRxmode

while(CheckDR()==0);

Delay(10);

RxPacket();

}

這些是子函數。只要把一些關於電機的sbit定義去掉,剩下的就是真正的子函數了。

那麼,需注意的就只有nRF905Init();Config905();RX();SetTxMode();和一個TXbuf數組,把這幾個用好了,程序就跳出來了。nRF905Init();Config905();收發都需要,SetTxMode();發送要,RX();接收要。就是這樣了,最起碼我看是這樣。

Ⅱ trx4遙控器走遠了就控制不了

這個有兩方面原因
1、遙控器信號干擾或者頻率不足。
2、車上的接收器或者天線接收不好,建議把天線放到面上來。
解決方案:
1、更換汽車電池或充電。
2、更換遙控器電池。
3、同時更換汽車電池或充電和遙控器電池。

Ⅲ trx6遙控車的電源開關在哪裡

遙控不用,安上電池,在車的底部扳動開關,直接就可以開了。
左邊控制前進後退,右邊按鈕控制方向。

Ⅳ 這輛1:10的RC怎麼裝這燈

這是1/10通用遙控車拉力車攀爬車排燈射燈車頂燈改裝升級配件TRX-4的詳細頁面.產品類別:玩具五金配件,品牌:BAGGEE/八格子,規格:1對,貨號:BA19063,產地:廣東深圳,包裝方式:標准...

Ⅳ 老師 你好 我用51驅的超聲波模塊,用來給一個紅外遙控車避障用的。

估計是某個發聲波發出後沒有收到迴音,程序就一直在while那等迴音。這個程序寫的不夠好,你把他改成i=1000; while(!echo | i--), 這樣就算沒有迴音,當i見到0的時候就會自動跳出while了。能把你程序發給我看看嗎?我email是[email protected]
謝拉

熱點內容
7nm比特幣礦機森林人 發布:2025-07-13 12:08:26 瀏覽:918
螞蟻礦機s9綠燈 發布:2025-07-13 12:01:47 瀏覽:167
柬埔寨金界賭場區塊鏈 發布:2025-07-13 11:54:42 瀏覽:854
heco生態鏈上的usdt 發布:2025-07-13 11:44:39 瀏覽:901
比特幣挖礦網路要求 發布:2025-07-13 11:42:36 瀏覽:254
2018上海區塊鏈創新大賽 發布:2025-07-13 11:20:19 瀏覽:417
礦池的常見術語解釋 發布:2025-07-13 10:46:22 瀏覽:853
顯卡礦機超頻後噪音 發布:2025-07-13 10:46:21 瀏覽:352
gta5合約專家怎麼接 發布:2025-07-13 10:46:15 瀏覽:368
以太坊2018預算漲多少 發布:2025-07-13 10:44:48 瀏覽:449