Arduino UNO with nRF24L01

Dear forum,
I am trying to learn how to program between the Arduino Uno and the nRF24L01. I use Arduino 1.0.5 and the sample sketch is below. But when I verify it, it shows, '::main' must return 'int'. What is it? and how do I fix it? Please help me?!

Sketch is below,

/*
Testing with the new nRF24L01's

This code receives with a Mirf V2 and PIC16F88 dip. It will output the 4 byte RX payload at 9600 baud.

This code will also compile with the free version of CC5X!!!!!!!!!!!!!!!!

This configuration is compatable with nRF2401's (1MB, 8 bit CRC, 4 byte payload), it doesn't implement all of the extra
functionality of the 24L01's

Pete, 4/20/06

*/
#define Clock_8MHz
#define Baud_9600

#include "C:\Global\PIC\C\16F88.h"

//There is no config word because this program tested on a 16F88 using Bloader the boot load program

#pragma origin 4

#define RX_CE PORTB.0 //PIN 6
#define RX_CSN PORTB.1 //PIN 7
#define RX_SCK PORTB.3 //PIN 9
#define RX_MOSI PORTB.4 //PIN 10
#define RX_MISO PORTB.6 //PIN 12
#define RX_IRQ PORTA.0 //PIN 17

#define RED_LED PORTB.7
#define BLUE_LED PORTA.2

uns8 data_array[4];

void boot_up(void);

void configure_RX(void);

void reset_RX(void);

void delay_ms(uns16);

void main()
{
uns8 x, y;

boot_up();

for (x = 0; x < 5; x++)
{
RED_LED = 1;
delay_ms(10);
RED_LED = 0;
BLUE_LED = 1;
delay_ms(10);
BLUE_LED = 0;
}

configure_RX();

while(1)
{

if (RX_IRQ == 0) //wait for anything
{
for (x = 0; x < 5; x++)
{
RED_LED = 1;
delay_ms(10);
RED_LED = 0;
BLUE_LED = 1;
delay_ms(10);
BLUE_LED = 0;
}

delay_ms(200);
reset_RX();

}

}

}

void boot_up(void)
{
OSCCON = 0b.0111.0000; //Setup internal oscillator for 8MHz
while(OSCCON.2 == 0); //Wait for frequency to stabilize

ANSEL = 0b.0000.0000; //Turn pins to Digital instead of Analog
CMCON = 0b.0000.0111; //Turn off comparator on RA port

PORTA = 0b.0000.0000;
TRISA = 0b.1111.1011; //0 = Output, 1 = Input

PORTB = 0b.0000.0010;
TRISB = 0b.0100.0100; //0 = Output, 1 = Input (RX is an input)

BRGH = 0; //Normal speed UART
SPBRG = 12; //8MHz for 9600 Baud

SYNC = 0;
SPEN = 1;
CREN = 1;
TXEN = 1;

}

//2.4G Configuration - Transmitter
//This sets up one RF-24G for shockburst transmission
void configure_RX(void)
{
uns8 i, j, data, cmd;

RX_CSN = 0;
RX_CE = 0;

data = 0x39; //PRX, CRC enabled======================================================================================
cmd = 0x20;

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = cmd.7;

RX_SCK = 1;

RX_SCK = 0;

cmd <<= 1;
}

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = data.7;

RX_SCK = 1;

RX_SCK = 0;

data <<= 1;
}

RX_CSN = 1;

RX_CSN = 0;

data = 0x00; //dissable auto-ack for all channels==================================================================
cmd = 0x21;

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = cmd.7;

RX_SCK = 1;

RX_SCK = 0;

cmd <<= 1;
}

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = data.7;

RX_SCK = 1;

RX_SCK = 0;

data <<= 1;
}

RX_CSN = 1;

RX_CSN = 0;

data = 0x03; //address width = 5 bytes =====================================================================================
cmd = 0x23;

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = cmd.7;

RX_SCK = 1;

RX_SCK = 0;

cmd <<= 1;
}

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = data.7;

RX_SCK = 1;

RX_SCK = 0;

data <<= 1;
}

RX_CSN = 1;

RX_CSN = 0;

data = 0x07; //data rate = 1MB =========================================================================================
cmd = 0x26;

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = cmd.7;

RX_SCK = 1;

RX_SCK = 0;

cmd <<= 1;
}

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = data.7;

RX_SCK = 1;

RX_SCK = 0;

data <<= 1;
}

RX_CSN = 1;

RX_CSN = 0;

//
data = 0x04; //4 byte payload =======================================================================================
cmd = 0x31;

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = cmd.7;

RX_SCK = 1;

RX_SCK = 0;

cmd <<= 1;
}

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = data.7;

RX_SCK = 1;

RX_SCK = 0;

data <<= 1;
}

RX_CSN = 1;

RX_CSN = 0;

//set channel 2======================================================================================================
data = 0x02;
cmd = 0x25;

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = cmd.7;

RX_SCK = 1;

RX_SCK = 0;

cmd <<= 1;
}

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = data.7;

RX_SCK = 1;

RX_SCK = 0;

data <<= 1;
}

RX_CSN = 1;

RX_CSN = 0;

//set address E7E7E7E7E7===============================================================================================
data = 0xE7;
cmd = 0x30;

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = cmd.7;

RX_SCK = 1;

RX_SCK = 0;

cmd <<= 1;
}

for (j = 0; j < 5; j++)
{
for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = data.7;

RX_SCK = 1;

RX_SCK = 0;

data <<= 1;
}

data = 0xE7;
}

RX_CSN = 1;

RX_CSN = 0;

data = 0x3B; //PWR_UP = 1 ==============================================================================================
cmd = 0x20;

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = cmd.7;

RX_SCK = 1;

RX_SCK = 0;

cmd <<= 1;
}

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = data.7;

RX_SCK = 1;

RX_SCK = 0;

data <<= 1;
}

RX_CSN = 1;

RX_CE = 1;

}

//reset all ints
void reset_RX(void)
{
uns8 i, j, data, cmd;

cmd = 0x61; //Read RX payload ==========================================================================================

RX_CSN = 0;

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = cmd.7;

RX_SCK = 1;

RX_SCK = 0;

cmd <<= 1;
}

for (j = 0; j < 4; j++)
{
data = 0;

for(i = 0 ; i < 8 ; i++)
{
data <<= 1;

RX_SCK = 1;

data.0 = RX_MISO;

RX_SCK = 0;

}

while(TXIF == 0); //print out RX payload...=====================================================================
TXREG = data;

}

RX_CSN = 1;

while(TXIF == 0);
TXREG = 10;
while(TXIF == 0);
TXREG = 13;

cmd = 0xE2; //Flush RX FIFO ==========================================================================================

RX_CSN = 0;

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = cmd.7;

RX_SCK = 1;

RX_SCK = 0;

cmd <<= 1;
}

RX_CSN = 1;

RX_CSN = 0;

//
cmd = 0x27;
data = 0x40; //reset int ===========================================================================================

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = cmd.7;

RX_SCK = 1;

RX_SCK = 0;

cmd <<= 1;

}

for(i = 0 ; i < 8 ; i++)
{
RX_MOSI = data.7;

RX_SCK = 1;

RX_SCK = 0;

data <<= 1;

}

RX_CSN = 1;

}

//General short delay
void delay_ms(uns16 x)
{
uns8 y, z;
for ( ; x > 0 ; x--)
for ( y = 0 ; y < 4 ; y++)
for ( z = 0 ; z < 176 ; z++);
}

But when I verify it, it shows, '::main' must return 'int'. What is it? and how do I fix it? Please help me?!

First, there is a sticky at the top of the forum that explains how to post in this section. You clearly couldn't be bothered reading that, or following the guidelines in it.

Second, that is most likely NOT what "it" (whatever it is) shows.

Third, what is so hard to understand about that message? The function, main(), has a very specific prototype. It can not be declared with any other prototype. The function MUST return an int, which means that it's return type must be int, not void.

As to how to fix it, I would think that that is rather obvious.

I'm guessing this isn't code you wrote yourself? Where did it come from? Can you provide a link?

Why is there a function called main? You don't see one in simple Arduino projects - but I guess it's OK to use it provided you make it comply with the rules.

I would be tempted to rename the function and any calls to it and see what happens. (Keep an unmodified backup copy just in case).

...R