first commit
This commit is contained in:
138
examples/raspi/RasPiRH.cpp
Normal file
138
examples/raspi/RasPiRH.cpp
Normal file
@@ -0,0 +1,138 @@
|
||||
// RasPiRH.cpp
|
||||
//
|
||||
// Example program showing how to use RH_NRF24 on Raspberry Pi
|
||||
// Uses the bcm2835 library to access the GPIO pins to drive the NRF24L01
|
||||
// Requires bcm2835 library to be already installed
|
||||
// http://www.airspayce.com/mikem/bcm2835/
|
||||
// Use the Makefile in this directory:
|
||||
// cd example/raspi
|
||||
// make
|
||||
// sudo ./RasPiRH
|
||||
//
|
||||
// Creates a RHReliableDatagram manager and listens and prints for reliable datagrams
|
||||
// sent to it on the default Channel 2.
|
||||
//
|
||||
// Contributed by Mike Poublon
|
||||
|
||||
#include <bcm2835.h>
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <RHReliableDatagram.h>
|
||||
#include <RH_NRF24.h>
|
||||
|
||||
//Function Definitions
|
||||
void sig_handler(int sig);
|
||||
void printbuffer(uint8_t buff[], int len);
|
||||
|
||||
#define CLIENT_ADDRESS 1
|
||||
#define SERVER_ADDRESS 2
|
||||
|
||||
// Create an instance of a driver
|
||||
// Chip enable is pin 22
|
||||
// Slave Select is pin 24
|
||||
RH_NRF24 nrf24(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24);
|
||||
RHReliableDatagram manager(nrf24, SERVER_ADDRESS);
|
||||
|
||||
//Flag for Ctrl-C
|
||||
volatile sig_atomic_t flag = 0;
|
||||
|
||||
//Main Function
|
||||
int main (int argc, const char* argv[] )
|
||||
{
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
if (!bcm2835_init())
|
||||
{
|
||||
printf( "\n\nRasPiRH Tester Startup Failed\n\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf( "\nRasPiRH Tester Startup\n\n" );
|
||||
|
||||
/* Begin Driver Only Init Code
|
||||
if (!nrf24.init())
|
||||
Serial.println("init failed");
|
||||
// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
|
||||
if (!nrf24.setChannel(1))
|
||||
Serial.println("setChannel failed");
|
||||
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm))
|
||||
Serial.println("setRF failed");
|
||||
End Driver Only Init Code */
|
||||
|
||||
/* Begin Reliable Datagram Init Code */
|
||||
if (!manager.init())
|
||||
{
|
||||
printf( "Init failed\n" );
|
||||
}
|
||||
/* End Reliable Datagram Init Code */
|
||||
|
||||
uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN];
|
||||
|
||||
//Begin the main body of code
|
||||
while (true)
|
||||
{
|
||||
uint8_t len = sizeof(buf);
|
||||
uint8_t from, to, id, flags;
|
||||
|
||||
/* Begin Driver Only code
|
||||
if (nrf24.available())
|
||||
{
|
||||
// Should be a message for us now
|
||||
//uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN];
|
||||
uint8_t len = sizeof(buf);
|
||||
if (nrf24.recv(buf, &len))
|
||||
{
|
||||
Serial.print("got request: ");
|
||||
Serial.println((char*)buf);
|
||||
Serial.println("");
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.println("recv failed");
|
||||
}
|
||||
}
|
||||
End Driver Only Code*/
|
||||
|
||||
/* Begin Reliable Datagram Code */
|
||||
if (manager.available())
|
||||
{
|
||||
// Wait for a message addressed to us from the client
|
||||
uint8_t len = sizeof(buf);
|
||||
uint8_t from;
|
||||
if (manager.recvfromAck(buf, &len, &from))
|
||||
{
|
||||
Serial.print("got request from : 0x");
|
||||
Serial.print(from, HEX);
|
||||
Serial.print(": ");
|
||||
Serial.println((char*)buf);
|
||||
}
|
||||
}
|
||||
/* End Reliable Datagram Code */
|
||||
|
||||
if (flag)
|
||||
{
|
||||
printf("\n---CTRL-C Caught - Exiting---\n");
|
||||
break;
|
||||
}
|
||||
//sleep(1);
|
||||
delay(25);
|
||||
}
|
||||
printf( "\nRasPiRH Tester Ending\n" );
|
||||
bcm2835_close();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sig_handler(int sig)
|
||||
{
|
||||
flag=1;
|
||||
}
|
||||
|
||||
void printbuffer(uint8_t buff[], int len)
|
||||
{
|
||||
for (int i = 0; i< len; i++)
|
||||
{
|
||||
printf(" %2X", buff[i]);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user