- Fri Mar 07, 2008 12:18 am
#44188
Hi all i have problem when i send data from pipe A and pipe B together
data is confuse how to do it. Please analyse my code
MY CODE::(Receive)
unsigned char data, status, pipe; //register to hold letter received and sent
unsigned char Buff_Pipe_A[37] , Buff_Pipe_B[37] ;
unsigned char Cnt_Pipe_A = 0 , Cnt_Pipe_B = 0 , Cnt_Pipe_C = 0 ;
unsigned char Snt_Pipe_A = 0 , Snt_Pipe_B = 0 , Snt_Pipe_C = 0;
unsigned char F_Pipe_A = 0 , F_Pipe_B = 0 , F_Pipe_C = 0;
/*********************************************************\
* Configuration MCU *
\*********************************************************/
#pragma config OSC = HSPLL, OSCS = OFF
#pragma config PWRT = ON, BOR = ON, BORV = 45
#pragma config WDT = OFF, WDTPS = 1
#pragma config MODE = MC, WAIT = OFF
#pragma config CCP2MUX = OFF
#pragma config STVR = ON, LVP = OFF
#pragma config DEBUG = OFF
/*********************************************************\
_..-------++._
_.-'/ | _|| \"--._
__.--'`._/_\j_____/_||___\ `----.
_.--'_____ | \ _____ /
_j /,---.\ | =o | /,---.\ |_
[__]==// .-. \\==`===========/==// .-. \\=[__]
`-._|\ `-' /|___\_________/___|\ `-' /|_.'
`---' `---'
\*********************************************************/
void main(void)
{
Initialize(); //initialize PLL, IO, SPI, set up nRF24L01 as RX
//main program loop
Cnt_Pipe_A = 0 , Cnt_Pipe_B = 0;
Snt_Pipe_A = 0 , Snt_Pipe_B = 0;
F_Pipe_A = 0 , F_Pipe_A = 0;
while(TRUE)
{
//wait until a packet has been received
while(!(nrf24l01_irq_pin_active() && nrf24l01_irq_rx_dr_active()));
status = nrf24l01_read_rx_payload(&data, 1);
pipe = nrf24l01_get_rx_pipe_from_status(status);
nrf24l01_irq_clear_all(); //clear all interrupts in the 24L01
switch(pipe)
{
case 0:
Buff_Pipe_A[Cnt_Pipe_A] = data;
Cnt_Pipe_A++;
if(Cnt_Pipe_A > 35)
{
F_Pipe_A = 1;
}
break;
case 1:
Buff_Pipe_B[Cnt_Pipe_B] = data;
Cnt_Pipe_B++;
if(Cnt_Pipe_B > 35)
{
F_Pipe_B = 1;
}
break;
//default:
}
//Send Data From Pipe 0
if(F_Pipe_A == 1 && (F_Pipe_B == 0))
{
putc1USART('*');
while(Busy1USART());
Delay100TCYx(50);
putc1USART('a');
while(Busy1USART());
Delay100TCYx(50);
for(Snt_Pipe_A = 0 ; Snt_Pipe_A < 36 ; Snt_Pipe_A++)
{
putc1USART(Buff_Pipe_A[Snt_Pipe_A]);
while(Busy1USART());
Delay100TCYx(50);
}
Cnt_Pipe_A = 0;
F_Pipe_A = 0;
}
//Send Data From Pipe 1
if((F_Pipe_A == 0) && (F_Pipe_B == 1))
{
putc1USART('*');
while(Busy1USART());
Delay100TCYx(50);
putc1USART('b');
while(Busy1USART());
Delay100TCYx(50);
for(Snt_Pipe_B = 0 ; Snt_Pipe_B < 36 ; Snt_Pipe_B++)
{
putc1USART(Buff_Pipe_B[Snt_Pipe_B]);
while(Busy1USART());
Delay100TCYx(50);
}
Cnt_Pipe_B = 0;
F_Pipe_B = 0;
}
/*
nrf24l01_read_rx_payload(&data, 1); //read the packet into data
nrf24l01_irq_clear_all(); //clear all interrupts in the 24L01
putc1USART(data);
while(Busy1USART());
*/
ToggleLED(); //toggle the on-board LED as visual indication that the loop has completed
} // While True ....
} // Main()...
data is confuse how to do it. Please analyse my code
MY CODE::(Receive)
unsigned char data, status, pipe; //register to hold letter received and sent
unsigned char Buff_Pipe_A[37] , Buff_Pipe_B[37] ;
unsigned char Cnt_Pipe_A = 0 , Cnt_Pipe_B = 0 , Cnt_Pipe_C = 0 ;
unsigned char Snt_Pipe_A = 0 , Snt_Pipe_B = 0 , Snt_Pipe_C = 0;
unsigned char F_Pipe_A = 0 , F_Pipe_B = 0 , F_Pipe_C = 0;
/*********************************************************\
* Configuration MCU *
\*********************************************************/
#pragma config OSC = HSPLL, OSCS = OFF
#pragma config PWRT = ON, BOR = ON, BORV = 45
#pragma config WDT = OFF, WDTPS = 1
#pragma config MODE = MC, WAIT = OFF
#pragma config CCP2MUX = OFF
#pragma config STVR = ON, LVP = OFF
#pragma config DEBUG = OFF
/*********************************************************\
_..-------++._
_.-'/ | _|| \"--._
__.--'`._/_\j_____/_||___\ `----.
_.--'_____ | \ _____ /
_j /,---.\ | =o | /,---.\ |_
[__]==// .-. \\==`===========/==// .-. \\=[__]
`-._|\ `-' /|___\_________/___|\ `-' /|_.'
`---' `---'
\*********************************************************/
void main(void)
{
Initialize(); //initialize PLL, IO, SPI, set up nRF24L01 as RX
//main program loop
Cnt_Pipe_A = 0 , Cnt_Pipe_B = 0;
Snt_Pipe_A = 0 , Snt_Pipe_B = 0;
F_Pipe_A = 0 , F_Pipe_A = 0;
while(TRUE)
{
//wait until a packet has been received
while(!(nrf24l01_irq_pin_active() && nrf24l01_irq_rx_dr_active()));
status = nrf24l01_read_rx_payload(&data, 1);
pipe = nrf24l01_get_rx_pipe_from_status(status);
nrf24l01_irq_clear_all(); //clear all interrupts in the 24L01
switch(pipe)
{
case 0:
Buff_Pipe_A[Cnt_Pipe_A] = data;
Cnt_Pipe_A++;
if(Cnt_Pipe_A > 35)
{
F_Pipe_A = 1;
}
break;
case 1:
Buff_Pipe_B[Cnt_Pipe_B] = data;
Cnt_Pipe_B++;
if(Cnt_Pipe_B > 35)
{
F_Pipe_B = 1;
}
break;
//default:
}
//Send Data From Pipe 0
if(F_Pipe_A == 1 && (F_Pipe_B == 0))
{
putc1USART('*');
while(Busy1USART());
Delay100TCYx(50);
putc1USART('a');
while(Busy1USART());
Delay100TCYx(50);
for(Snt_Pipe_A = 0 ; Snt_Pipe_A < 36 ; Snt_Pipe_A++)
{
putc1USART(Buff_Pipe_A[Snt_Pipe_A]);
while(Busy1USART());
Delay100TCYx(50);
}
Cnt_Pipe_A = 0;
F_Pipe_A = 0;
}
//Send Data From Pipe 1
if((F_Pipe_A == 0) && (F_Pipe_B == 1))
{
putc1USART('*');
while(Busy1USART());
Delay100TCYx(50);
putc1USART('b');
while(Busy1USART());
Delay100TCYx(50);
for(Snt_Pipe_B = 0 ; Snt_Pipe_B < 36 ; Snt_Pipe_B++)
{
putc1USART(Buff_Pipe_B[Snt_Pipe_B]);
while(Busy1USART());
Delay100TCYx(50);
}
Cnt_Pipe_B = 0;
F_Pipe_B = 0;
}
/*
nrf24l01_read_rx_payload(&data, 1); //read the packet into data
nrf24l01_irq_clear_all(); //clear all interrupts in the 24L01
putc1USART(data);
while(Busy1USART());
*/
ToggleLED(); //toggle the on-board LED as visual indication that the loop has completed
} // While True ....
} // Main()...